Главная страница
    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-1294766702
P
2011-01-11 20:25
2011.04.24
Недокументированная QuerySystemInformation


15-1294754988
12
2011-01-11 17:09
2011.04.24
На панели задач хочу название кнопки Delphi7 + Имя_проекта.


2-1295289241
student22
2011-01-17 21:34
2011.04.24
запуск скрипта/Apache


1-1252509881
CAMITHbIK
2009-09-09 19:24
2011.04.24
TDBCtrlGrid: поведение при загрузке из dll


1-1252579314
webpauk
2009-09-10 14:41
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский