[英]Perl print output file names with number variable
我试图从sql server中提取1周的数据,然后尝试将数据写入具有不同名称的文件中。 以下代码不起作用,我找不到使用变量创建文件处理程序的方法。
另一个问题是,如果sql数据的大小很大(每天1-2千兆字节,整个表超过1年),那么这种每月提取方法是否比每日提取更快?
my $sqlGetEid = "select trunc(datetime, 'DD') truncdate, x, y from z
where DATETIME between TO_DATE('$dt1','YYYY-MM-DD') and TO_DATE('$dt1','YYYY-MM-DD')+7";
for ($day=1; $day<=7; $day++){
open('dayfile_$day', "> ./temp/Wireless_$day.csv");
}
while ( my ($tday,$x,$y) = $curSqlEid->fetchrow_array() )
{
printf {'dayfile_$tday'} ("%s,%d\n", $x,$y);
}
for ($day=1; $day<=7; $day++){
close('dayfile_$day');
}
您不能使用普通字符串作为您尝试做的变量。
我能想到的最简单的方法是使用哈希来使用文件句柄映射文件名。
这是一个如何做到这一点的例子:
use strict;
use warnings;
my %files;
foreach my $i (1..7) {
my $fh;
open($fh, '>', "day_$i.log") || die "Ooups: $i: $!";
$files{$i} = $fh;
}
foreach my $i (1..7) {
my $fh = $files{$i};
print $fh "hello $i\n";
}
foreach my $i (1..7) {
my $fh = $files{$i};
close $fh;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.