0

ファイルから必要な情報を抽出し、別のファイルに追加したいと考えています。最初のファイルは、特定のパターンのないヘッダーとしていくつかの行で構成され、「END OF HEADER」文字列で終わります。ヘッダーの末尾に一致する行を見つけるために、次のコードを書きました。

$find = "END OF HEADER";                     
open FILEHANDLE, $filename_path;      
while (<FILEHANDLE>) {

     my $line = $_;                                                
     if ($line =~ /$find/) {

         #??? what shall I do here???                                                                                      
     }
}

、しかし、ファイルの残りを取得して他のファイルに追加する方法がわかりません。

助けてくれてありがとう

4

5 に答える 5

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;
于 2012-10-29T18:53:19.127 に答える
1

このコードは、コマンド ラインからファイル名を取得しEND OF HEADER、最初のファイルまでのすべてのファイルを出力し、続いて 2 番目のファイルのすべての行を出力します。出力は STDOUT に送信されるため、次のように出力をリダイレクトする必要があることに注意してください。

perl program.pl headfile.txt mainfile.txt > newfile.txt

Update Now は、行のEND OF HEADERの最初のファイルをすべて印刷し、その後に 2 番目のファイルをすべて印刷するように変更されました。

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>;
于 2012-10-29T18:45:49.977 に答える
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);
于 2012-10-29T18:52:35.057 に答える
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;
于 2012-10-29T19:00:45.077 に答える
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;
于 2012-10-29T18:36:22.410 に答える