2016-05-20 3 views
2

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

В основном файл содержит текст, похожий на них:

//test/some_text/value1 
... #001 some non important text 
... #023 some non important text 
//test/some_text/value2 
... #1123 some non important text 
//test/some_text/value3 
... #001 some non important text 
... #023 some non important text 
... #022 some non important text 
... #566 some non important text 
//test/some_text/value4 
... #42 some non important text 

К сожалению, я не могу предсказать, сколько строк с точками у меня будет ниже каждой линии началась с // и я хотел бы получить на выходе, как это:

//test/some_text/value1 - 001 
//test/some_text/value1 - 023 
//test/some_text/value2 - 1123 
//test/some_text/value3 - 001 
//test/some_text/value3 - 023 
//test/some_text/value3 - 022 
//test/some_text/value3 - 566 
//test/some_text/value4 - 42 

Я читаю текстовый файл по строкам, но я чувствую, что это не лучшее решение. Я бы очень признателен за ваши советы и помощь в решении проблемы.

+1

привет, добро пожаловать в переполнение стека. Благодарю вас, вы проделали отличную работу, отметив проблему с четкими входными и выходными данными. Но нам не нравится писать код для вас. Не могли бы вы показать нам, что у вас есть? – Schwern

ответ

3

Построчный вариант в порядке. Вам просто нужно сохранить строку префикса.

use warnings; 
use strict; 

my $prefix; 
while (<DATA>) { 
    if (m{^//}) { 
     chomp; 
     $prefix = $_; 
    } 
    else { 
     my ($num) = /#(\d+)/; 
     print "$prefix - $num\n"; 
    } 

} 

__DATA__ 
//test/some_text/value1 
... #001 some non important text 
... #023 some non important text 
//test/some_text/value2 
... #1123 some non important text 
//test/some_text/value3 
... #001 some non important text 
... #023 some non important text 
... #022 some non important text 
... #566 some non important text 
//test/some_text/value4 
... #42 some non important text 
Смежные вопросы