Главная страница
    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.003 c
15-1294694994
Юрий
2011-01-11 00:29
2011.04.24
С днем рождения ! 11 января 2011 вторник


15-1294985178
Медвежонок ХМЛ
2011-01-14 09:06
2011.04.24
УЭК


15-1294834077
George
2011-01-12 15:07
2011.04.24
TIdHTTP.Get и Windows 7


15-1294499183
RWolf
2011-01-08 18:06
2011.04.24
GhostDoc для Delphi


2-1295522746
cyber-pilot
2011-01-20 14:25
2011.04.24
Вопрос про работу эксепшенов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский