Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.03.2011, 12:10
otRock otRock вне форума
Прохожий
 
Регистрация: 30.03.2011
Сообщения: 5
Репутация: 10
По умолчанию Помогите распарсить строку

Всем привет. Есть строка вида:
Цитата:
<$14><$2F><TEXT><COLOR41>[Button Square]<$3E>Hellow world!!!<END>
Также в отдельном файле есть таблица сопоставлений, которую я подгружаю в TStringList:
Цитата:
00=<END>
3A=[Пробел]
3B=!
57=H
73=d
74=e
7B=l
7E=o
81=r
86=w
0930=<TEXT>
0A41=<COLOR41>
0B33=[Button Square]
Те данные, что не входят в таблицу - отображаются как <$00..FF>
Пишу следующую процедуру и всё отображается не так как задумывал:
Код:
procedure TEditor.StrToTBytes(const str: String);
var
  I: Integer;
  S: String;
begin
  S := str;
  CT := TStringList.Create;
  CT.LoadFromFile('code.tbl');
  S := StringReplace(S, #13, '', [rfReplaceAll]);
  S := StringReplace(S, #10, '', [rfReplaceAll]);

  for I := $00 to $FF do begin
    S := StringReplace( S,
      CT.Values[IntToHex(I, 2)],
      '<$'+IntToHex(I, 2)+'>',
      [rfReplaceAll]
    );
  ShowMessage(S);
  // Тут должно быть продолжение парсинга, но уже что-то не так
  CT.Free;
  end;

Последний раз редактировалось otRock, 30.03.2011 в 12:21.
Ответить с цитированием
  #2  
Старый 30.03.2011, 12:18
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

чет меня вот это смущает:
Код:
for I := $00 to $FF do begin
    S := StringReplace( S,
      CT.Values[IntToHex(I, 2)],
      '<$'+IntToHex(I, 2)+'>',
      [rfReplaceAll]
    );
цикл несколько смущает, по логике вы пробегаете от 0 до CT.count-1
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #3  
Старый 30.03.2011, 12:29
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

и у вас CT.Free внутри цикла, т.е. после первого прохода... объекта CT уже нет!
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #4  
Старый 30.03.2011, 12:35
otRock otRock вне форума
Прохожий
 
Регистрация: 30.03.2011
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Raider
и у вас CT.Free внутри цикла, т.е. после первого прохода... объекта CT уже нет!
С этим всё в порядке.. это я здесь на форуме не скопировал 1 end
Ответить с цитированием
  #5  
Старый 30.03.2011, 12:37
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  S: String;
  CT : TStringList;
begin
  S := edit1.text;
  CT := TStringList.Create;
  CT.LoadFromFile('c:\code.tbl.txt');
  S := StringReplace(S, #13, '', [rfReplaceAll]);
  S := StringReplace(S, #10, '', [rfReplaceAll]);

  for I := 0 to CT.Count-1 do begin
    S := StringReplace( S,
      CT.Values[CT.Names[i]],
      '<$'+CT.Names[i]+'>',
      [rfReplaceAll]
    );

  // Òóò äîëæíî áûòü ïðîäîëæåíèå ïàðñèíãà, íî óæå ÷òî-òî íå òàê

  end; ShowMessage(S);
  CT.Free;
  end;
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #6  
Старый 30.03.2011, 12:40
otRock otRock вне форума
Прохожий
 
Регистрация: 30.03.2011
Сообщения: 5
Репутация: 10
По умолчанию

После твоей процедуры получается:
Цитата:
<$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54>> <$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54>> <$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54>> 33<$4<$54>>1<$4<$54>>4<$4<$54>><$4<$52><$4<$54>><$ 4<$52><$4<$54>>$3<$54><$4<$54>><$4<$52><$4<$54>><$ 4<$52><$4<$54>>$3<$54><$4<$54>><$4<$52><$4<$54>><$ 4<$52><$4<$54>>$3<$54><$4<$54>>33<$4<$54>>2<$4<$54 >><$55><$4<$54>><$4<$52><$4<$54>><$63><$54>X<$63>< $4<$54>><$4<$52><$4<$54>><$52><$5E><$5B><$5E><$61> 4<$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54> ><$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54> >33<$4<$54>>1<$4<$54>><$4<$54>>[<$51>utton<$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54 ><$4<$54>>3<$50><$4<$54>><$62>quare]<$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54>> <$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54>> 33<$4<$54>><$54><$4<$54>><$57>ellow<$4<$52><$4<$54 >><$4<$52><$4<$54>>$3<$54><$4<$54>>3<$50><$4<$54>> world<$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4< $54>>3<$51><$4<$54>><$4<$52><$4<$54>><$4<$52><$4<$ 54>>$3<$54><$4<$54>>3<$51><$4<$54>><$4<$52><$4<$54 >><$4<$52><$4<$54>>$3<$54><$4<$54>>3<$51><$4<$54>> <$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$54><$4<$54>> 00<$4<$54>><$4<$52><$4<$54>><$4<$52><$4<$54>>$3<$5 4><$4<$54>>3<$50><$4<$54>>
Ответить с цитированием
  #7  
Старый 30.03.2011, 12:34
otRock otRock вне форума
Прохожий
 
Регистрация: 30.03.2011
Сообщения: 5
Репутация: 10
По умолчанию

Да, так и есть, например строка:
Цитата:
<$14><$2F><TEXT><COLOR41>[Button Square]<$3E>Hellow world!!!<END>
согласно таблице после этого цикла должна превратиться в
Цитата:
<$14><$2F><TEXT><COLOR41>[Button Square]<$3E><$57><$74><$7B><$7B><$7E><$74><$3A><$74><$7E> <$81><$7B><$73><$3B><$3B><$3B><$00>
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025