Главная страница
    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.005 c
2-1289747895
Анонимус
2010-11-14 18:18
2011.02.06
Пара вопросов по Дэльфи 7


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


2-1289725951
lewka
2010-11-14 12:12
2011.02.06
Запись данных в TStringgrid


15-1288349478
Dennis I. Komarov
2010-10-29 14:51
2011.02.06
Сисадминам вопрос:


6-1233923881
leonidus
2009-02-06 15:38
2011.02.06
Прерывание работы TidHTTP





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