我需要幫助,我的$inputfile每天都在變化,它被生成并存盤在/tmp目錄下。檔案格式日期如下。
/tmp
570572 Sep 13 21:02 sessions_record_2021-09-13_210052.csv
570788 Sep 14 09:01 sessions_record_2021-09-14_090041.csv
我不知道如何把它作為一個輸入檔案,而不是硬編碼在我的腳本中
。#!/usr/bin/perl
use strict; use warnings;
使用 Tie::Array::CSV。
use Data::Dumper;
use Date::Parse;
use POSIX qw(strftime);
my $hours = 1;
my $timenow = time;
my $inputfile = "session_record_2021-09-14_090041.csv"/span>;
tie my @sessions_record, 'Tie::Array::CSV', $inputfile, {
tie_file => { recsep => "
" }。
text_csv => { binary => 1 }.
};
tie my @incidentidlist, 'Tie::Array::CSV', 'identidlist.csv';
@incidentidlist = map {
([$_[4] =~ A([^s] )/, $$_[4], $$_[18], ($timenow -
str2time($_[18] )) / 60 / 60] )
} grep {
$$_[0] =~ /^ServiceINC/ & & ($timenow - str2time($_[18] ) / 60 / 60 > $hours
} @sessions_record;
uj5u.com熱心網友回復:
Perl sort函式對glob將產生排序的陣列,你對最后一個元素感興趣,可以用索引-1解決。
use strict;
use warnings;
use feature 'say';
my $in_file = (sort glob('/tmp/sessions_record_*. csv'))[-1]。
say $in_file。
如果你對今天的檔案localtime感興趣,可以協助形成一個檔案名$fname。
use strict;
use warnings;
use feature 'say';
my($mask,$fname);
my($mday,$mon,$year) = (localtime)[3.5] 。
$year = 1900。
$mon = 1;
$mask = sprintf('/tmp/sessions_record_M-d-d_*.csv'/span>, $year, $mon, $mday);
$fname = (glob($mask))[0]。
say 'File: ' . $fname;
say '-' x 45。
open my $fh, '< ', $fame
or die "Couldn't open $fame";
print while <$fh> 。
close $fh;
uj5u.com熱心網友回復:
你可以用opendir來打開一個目錄,用readdir來讀取它。 對于每一個被訪問的檔案,你可以檢查它是否有正確的格式(根據 simbabque 的評論),并將其添加到一個陣列中。
然后你可以對你的陣列進行排序。
由于命名慣例,在你的排序中,最新的檔案將總是作為 "最大 "的值來排序。
你可以在https://www.perltutorial.org/perl-sort/
上了解更多關于排序的資訊(如果你需要的話)。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307571.html
標籤:
