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

Вниз

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

 
на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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
15-1287856169
Кто б сомневался
2010-10-23 21:49
2011.02.06
Помогите перевести


15-1287493341
azamatufa
2010-10-19 17:02
2011.02.06
Посоветуйте оптимальную структуру БД...


15-1283595848
Jee
2010-09-04 14:24
2011.02.06
Запустить одну процедуру несколькими потоками


8-1210184448
Nizam
2008-05-07 22:20
2011.02.06
TrackBar


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