2008-10-17 6 views
1

Нет извлеченного вывода данных в файл data2.txt? Что не так с кодом?Как я могу извлечь и сохранить текст с помощью Perl?

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; 
+0

Используйте три аргумента открытых. – 2008-10-17 19:20:02

ответ

1

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

+0

Ой, я забыл изменить My1.txt. Это должен быть MyFile.txt. – Shiel 2008-10-18 02:56:51

5

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

m/EX$HF|ex$HF/ 

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

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

use strict; 

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

+0

... и третий должен быть «использовать предупреждения». – 2008-10-17 19:20:45

+0

У него уже есть -w на первой строке. – raldi 2008-10-17 19:42:01

+0

Ну почему он просто не добавляет -Mstrict к первой строке? – 2009-03-18 21:45:40

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

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

Вы могли бы также грызть $ линии и (при использовании Perl 5.10) сказать $ линии вместо печати "$ строки \ п".

2

Извините, если это кажется констатирую кровотечение очевидно, но что случилось с

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^