我有一个由数千篇文章组成的大型txt文件,我正在尝试将其拆分为单个文件 - 每篇文章都有一篇文章,我想保存为article_1,article_2等。每篇文章都以一篇文章开头包含单词/ DOCUMENTS /的行。 我对perl完全陌生,任何见解都会非常棒! (甚至是关于良好文档网站的建议)。非常感谢。 到目前为止,我试过的是:
#!/usr/bin/perl
use warnings;
use strict;
my $id = 0;
my $source = "2010_FTOL_GRbis.txt";
my $destination = "file$id.txt";
open IN, $source or die "can t read $source: $!\n";
while (<IN>)
{
{
open OUT, ">$destination" or die "can t write $destination: $!\n";
if (/DOCUMENTS/)
{
close OUT ;
$id++;
}
}
}
close IN;
答案 0 :(得分:4)
假设/DOCUMENTS/
单独出现在一条线上。因此,您可以将记录分隔符。
use English qw<$RS>;
use File::Slurp qw<write_file>;
my $id = 0;
my $source = "2010_FTOL_GRbis.txt";
{ local $RS = "\n/DOCUMENTS/\n";
open my $in, $source or die "can t read $source: $!\n";
while ( <$in> ) {
chomp; # removes the line "\n/DOCUMENTS/\n"
write_file( 'file' . ( ++$id ) . '.txt', $_ );
}
# being scoped by the surrounding brackets (my "local block"),
close $in; # an explicit close is not necessary
}
备注:强>
use English
声明全局变量$RS
。它的“杂乱名称”是$/
。请参阅perldoc perlvar
'/DOCUMENTS/'
本身就在一条线上的想法,我指定了newline + '/DOCUMENTS/' + newline
。如果这是在行上某处出现的路径的一部分,那么该特定值将不适用于记录分隔符。答案 1 :(得分:2)
您是否阅读过Programming Perl?这是最好的开始书!
我不明白你想做什么。我假设您有包含文章的文本,并希望将所有文章放在单独的文件中。
use warnings;
use strict;
use autodie qw(:all);
my $id = 0;
my $source = "2010_FTOL_GRbis.txt";
my $destination = "file$id.txt";
open my $IN, '<', $source;
#open first file
open my $OUT, '>', $destination;
while (<$IN>) {
chomp; # kill \n at the end
if ($_ eq '/DOCUMENTS/') { # not sure, am i right here or what you looking for
close OUT;
$id++;
$destination = "file$id.txt";
open my $OUT, '>', $destination;
} else {
print {$OUT} $_, "\n"; # print into file with $id name (as you open above)
}
}
close $IN;