Perl复制VECT文件的特定行

时间:2018-06-14 21:36:03

标签: perl file file-io scripting vector-graphics

我想复制文件的第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 );

使用上面使用的相同打开和关闭文件语法,这是一种简单的方法吗?

2 个答案:

答案 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];

不需要其他任何东西。那不是很整洁吗?