Perl, чтение из двух файлов и запись в третий

#perl #file-io

#perl #file-io

Вопрос:

У меня возникли проблемы с запуском моей программы. В принципе, я считываю из двух файлов, затем записываю данные в один. Кто-нибудь может указать, в чем проблема? Я продолжаю получать ошибки о создании экземпляра в инструкциях print OUT, где я пытаюсь выполнить запись в файл. Вот мой код:

 print "Please input file name n";
$infile=<DATA>;
$infile2=<DATA>;

open IN, "$infile";
open JUNK, "$infile2";
open OUT, '>' ,'convertedback.txt';

$line = <IN>;
$line2 = <JUNK>;

#pull first line from sample (name 1)
print OUT "$line";
$line =<IN>;
#pull sequence line from FASTQ
print OUT "$line";
#pull line from quality file *2
print OUT "$line2";
$line2 =<JUNK>;
print OUT "$line2";

#Repeat until EOF
while($line =<IN>) {#for lines 5 to end

#Build Line 1
print "line 1 inf (name) isn";
print $line2;
print OUT "$line2";


#Build Line 2
print "line 2 inf (seq) isn";
print $line;
print OUT "$line";

#Build Line 3
$line2 =<JUNK>;
print "line 3 inf (quality) isn";
print $line2;
print OUT "$line2";

#Build Line 4
$line2 =<JUNK>;
print "line 3 inf (quality) isn";
print $line2;
print OUT "$line2";

}#while $line=<IN>
close (IN);
close (OUT);

print "Done!n";

__DATA__
outfilenew.txt
sample.qualities
  

Ответ №1:

используйте strict и используйте предупреждения в начале скрипта.

используйте три аргумента open, например

 open(my $fh, '<', "input.txt") or die $!;
  

используйте цикл while для чтения строк из файлов типа,

 while(my $line = <>){
   #do something
}
  

скрипт выглядит как,

 use strict;
use warnings;
print "Please input file name n";
my $infile=<DATA>;
my $infile2=<DATA>;

open(my $in,'<', "$infile") or die $!;
open(my $junk,'<',"$infile2") or die $!;
open(my $out, '>' ,'convertedback.txt') or die $!;

my $line = <$in>;
my $line2 = <$junk>;

#pull first line from sample (name 1)
print $out "$line";
$line =<$in>;
#pull sequence line from FASTQ
print $out "$line";
#pull line from quality file *2
print $out "$line2";
$line2 =<$junk>;
print $out "$line2";

#Repeat until EOF
while($line =<$in>) {#for lines 5 to end

#Build Line 1
print "line 1 inf (name) isn";
print $line2;
print $out "$line2";


#Build Line 2
print "line 2 inf (seq) isn";
print $line;
print $out "$line";

#Build Line 3
$line2 =<$junk>;
print "line 3 inf (quality) isn";
print $line2;
print $out "$line2";

#Build Line 4
$line2 =<$junk>;
print "line 3 inf (quality) isn";
print $line2;
print $out "$line2";

}#while $line=<IN>
close ($in);
close ($out);

print "Done!n";

__DATA__
outfilenew.txt
sample.qualities