ファイル名でファイルをフィルタリングしようとしています。grepがファイル名の最初の12文字だけをスキャンできるようにするにはどうすればよいですか?
2つの日付を入力するように求められたら、私のコードはすべてのファイルを調べ、検索パラメータに適合するすべてのファイルを配列に書き込みます。
しかし、私が2014 .. 2016のような不正確な範囲を入力した場合、最初の2つのファイルのように、私の検索に関係のないファイル(私は最初の8文字だけが日付スタンプを表すのでgrepしたいので) @files
には、名前に2014年、2015年または2016年が含まれているため、フィルタリングされています。
@files = 20120830_600020143_1_Log.csv (wrong because year 2012)
20130830_600020161_1_Log.csv (wrong because year 2013)
20150830_600020162_1_Log.csv
20160830_600020121_1_Log.csv
ファイル名の最初の12文字だけをgrepする方法はありますか?
私はsubstr
との組み合わせを考えましたが、動作させることができませんでした。
変更する必要のあるコードは次のとおりです。この場合、$daterange
あなたはそれぞれのファイル名の最初の8文字だけを検索したいようですね"2016"
foreach $folder (@folder) {
$curdir = "$scriptdir\\$folder";
opendir my $dir_b, "$curdir" or die "Can't open directory: $!";
my @files = grep { /$daterange/ } readdir $dir_b;
closedir $dir_b;
foreach $files (@files) {
...
}
のように、
while
ループでreaddir
を使用することを好むこののように見えるのでしょうか? – ernix
^regex =すばらしいもの。あなたを助ける素晴らしいリソースhttp://regexr.com/ –
はい、^ファイル名の冒頭にある2016だけを探しますか?どういうわけか、これは、これが引き起こす可能性のあるエラーについて考えることができますが、名前の構文が同じである限り、何も見つかりません。ありがとうございます –