2013-05-23 3 views
1

Предположим, у меня есть этот каталог, полный текстовых файлов (необработанный текст). Мне нужен Perl-скрипт, который будет обрабатывать текстовые файлы в каталоге (вверх2bottom) один за другим и сохранять их содержимое в новом отдельном файле, назначаемом мной. Другими словами, я просто хочу создать корпус из многих документов. Примечание: эти документы должны быть разделены некоторым тегом, например. указывая последовательность, в которой они были проанализированы.Perl script - Разбор текстового файла и запись

До сих пор мне удалось выполнить некоторые примеры, и я знаю, как читать, писать и анализировать текстовые файлы. Но я еще не в состоянии объединить их в один скрипт и обрабатывать много текстовых файлов. Не могли бы вы оказать некоторую помощь. thanks

Редактировать: пример кода для записи в файл.

#!/usr/local/bin/perl 
open (MYFILE, '>>data.txt'); 
print MYFILE "text\n"; 
close (MYFILE); 

пример кода для чтения файла.

#!/usr/local/bin/perl 
open (MYFILE, 'data.txt'); 
while (<MYFILE>) { 
    chomp; 
    print "$_\n"; 
} 
close (MYFILE); 

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

+0

Вы должны дать пример входных и выходных файлов и некоторый код, показывающий, что вы пробовали. – gpojd

+0

Какая у вас проблема? Если вы можете читать и писать файлы, трудно себе представить, почему вы не сможете «слить» их. – innaM

+0

как разобрать каталог и прочитать разные файлы, закодировать скрипт для записи содержимого каждого из выходного файла –

ответ

0

важных моментов в этом предложении являются:

  • «волшебный» оператор алмаза (ака readline), который считывает данные из каждого файла в *ARGV,
  • функция eof, которая говорит, если следующий readline на текущем дескрипторе файла будут возвращены любые данные
  • переменная $ARGV, содержащая имя открытого в данный момент файла.

С этим вступлением, здесь мы идем!

#!/usr/bin/perl 

use strict; # Always! 
use warnings; # Always! 

my $header = 1; # Flag to tell us to print the header 
while (<>) { # read a line from a file 
    if ($header) { 
     # This is the first line, print the name of the file 
     print "========= $ARGV ========\n"; 
     # reset the flag to a false value 
     $header = undef; 
    } 
    # Print out what we just read in 
    print; 
} 
continue { # This happens before the next iteration of the loop 
    # Check if we finished the previous file 
    $header = 1 if eof; 
} 

Чтобы использовать его, просто сделать: perl concat.pl *.txt > compiled.TXT

+0

спасибо, хотя я все еще что-то пропустил. см., что я новичок. Мне нужно dl/установить любой пакет, чтобы этот скрипт работал? или? –

+0

Просто сделал, и я получил это «Не могу открыть * .txt: Недопустимый аргумент в строке stackover.pl 7.» -> while (<>) {# читать строку из файла –

+0

Это простой perl, без пакетов. Ошибка при чтении файла. Можете ли вы даже «wc * .txt»? – bonsaiviking

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