Форум: "Основная";
Текущий архив: 2011.08.07;
Скачать: [xml.tar.bz2];
Внизпарсин строки имени файла Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c