簡體   English   中英

Perl使用數字變量打印輸出文件名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM