Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];

Вниз

упростить алгоритм 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.006 c
2-1295512726
Dennis I. Komarov
2011-01-20 11:38
2011.04.24
Архивация


2-1295381178
kokj007
2011-01-18 23:06
2011.04.24
перевести 20.01.10 в HEX(FA,EE,F8,95)


15-1294954192
Юрий
2011-01-14 00:29
2011.04.24
С днем рождения ! 14 января 2011 пятница


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


15-1294819013
KSergey
2011-01-12 10:56
2011.04.24
Синхронизация файлов по FTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский