Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];
Вниз
парсинг имени файла Найти похожие ветки
← →
Scot Storch (2010-08-05 16:30) [0]есть список имен файлов следующего формата:
"upd_-1_to_567.zip"
"upd_567_to_569.zip"
"upd_569_to_570.zip"
нужно, проходя по списку, извлекать из имени файла два целочисленных значения, т.е. например -1 и 567 для первого. Как грамотнее всего парсить строку.
← →
Юрий Зотов © (2010-08-05 16:33) [1]PosEx и Copy.
← →
Scot Storch (2010-08-05 18:19) [2]Сделал как советовали:
procedure TForm1.Button2Click(Sender: TObject);
procedure get_upd_range(const file_name: string; out vers_from,
vers_to: string);
var
Afile_name: string;
X, Y, Z: Integer;
begin
Afile_name := ChangeFileExt(file_name, "");
X := PosEx("_", Afile_name);
if X > 0 then
begin
Y := PosEx("_", Afile_name, X + 1);
if Y > 0 then
begin
Z := PosEx("_", Afile_name, Y + 1);
if Z > 0 then
begin
vers_from := Copy(Afile_name, X + 1, Y - 1 - X);
vers_to := Copy(Afile_name, Z + 1, Length(Afile_name) - Z);
end;
end;
end;
end;
var
vers_from, vers_to: string;
begin
get_upd_range("upd_-1_to_659.zip", vers_from, vers_to);
ShowMessage(vers_from + #13#10 + vers_to);
end;
Вроде работает как надо, ток складывается впечатление что слишком громоздко или я ошибаюсь?
← →
Юрий Зотов © (2010-08-05 18:34) [3]1. Это лишнее:
Afile_name := ChangeFileExt(file_name, "");
Переменная Afile_name вообще не нужна.
2. Не предусмотрены возвращаемые значения для случая, когда
X<=0 или Y<=0 или Z<=0. Я бы поднимал исключение.
← →
KilkennyCat © (2010-08-05 18:44) [4]если узкоспециализированно, то так быстрее:
s - входящая, а, b - выходящая
var
i, L : integer;
ss : boolean;
begin
L := length(s);
ss := false;
for i := 0 to L do
if s[i] in ["0".."9", "-"] then
if ss then a := a + s[i] else b := b + s[i] else ss := true;
end;
← →
KilkennyCat © (2010-08-05 18:45) [5]
> if ss then a := a + s[i] else b := b + s[i] else ss := true;
ошибка.
if ss then a := a + s[i] else b := b + s[i] else if a <> "" then ss := true;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c