我想复制文件的第7-12行,比如
this example .vect
file,
到同一目录中的另一个.vect
文件。
我希望每行复制两次,然后将每行的两个副本连续粘贴到新文件中。
这是我到目前为止使用的代码,并希望继续在Perl中使用这些方法/包。
use strict;
use warnings;
use feature qw(say);
# This method works for reading a single file
my $dir = "D:\\Downloads";
my $readfile = $dir ."\\2290-00002.vect";
my $writefile = $dir . "\\file2.vect";
#open a file to read
open(DATA1, "<". $readfile) or die "Can't open '$readfile': $!";;
# Open a file to write
open(DATA2, ">" . $writefile) or die "Can't open '$writefile': $!";;
# Copy data from one file to another.
while ( <DATA1> ) {
print DATA2 $_;
}
close( DATA1 );
close( DATA2 );
使用上面使用的相同打开和关闭文件语法,这是一种简单的方法吗?
答案 0 :(得分:2)
只需将print
行修改为
print DATA2 $_, $_ if 7 .. 12;
有关详细信息,请参阅Range Operators in "perlop - Perl operators and precedence"。
答案 1 :(得分:0)
值得记住的
Tie::File
模块将文件逐行映射到Perl数组,并允许您使用简单的数组操作来操作文本文件。处理大量数据时可能会很慢,但它对于涉及常规文本文件的大多数应用程序来说都是理想的
将一系列行从一个文件复制到另一个文件变得很简单,只需复制一个数组切片即可。请记住,文件以数组元素0中的第一行开头,因此第7行到第12行位于索引6 ... 11
这是执行您所要求的Perl代码
use strict;
use warnings;
use Tie::File;
chdir 'D:\Downloads' or die $!;
tie my @infile, 'Tie::File', '2290-00002.vect' or die $!;
tie my @outfile, 'Tie::File', 'file2.vect' or die $!;
@outfile = map { $_, $_ } @infile[6..11];
不需要其他任何东西。那不是很整洁吗?