Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.29;
Скачать: CL | DM;

Вниз

Выборка (поиск) необходимых строк в текстовом файле (макете)   Найти похожие ветки 

 
n_sch   (2008-05-30 14:43) [0]

Добрый день! Ни как не могу сооброзить, как организовать поиск в "текстовике" точнее макете, строки которого разделенны тэгами, он примерно выглядит так:

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, там такие задачи решаются просто, а тут надо текстовый макет обработать...
Заранее спасибо!


 
Vlad Oshin ©   (2008-05-30 14:49) [1]

строки фиксированной длинны, для ускорения ничего считать не надо,
просто с такого-то по такой-то символ копировать


 
Vlad Oshin ©   (2008-05-30 14:49) [2]

Удалено модератором


 
Vlad Oshin ©   (2008-05-30 14:49) [3]

Удалено модератором


 
Ega23 ©   (2008-05-30 14:49) [4]

Pos, Copy + F1


 
Reindeer Moss Eater ©   (2008-05-30 14:52) [5]

Начало:
Pos("AM17",строка) + Lenth("AM17")
Длина:
Pos("MT3",строка) - начало - Lenth("AM17")

плюс/минус трамвайная остановка.


 
TUserClass   (2008-05-30 14:55) [6]

Вот так мона еще:

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;


 
TUserClass   (2008-05-30 14:59) [7]


> 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;


 
Сергей М. ©   (2008-05-30 15:10) [8]


> n_sch   (30.05.08 14:43)


Если обрабатываемые файлы достаточно большого размера и/или состоит из строк переменной длины, есть прямой резон воспользоваться любым готовым механизмом обработки регулярных выражений.

см., к примеру, TRegExpr



Страницы: 1 вся ветка

Текущий архив: 2008.06.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
2-1212096870
deras
2008-05-30 01:34
2008.06.29
Функция в MSSQL2000


2-1212430785
S@shka
2008-06-02 22:19
2008.06.29
Как реализуется подобная вещь...


2-1212469766
кот
2008-06-03 09:09
2008.06.29
из Char в Integer


15-1211045220
@!!ex
2008-05-17 21:27
2008.06.29
Что такое кристаллическая решетка?


6-1189576836
ient
2007-09-12 10:00
2008.06.29
Принудительный вызов Recv в чужом приложении