Главная страница
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.48 MB
Время: 0.009 c
15-1287415882
ocean
2010-10-18 19:31
2011.02.06
Флешка 4Г стала 4М


15-1288267223
PEAKTOP
2010-10-28 16:00
2011.02.06
Ну что, начинаем все сначала ?


15-1287842168
Фокс Йовович
2010-10-23 17:56
2011.02.06
Налог на чистые болванки и флэшки


2-1289799666
antsa
2010-11-15 08:41
2011.02.06
Чтение цвета символа в консоли


15-1287865739
Юрий
2010-10-24 00:28
2011.02.06
С днем рождения ! 24 октября 2010 воскресенье