Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1279610975
Dennis I. Komarov
2010-07-20 11:29
2010.10.31
Правительство одобрило повышение акцизов на топливо на три рубля


2-1280982633
PinDOS
2010-08-05 08:30
2010.10.31
Символы определенные компилятором


2-1281091833
AlexDn
2010-08-06 14:50
2010.10.31
Графика и координаты


15-1279911922
antonn
2010-07-23 23:05
2010.10.31
посоветуйте по поводу музыки =)


15-1279861656
И. Павел
2010-07-23 09:07
2010.10.31
Экологическая политика





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