我有一个大的数据文件dump.all.lammpstrj
,我需要分流/归类到一系列文件,如Z_1_filename
,Z_2_filename
,Z_3_filename
等基于每个记录的坐标。
坐标以无序的方式保存,因此我的程序读取每一行并确定该记录应发送到哪个文件。
我用一个变量 $filehandle = "Z_$i_DUMP"
我希望像这样打开所有可能的文件
for ( my $i = 1; $i <= 100; $i++ ) {
$filehandle = "Z_$i_DUMP";
open $filehandle,'>', "Z_$i_dump.all.lammpstrj.dat";
...
}
但是在运行程序时,我收到一条消息
不能将字符串(“ Z_90_DUMP”)用作符号引用,而在...中使用“严格引用”
我不想扫描每个输出文件的所有数据,因为dump.all.lammpstrj
它太大了,扫描将花费很长时间。
有什么方法可以使用已定义的变量作为文件句柄?
让您了解如何完成此操作。将文件句柄放入哈希(如果按数字索引,则可能为数组)。
use strict;
use warnings;
my %fh; #file handles
open $fh{$_}, '>', "Z_${_}_dump.all.lammpstrj.dat" for 1..100; #open 100 files
for(1..10000){ #write 10000 lines in 100 files
my $random=int(1+rand(100)); #pick random file handle
print {$fh{$random}} "something $_\n";
}
close $fh{$_} for 1..100;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句