電子書籍の厳選無料作品が豊富!

スクリプトの存在するディレクトリ
/home/XXXX/XXXX/log.pl(完全に固定のディレクトリ)
csvファイルの存在するディレクトリ
/home/XXXX/XXXX/XXXX/****/YYMMDD.csv(Xは固定*は不定)
crontabでCSVファイルを
/home/XXXX/XXXX/XXXX/****/
内のcsvをすべて読み込み時間が古いものを下に
新しい物を上にして
/home/XXXX/XXXX/XXXX/****/fix.csv
として新たなファイルを生成する。
既に読んだことのあるYYMMDD.csvファイルは再度
fix.csvに書き込まない
次のディレクトリがあるならばディレクトリ内のファイルを読み込み同様の動作をする
以前教えていただいたスクリプトを元にここまでできました。
logファイルに書き込まれている名前のファイルは読み込まないようにしたいのですが
どのようにすればいいのでしょうか
▽▽以下スクリプト
chdir'/home/XXXX/XXXX/XXXX/';
@files1=reverse(@files1);
chomp(@files1);
$file1=shift(@files1);
until(("" eq $file1)){
@parts1=split(/\//, $file1);
open(READLOG,"./$parts1[1]/log");
close(READLOG);
open(READFILE,"<./$parts1[1]/$parts1[2]")||die "1$!";
@f1=<READFILE>;
close(READFILE);
@f=sort(@f1);
open(WRITEFILE,">>./$parts1[1]/fix.csv")||die "3$!";
foreach $str (@f){
print WRITEFILE "$str";
}
close(WRITEFILE);
$file1=shift(@files1); #次のファイル名の取り出し
open(BKFILE,">>./$parts1[1]/log")||die "3$!";
print BKFILE $parts1[2]."\n";
close(BKEFILE);
}
△△以上

A 回答 (2件)

すいません、続きです。


これではダメでしょうか?
$mypath = "D:\\××××\\××××\\";
$d= `dir /B $mypath*.csv`;
@list=split (/\n/,$d);

foreach $d (@list){
$fn = $mypath.$d;
open (FILE,$fn)or die "Failed to open a $d\n";
while ($record = <FILE>) {
chomp $record;
@array = split /,/, $record;

   open (OUT,">>all.csv");
print OUT join(",",@array)."\n";
close OUT;
}
close FILE;
}

この回答への補足

説明不足で申し訳ありません
OSはLinuxです
固定のディレクトリが途中まであるのですが
途中から動的に生成されるディレクトリがあるので
ディレクトリを決め打ちで指定することができません
よってfindコマンドをうつ必要性があると思った次第です。
動的に生成されているディレクトリに数個のcsvがあり
それを取りまとめるfix.csvファイルを
それぞれのディレクトリに1個づつ
生成するといったイメージです。

補足日時:2004/09/28 21:03
    • good
    • 0

ディレクトリ内のCSVファイルを全部くっつければいいのでしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!