Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.06;
Скачать: CL | DM;

Вниз

парсинг имени файла   Найти похожие ветки 

 
на4инающий   (2010-11-15 12:01) [0]

приложение загружает пакеты обновления. при загрузке нужно из имени файла пакета обновления извлекать значения версий. Небходим быстрое и красивое решение.

формат имени файла пакета обновления: update_1_2.zip

Сам сделал так:


procedure get_pack_vers(const Afile_name: string; out Afrom_ver,
 Ato_ver: Integer);
var
 B: Boolean;
 Ptr, Ptr2: PChar;
 S: string;
begin
 Ptr := PChar(Afile_name);
 B := True;
 while Ptr^ <> #0 do
 begin
   if Ptr^ in ["0".."9"] then
   begin
     Ptr2 := Ptr;
     while Ptr^ in ["0".."9"] do
       Ptr := CharNext(Ptr);
     SetString(S, Ptr2, Ptr - Ptr2);
     if B then
       Afrom_ver := StrToInt(S)
     else
       Ato_ver   := StrToInt(S);
     B := False;
   end;
   Ptr := CharNext(Ptr);
 end;
end;


На другом форуме посоветовали:


procedure get_pack_vers(const Afile_name: string; out X, Y: Integer);
const
 CUR_DELIMITER = "_";
begin
 with TStringList.Create do
   try
     Delimiter := CUR_DELIMITER;
     DelimitedText := StringReplace(Afile_name, ".", CUR_DELIMITER, []);
     X := StrToInt(Strings[1]);
     Y := StrToInt(Strings[2]);
   finally
     Free;
   end;
end;


Лично мне кажется предложенный вариант громоздким + лишние ликлы. Что посоветуете.


 
clickmaker ©   (2010-11-15 12:19) [1]

1-й вариант оптимальней


 
Anatoly Podgoretsky ©   (2010-11-15 12:20) [2]

> на4инающий  (15.11.2010 12:01:00)  [0]

Искать первую цифру и компировать до точки, потом заменить подчеркивание на
точку.


 
12 ©   (2010-11-15 12:56) [3]


> Небходим быстрое и красивое решение.

зачем, интересно? Неужели каждые пять секунд надо обновляться?
за 2. Все понятно сразу и не читая  задания


 
Медвежонок Пятачок ©   (2010-11-15 12:59) [4]

под быстрых решением здесь подразумевают не быстро работающее, а быстро пишущееся (мало строк кода чтобы было)


 
Jeer ©   (2010-11-15 13:01) [5]

Если формат имени файлов не может быть "неверным", то я бы сделал так и не парился.
(всякие проверки исключены для наглядности)

procedure get_ver(const Afile_name: string; out Afrom_ver,
Ato_ver: integer);
var
   s1,s2: string;
   j1,j2,j3: integer;
begin
 j1 := Pos("_",Afile_name);
 j3 := Pos(".",Afile_name);
 s1 := Copy(Afile_name, j1+1, j3-j1-1);
 j2 := Pos("_",s1);
 s2 := Copy(s1,j2+1,Length(s1)-j2);
 Delete(s1, j2, Length(s1)-j2+1);
 Afrom_ver := StrToInt(s1);
 Ato_ver := StrToInt(s2);
end;


 
clickmaker ©   (2010-11-15 13:01) [6]

> под быстрых решением здесь подразумевают не быстро работающее,
> а быстро пишущееся

а чаще готовое )



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

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

Наверх




Память: 0.46 MB
Время: 0.004 c
15-1288271870
Правильный$Вася
2010-10-28 17:17
2011.02.06
DVD DL болванки - кто какие пользует и с какими приводами?


2-1290171598
Lana
2010-11-19 15:59
2011.02.06
TStringGrid


2-1289927150
Zoia Ziberman
2010-11-16 20:05
2011.02.06
Программа на Делфе


15-1287138691
xayam
2010-10-15 14:31
2011.02.06
Чего выбрать из SSD?


15-1288088259
Loseva
2010-10-26 14:17
2011.02.06
О государственном прЕзрении человеков





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