Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1302754323
И. Павел
2011-04-14 08:12
2011.08.07
ABBYY тормозит мою программу. Не пойму, каким образом...


15-1303058133
NailMan
2011-04-17 20:35
2011.08.07
Рычим, коптим, портим воздух выхлопом


15-1302425989
Константинов
2011-04-10 12:59
2011.08.07
Проблемы со Skype


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


15-1303072193
Юрий
2011-04-18 00:29
2011.08.07
С днем рождения ! 18 апреля 2011 понедельник





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