1

data2.txtに抽出データが出力されていない?コードのどこが悪いのでしょうか?

MyFile.txt

ex1,fx2,xx1
mm1,nn2,gg3
EX1,hh2,ff7

これは、data2.txt での私の目的の出力です。

ex1,fx2,xx1
EX1,hh2,ff7


#! /DATA/PLUG/pvelasco/Softwares/PERLINUX/bin/perl -w

my $infile  ='My1.txt';
my $outfile ='data2.txt';

open IN,  '<', $infile  or die "Cant open $infile:$!";
open OUT, '>', $outfile or die "Cant open $outfile:$!";

while (<IN>) {   
  if (m/EX$HF|ex$HF/) {
    print OUT $_, "\n";      
    print $_;   
  }
}

close IN;
close OUT;
4

5 に答える 5

5

この正規表現は意味がありません:

m/EX$HF|ex$HF/

$HF は変数であるべきですか? 何を合わせようとしていますか?

また、作成するすべてのPerl スクリプトの 2 行目は次のようにする必要があります。

use strict;

これにより、Perl はそのような間違いを黙って無視するのではなく、そのような間違いを見つけて教えてくれます。

于 2008-10-17T07:10:53.010 に答える
3
while (<IN>) {
  if (m/^(EX|ex)\d.*/) {   
    print OUT "$_";      
    print $_;   
  }
}
于 2008-10-17T07:12:22.787 に答える
2

これが出血が明らかであると述べているように思われる場合は申し訳ありませんが、何が問題になっていますか

grep -i ^ex < My1.txt > data2.txt

...または本当にperlでそれをやりたいのなら(そしてそれは何も悪いことではありません):

perl -ne '/^ex/i && print' < My1.txt > data2.txt

これは、要求の目的が、大文字と小文字を区別せずにEXで始まる行を見つけることであると想定しています。

于 2008-10-18T08:03:45.867 に答える
1

My1.txtコードを実行すると、必要な出力が得られるのではなく、入力ファイルに名前を付けると、空の行を除いて、print ステートメントからMyFile.txtを削除することで削除できます。, "\n"

于 2008-10-17T07:05:11.337 に答える
1

ファイル名が一致しません。

open(my $inhandle, '<', $infile)   or die "Cant open $infile: $!";
open(my $outhandle, '>', $outfile) or die "Cant open $outfile: $!";

while(my $line = <$inhandle>) {   

    # Assumes that ex, Ex, eX, EX all are valid first characters
    if($line =~ m{^ex}i) {         # or   if(lc(substr $line, 0 => 2) eq 'ex') {
        print { $outhandle } $line;      
        print $line;
    }
}

はい、常に厳密を 使用してください。

また、 $line を chompして (perl 5.10 を使用している場合) print "$line\n"の代わりに$line と言うことができます。

于 2008-10-17T17:58:06.040 に答える