我有一个大的数据文件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";
...
}
Run Code Online (Sandbox Code Playgroud)
但是在运行我的程序时,我收到了一条消息
不能使用字符串("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;
Run Code Online (Sandbox Code Playgroud)