![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
парсинг имени файла
на4инающий © (2010-11-15 12:01:00)приложение загружает пакеты обновления. при загрузке нужно из имени файла пакета обновления извлекать значения версий. Небходим быстрое и красивое решение.
формат имени файла пакета обновления: 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;
Лично мне кажется предложенный вариант громоздким + лишние ликлы. Что посоветуете.
Jeer (2010-11-15 13:01:00) [1]Если формат имени файлов не может быть "неверным", то я бы сделал так и не парился.
(всякие проверки исключены для наглядности)
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:00) [2]> под быстрых решением здесь подразумевают не быстро работающее,
> а быстро пишущееся
а чаще готовое )
Медвежонок Пятачок (2010-11-15 12:59:00) [3]под быстрых решением здесь подразумевают не быстро работающее, а быстро пишущееся (мало строк кода чтобы было)
12 (2010-11-15 12:56:00) [4]
> Небходим быстроеи красивое решение.
зачем, интересно? Неужели каждые пять секунд надо обновляться?
за 2. Все понятно сразу и не читая задания
Anatoly Podgoretsky (2010-11-15 12:20:00) [5]> на4инающий (15.11.2010 12:01:00) [0]
Искать первую цифру и компировать до точки, потом заменить подчеркивание на
точку.
clickmaker (2010-11-15 12:19:00) [6]1-й вариант оптимальней