Текущий архив: 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.003 c