Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.08.07;
Скачать: CL | DM;

Вниз

парсин строки имени файла   Найти похожие ветки 

 
DL   (2009-12-23 13:03) [0]

Имеется список строк формата:

 Attach_<ID>_<DateTime>.zip,

 например:

 "Attach_417_23_12_2009_11_52_31.zip".

Задача: из строки извлечь ID и DateTime. Вопрос, сообственно, в слдующем: какой подход грамотнее всего использовать при парсинге: RegExp"ы или же простые PosEx, Copy.


 
RWolf ©   (2009-12-23 13:11) [1]

регэкспами проще, конечно.
правда, размер программы подрастёт.


 
DL   (2009-12-23 13:34) [2]

с подходом определился. спасибо. теперь надо бы определиться с библиотекой для работы с regexp"ами. что посоветуете?


 
MBo ©   (2009-12-23 14:07) [3]

если формат жесткий, то регэкспы - излишество, достаточно разделения строки с помощью TStringList.DelimitedText


 
Юрий Зотов ©   (2009-12-23 14:54) [4]

> какой подход грамотнее всего использовать при
> парсинге: RegExp"ы или же простые PosEx, Copy

Применение РВ для такой детской задачки подобно стрельбе из пушки по воробьям.

> регэкспами проще, конечно.

???????????
Не наоборот?


 
Демо ©   (2009-12-23 15:26) [5]

Судя по формату - достаточно двух функций Copy.


 
DL   (2009-12-23 15:46) [6]

сделал так:


procedure TForm4.Button1Click(Sender: TObject);

 procedure PharsePacketName(const PacketName: string; out ID: Integer;
   out Received: TDateTime);
 begin
   with TStringList.Create do
     try
       Delimiter := "_";
       DelimitedText := PacketName;
       ID := StrToIntDef(Strings[1], -1);
       Received := EncodeDateTime(
         StrToIntDef(Strings[4], -1),
         StrToIntDef(Strings[3], -1),
         StrToIntDef(Strings[2], -1),
         StrToIntDef(Strings[5], -1),
         StrToIntDef(Strings[6], -1),
         StrToIntDef(Strings[7], -1), 0);
     finally
       Free;
     end;
 end;

var
 ID: Integer;
 Received: TDateTime;
begin
 PharsePacketName("attach_417_23_12_2009_13_50_04", ID, Received);
 ShowMessageFmt("ID: %d; Received: %s", [ID, DateTimeToStr(Received)]);
end;


 
TUser ©   (2009-12-23 17:33) [7]

На правах имхи

> Применение РВ для такой детской задачки подобно стрельбе
> из пушки по воробьям.

Применение электростанции+ЛЭП+лампочки тоже похоже на стрельбу их пушки по воробьям. И в программировании, вроде, очень похоже: например, для реализации массива нужен указатель и индексная арифметка. Но люди создают объекты, которые внутрь себя массив оборачивают. И всякий там TList при создании выделяет себе больше памяти, чем "нужно" и выполняет множество "лишнего" кода. Чисто стрельба из пушки.

Выбор любого инструмента определяется альтернативными издержками. А именно: 1. Насколько долго/трудно его заюзать и отладить. 2. Насколько быстро будет работать (варианты - сколько использует памяти, других ресурсов, насколько точный результат выдаст). Например, все, что угодно можно написать на асме, но долго писать. И в большинстве случаев выигрышь в скорости и в прочем будет не критичным. Ну будет программа записать не 360 Кб, а 1, а оно нафиг не надо. Аналогично и в другую сторону, - искать подстроку регэкспами, гораздо проще Боера-Мура, только тормознутее.

Так что выбор зависит от задачи. Если некое место в программе критично, то надо написать все ручками, гораздо оптимальнее стандартных pos/copy, а если не критично, то надо выбрать то, что проще писать. А последнее, к тому же, от конкретного писателя зависит.


 
Palladin ©   (2009-12-23 20:52) [8]


> Так что выбор зависит от задачи

Выбор зависит не от задачи, а от ее условий. Условия описаны ОДНОЗНАЧНЫЕ, алгоритм парсинга ОДНОЗНАЧНЫЙ, без ДВУСМЫСЛЕНОСТЕЙ. Электролампочки и ЛЭП станции тут нет.



Страницы: 1 вся ветка

Текущий архив: 2011.08.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
15-1303146671
Nic
2011-04-18 21:11
2011.08.07
Баннер на сайте. Как вести статистику?


15-1302899395
Юрий
2011-04-16 00:29
2011.08.07
С днем рождения ! 16 апреля 2011 суббота


2-1303912277
young and strong
2011-04-27 17:51
2011.08.07
выбор типа параметра


2-1304085586
ПростоВася
2011-04-29 17:59
2011.08.07
Как работать с WM_GETTEXT


15-1302571619
Jumbo
2011-04-12 05:26
2011.08.07
В этот день, 50 лет назад...