Многострочный файл Perl Parsing с изменением размеров полей - PullRequest
1 голос
/ 27 мая 2011

Я немного озадачен этим. Я пытаюсь проанализировать файл, содержащий данные, например:

"1111 Some random descriptive text can have numbers and letters",
// :property1.Some description
// :property2.A different description
// :property3.Yet another
"2222 More random text here",
// :property1.Some description
// :property1.A different description
// :property2.Yet another description
// :property3.Yet another

Я собираюсь разобрать это и создать HTML-файлы.

У меня в настоящее время есть это в массиве после выполнения:

@array = <FILE>;

#Put it in a single long string:
$long_string = join("",@array);

#Then trying to split it with the following regex:
@split_array = split(/\"\d{4}.+",/,$long_string);

Я планирую каким-то образом сохранить строку соответствия и как-то соотнести ее с полями свойств ...

Просто сейчас очень сомневаюсь в моих методах ..

1 Ответ

1 голос
/ 28 мая 2011

При синтаксическом анализе текста вам необходимо определить критические точки кредитного плеча , которые помогут вам отличить одну часть информации от другой.Вот что я вижу в вашем тексте:

  • Каждая строка представляет собой отдельную единицу.

  • Некоторые строки начинаются с //, а другие - не 'т.

  • В начале линий есть некоторая закономерность, но в остальном большая изменчивость.

Путем выплескивания иобъединяя документ в одну строку, вы ослабляете эти рычаги.

Другая ключевая стратегия синтаксического анализа заключается в разбивке вещей на простые, понятные шаги.Здесь также стратегия «беги одним регулярным выражением против гигантской строки» часто является неправильным направлением.

Вот как я бы начал:

use strict;
use warnings;

open(my $file_handle, '<', 'input_file_name') or die $!;

while (my $line = <$file_handle>){
    if ( $line =~ /^\"(\d+)/ ){
        my $number = $1;
        ...
    }
    else {
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...