0

私はperlを使って私が持っているテキストファイルから行を削除できると知らされました。しかし、私はperlの非常に短い経験を持っています。

2番目のファイルから取得したテキストファイルの番号を一致させ、その行とその次の2つを最初のファイルから削除してから、次の一致する番号にスキップする必要があります。私が一致させようとしている数は範囲内に収まります。これは可能ですか?または、-の下などの実際のスクリプトに、2番目のファイルではなく、一致する番号を含める方が簡単でしょうか。

__DATA__
23-28
47-55
108-139
etc

ある種のフォーマット?

どんな助けや指示も大歓迎です。

よろしくお願いします。

*申し訳ありませんが、私はおそらく私がやったことから始めるべきでした、私はこのコードを試しました:」

#!/usr/bin/env perl 

use strict; 
use warnings; 

my $number = <DATA>; 

open( FILE, "<MGE.txt" ); 
my @LINES = <FILE>; 
foreach my $LINE ( @LINES ) { 
    print FILE $LINE unless ( $LINE =~ m/$data/ ); 
} 
close( FILE ); 
}
__DATA__
34163-51525
80765-83026
137322-138041
141474-142274
315945-318143
etc...

しかし、私は受け取ります-

Global symbol $data requires explicit package name.
4

1 に答える 1

1

あなたの試みに関するいくつかの問題:

  1. FILEは読むためだけに開いているので、読むことはできませんprint
  2. すべての行を丸呑みした後FILE、ファイルの最後になります。

元のコードに沿った解決策:

open(FILE, "<", "MGE.txt") or die "open read failed: $!";
my @LINES = <FILE>;
# reopen FILE for writing
open(FILE, ">", "MGE.txt") or die "open write failed: $!"
for my $LINE (@LINES) {
  print FILE $LINE if ...;
}
close(FILE);

別の標準的なアプローチは、Tie::Fileモジュールを使用することです-http://perldoc.perl.org/Tie/File.html

于 2012-11-21T19:05:48.610 に答える