Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.24;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.013 c
15-1294837507
AlexDn
2011-01-12 16:05
2011.04.24
Гугл кеширование?


15-1294176598
Юрий
2011-01-05 00:29
2011.04.24
С днем рождения ! 5 января 2011 среда


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


2-1295032117
Сергей
2011-01-14 22:08
2011.04.24
Вызов функции из функции


15-1293095836
Павел Калугин
2010-12-23 12:17
2011.04.24
Встретим новый год в Нижнем Новгороде?