我想从文件中提取所需信息并将其附加到另一个文件中。第一个文件由一些行组成,没有特定模式的标题,只是以“END OF HEADER”字符串结尾。我编写了以下代码,用于查找标题末尾的匹配行:
$find = "END OF HEADER";
open FILEHANDLE, $filename_path;
while (<FILEHANDLE>) {
my $line = $_;
if ($line =~ /$find/) {
#??? what shall I do here???
}
}
,但我不知道如何获取文件的其余部分并将其附加到另一个文件。
感谢您的帮助
答案 0 :(得分:2)
我猜如果文件的内容不是很大,你只需要将整个文件加载到标量中,然后用“END OF HEADER”将其拆分,然后在新版本中打印分割右侧的输出文件(追加)
open READHANDLE, 'readfile.txt' or die $!;
my $content = do { local $/; <READHANDLE> };
close READHANDLE;
my (undef,$restcontent) = split(/END OF HEADER/,$content);
open WRITEHANDLE, '>>writefile.txt' or die $!;
print WRITEHANDLE $restcontent;
close WRITEHANDLE;
答案 1 :(得分:1)
此代码将从命令行获取文件名,从第一个文件打印最多END OF HEADER
的所有文件,然后从第二个文件打印所有行。请注意,输出将发送到STDOUT,因此您必须重定向输出,如下所示:
perl program.pl headfile.txt mainfile.txt > newfile.txt
更新现在已修改为在行END OF HEADER
之后打印所有第一个文件,然后是所有第二个文件
use strict;
use warnings;
my ($header_file, $main_file) = @ARGV;
open my $fh, '<', $header_file or die $!;
my $print;
while (<$fh>) {
print if $print;
$print ||= /END OF HEADER/;
}
open $fh, '<', $main_file or die $!;
print while <$fh>;
答案 2 :(得分:1)
use strict;
use warnings;
use File::Slurp;
my @lines = read_file('readfile.txt');
while ( my $line = shift @lines) {
next unless ($line =~ m/END OF HEADER/);
last;
}
append_file('writefile.txt', @lines);
答案 3 :(得分:1)
我相信这会做你需要的:
use strict;
use warnings;
my $find = 'END OF HEADER';
my $fileContents;
{
local $/;
open my $fh_read, '<', 'theFile.txt' or die $!;
$fileContents = <$fh_read>;
}
my ($restOfFile) = $fileContents =~ /$find(.+)/s;
open my $fh_write, '>>', 'theFileToAppend.txt' or die $!;
print $fh_write $restOfFile;
close $fh_write;
答案 4 :(得分:0)
my $status = 0;
my $find = "END OF HEADER";
open my $fh_write, '>', $file_write
or die "Can't open file $file_write $!";
open my $fh_read, '<', $file_read
or die "Can't open file $file_read $!";
LINE:
while (my $line = <$fh_read>) {
if ($line =~ /$find/) {
$status = 1;
next LINE;
}
print $fh_write $line if $status;
}
close $fh_read;
close $fh_write;