Как я могу извлечь и сохранить текст с помощью Perl? - PullRequest
1 голос
/ 17 октября 2008

Нет извлеченных данных в 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;

Ответы [ 5 ]

5 голосов
/ 17 октября 2008

Это регулярное выражение не имеет смысла:

m/EX$HF|ex$HF/

Должна ли переменная $ HF быть переменной? Что вы пытаетесь сопоставить?

Кроме того, вторая строка каждого сценария Perl, который вы пишете, должна быть:

use strict;

Это заставит Perl ловить такие ошибки и рассказывать вам о них, а не молча игнорировать их.

3 голосов
/ 17 октября 2008
while (<IN>) {
  if (m/^(EX|ex)\d.*/) {   
    print OUT "$_";      
    print $_;   
  }
}
2 голосов
/ 18 октября 2008

Извините, если вам кажется, что кровотечение очевидно, но что не так с

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

... или если вы действительно хотите сделать это в Perl (и в этом нет ничего плохого):

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

Предполагается, что целью запроса является поиск строк, начинающихся с EX, с учетом регистра.

1 голос
/ 17 октября 2008

Имена файлов не совпадают.

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;
    }
}

И да, всегда всегда используйте строгое;

Вы также можете chomp $ line и (при использовании perl 5.10) сказать $ line вместо напечатать "$ line \ n" .

1 голос
/ 17 октября 2008

Когда я запускаю ваш код, но называю входной файл My1.txt вместо MyFile.txt, я получаю желаемый результат - за исключением пустых строк, которые можно удалить, удалив , "\n" из оператора печати. ​​

...