Вниз
Скачать: CL | DM;

упростить алгоритм TStrings.SetDelimiterText   Найти похожие ветки 

← →
Scott Storch   (2011-01-19 13:14) [0]

есть строка имен файлов, разделенных запятой:

tmp\log_2011_01_17_22_07.dat, tmp\log_2011_01_18_12_24.dat, tmp\log_2011_01_18_17_11.dat

задача: сформировать из строки список типа TFile


TFile = record
 Name: string;
 Size: Int64;
 CRC32: Cardinal;
end;


Для разбиения строки взял за основу алгоритм TStrings.SetDelimitedText, получилось так:


procedure list_of_file_names(const AVal: string; AList: TList<TFile>);
var
 P1, P2: PChar;
 S: string;
begin
 P1 := PChar(AVal);
 while P1^ in [ #1.." "] do
   P1 := CharNext(P1);
   while P1^ <> #0 do
   begin
     P2 := P1;
     while (P1^ > " ") and (P1^ <> ",") do
       P1 := CharNext(P1);
     SetString(S, P2, P1 - P2);
     AList.Add(TFile(ExtractFileName(S), get_file_size(S), get_file_crc32(S)));
     while P1^ in [ #1.." "] do
       P1 := CharNext(P1);
     if P1^ = "," then
       repeat
         P1 := CharNext(P1);
       until
         not (P1^ in [ #1.." "]);

   end;

end;


Может алгоритм можно упростить, где-то что-то лишнее и можно заменить?


← →
KSergey ©   (2011-01-19 13:37) [1]

А зочем?
Взять как раз TStringList, использовать из него метод SetDelimitedText
После пробежать по items и заполнить структуры, привязанные к свойству Object

Какой смысл копировать имеющийся код?


← →
RWolf ©   (2011-01-19 13:37) [2]

Почему бы просто не использовать TStrings.CommaText?

sl.CommaText:=AVal;
for i:=0 to sl.Count-1 do
begin
 s:=Trim(sl[i]);
 AList.Add(TFile(ExtractFileName(), get_file_size(S), get_file_crc32(S)));
end;


← →
Slym ©   (2011-01-20 05:53) [3]

а мне нравится Fetch из Indy
procedure list_of_file_names(AVal: string; AList: TList<TFile>);
var
S: string;
begin
 while length(AVal)>0 do
 begin
   s:=Fetch(AVal,",");
   AList.Add(TFile(ExtractFileName(S), get_file_size(S),   get_file_crc32(S)));
 end;
end;



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.005 c
15-1294176598
Юрий
2011-01-05 00:29
2011.04.24
С днем рождения ! 5 января 2011 среда


2-1295442572
12
2011-01-19 16:09
2011.04.24
Почему нет хинта что Result может быть неопределен?


2-1295535215
volkafff
2011-01-20 17:53
2011.04.24
Курсор над компонентом и форма компонента Image.


2-1295606184
LDV
2011-01-21 13:36
2011.04.24
выделить из списка цепочки


15-1294650746
Palladin
2011-01-10 12:12
2011.04.24
Автоскролл при нажатии на колесо мыши




   Наверх