2013-05-18 4 views
0

Учитывая содержимое файла данных кодов каждой записи данных, я не могу напечатать первую строку каждой записи. Тем не менее, он печатает первую строку первой записи, как в: 1aaaaaaaaaaaaaЧтение многострочных записей

Специальное примечание. Я уверен, что есть много способов сделать это, но в моем случае мне нужно решение, которое следует за кодом вопроса. ... содержимое файла

данных записей

1aaaaaaaaaa 
    aaaaaaaaaaa 
    aaaaaaaaaaa 
    __Data__ 
    1bbbbbbbbbb 
    bbbbbbbbbbb 
    bbbbbbbbbbb 
    __Data__ 
    1cccccccccc 
    ccccccccccc 
    ccccccccccc 
    __Data__ 

    { 
     local $/="__Data__\n"; 

     open my $fh,"<","logA.txt" or die "Unable to open file"; 

     while(<$fh>) 
     { 
     # remove the input record separator value of __Data__\n 
     chomp; 

     # display the line of each record 
     if(/([^\n]*)\n(.*)/sm) 
     { 
      print "$1\n"; 
     } 
     } 
     close ($fh); 
    } 

Я получаю нежелательный выход:

[[email protected]]# perl test2.pl  
    1aaaaaaaaaaaaa 
    [[email protected]]# 

мне нужен выход первой строки каждой записи .....

1aaaaaaaaaaa 1bbbbbbbbbbb 1ccccccccccc

ответ

2

Для отладки вы найдете где состояние программы расходится с вашими ожиданиями, то вы возвратов, пока не найдете причину.

Проверка того, что программа показывает, что ваш цикл введен только один раз и что $_ содержит весь файл. Это означает, что Perl не нашел терминатор линии ("__Data__\n").

Рассмотрение файла находит пробелы между __Data__ и символом новой строки. Удалите конечные пробелы из вашего файла.

perl -i -ple's/\s+\z//' logA.txt 
+0

не работает с ошибкой замены Замена не заканчивается на -e строке 1. Кроме того, я вручную проверить завершающие пробелы, так как файл настолько мал, и получить ту же самую проблему .. –

+0

Так вы говорите файл, который вы опубликовали, отличается от того, что вы использовали? Перестаньте лгать нам! Исправьте свой вопрос. – ikegami

+0

Если у вас есть время, попробуйте сам код и сообщите мне результат ... –

Смежные вопросы