![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выборка (поиск) необходимых строк в текстовом файле (макете) [D6, WinXP]
n_sch © (2008-05-30 14:43:00)Добрый день! Ни как не могу сооброзить, как организовать поиск в "текстовике" точнее макете, строки которого разделенны тэгами, он примерно выглядит так:
0B52305080003000000452592|DT3:005|PA10:0003000000|RC10:4025770011|AM17:000000000 04272373|CU3:RUR|MT3:193|PN145:УФК|EE:
0B52305080003000000452590|DT3:005|PA10:0003000000|RC10:4025770011|AM17:000000002 77432670|CU3:RUR|MT3:193|PN145:УФК|EE:
т.е. задача состоит в следующем найти во всех строках и вывести в Edit значение ну допустим тэга AM17: и MT3:
пытался сделать некий цикл типа:
OpenDialog1.Execute;
f:=OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(f);
listaccount:= Tstringlist.Create;
listaccount.LoadFromFile(f);
for i:=1 to listaccount.Count do begin
s := listaccount.Strings[i-1];
for z:=i to (Length(s)) do begin
if (s[z]='|') and (s[z+1]='А') and (s[z+2]='М') then begin
Edit1.Text:=s[z+3]+s[z+4];
но что делать дальше не сооброжу, как вывести значение цифр до появления следующего тэга???? Я работал с таблицам типа paradox или dbf, там такие задачи решаются просто, а тут надо текстовый макет обработать...
Заранее спасибо!
Сергей М. (2008-05-30 15:10:00) [1]
> n_sch (30.05.08 14:43)
Если обрабатываемые файлы достаточно большого размера и/или состоит из строк переменной длины, есть прямой резон воспользоваться любым готовым механизмом обработки регулярных выражений.
см., к примеру, TRegExpr
TUserClass (2008-05-30 14:59:00) [2]
> TUserClass (30.05.08 14:55) [6]
Пример:
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage (GetElement ('0B52305080003000000452590|DT3:005|PA10:0003000000|RC10:4025770011|AM17:0000000 02 77432670|CU3:RUR|MT3:193|PN145:УФК|EE:', 'AM17:'));
end;
TUserClass (2008-05-30 14:55:00) [3]Вот так мона еще:
function GetElement (Text, TagName : string) : string;
var
TempS : string;
Res : string;
I : word;
begin
TempS := StrPos (PChar (Text), PChar (TagName));
Delete (TempS, 1, Length (TagName));
I := 1;
Res := '';
While (TempS[I] <> '|') and (I <= Length (TempS)) do begin
Res := Res + TempS[I];
INC (I);
end;
Result := Res;
end;
Reindeer Moss Eater (2008-05-30 14:52:00) [4]Начало:
Pos('AM17',строка) + Lenth('AM17')
Длина:
Pos('MT3',строка) - начало - Lenth('AM17')
плюс/минус трамвайная остановка.
Vlad Oshin (2008-05-30 14:49:00) [5]строки фиксированной длинны, для ускорения ничего считать не надо,
просто с такого-то по такой-то символ копировать
Vlad Oshin (2008-05-30 14:49:00) [6]Удалено модератором
Vlad Oshin (2008-05-30 14:49:00) [7]Удалено модератором
Ega23 (2008-05-30 14:49:00) [8]Pos, Copy + F1