dポイントプレゼントキャンペーン実施中!

はじめまして。配列とか変数でFORでループさせれ
ばいいのかなと思うのですが変数の取り扱いがわ
かりません。あるフォルダに拡張子なしの . の
後連番のテキストファイルがあります(SGML出力)。
その連番順にテキストを結合したファイルを作成
したい。
条件として"a086.xxx"のファイルについて処理し
たいです。よろしくお願いします。

ファイル名 中身
a084.000 .............
a085.000 .............
a086.000 abc.......xxx
a086.001 123.......xxx


a086.036 xyz.......xxx
a087.000 .............

結合したファイルの中身
abc.......xxx
123.......xxx



xyz.......xxx

フォルダの中のそのファイルの個数はその都度
違います。

下記のように処理したいファイル名は抽出して
みたのですがその後どうすればいいのかわかり
ません。また、ファイル名を抽出しないでその
まま処理するものでしょうか。

opendir ( DIR , "a:\\S603000" ) or die;

while($dir = readdir (DIR) ){
if ( $dir =~ /a086/ ){
print "$dir\n";
}
}
closedir ( DIR );

A 回答 (3件)

kinokoyasan2004さんのはいざファイルを開くとき、


open(IN,"$dir");
とやってしまっています。
これでは、Perlスクリプトが動いてるディレクトリに目的のファイルがないと意味がありません。

というわけで、

$indir = 'A:/S603000'; #探しに行くディレクトリ
$outdir = './output.dat'; #書き出すファイル

open(OUT,"> $outdir") or die $!;

opendir(DIR, $indir) or die $!;

while ($list = readdir(DIR)) {

if(-f "$indir/$list" && $list =~ /^a086\.[^\.]+$/i){

open(IN, "< $indir/$list") or die $!;
while (<IN>){print OUT;}
close(IN);

print OUT "\n";

}

}

closedir(DIR);

close(OUT);
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
欲しいテキストファイルが出来ました。
これで、一回の処理でエクセル利用出来ます。
kinokoyasan2004さんのコードの説明も
ありがとうございます。

読込み書出しのとこのif部分あたり、本みながら
勉強させて貰います。

お礼日時:2004/05/26 22:22

はじめまして。



抽出したファイル名をオープンして内容を読み込み、別のファイルに出力するって言う処理でいいんではないでしょうか。
自分なりにですが、コードを書いてみたんで、乗せておきますね。

open(OUT,"> output.dat"); #出力用ファイルオープン

opendir ( DIR , "a:\\S603000" ) or die;

while($dir = readdir (DIR) ){
if ( $dir =~ /a086/ ){

open(IN,"$dir"); #データファイル読み込み

while($dat = <IN>){
print(OUT "$dat");
}
close(IN);

}
}
closedir ( DIR );

close(OUT);

おそらく、これでできると思います。

この回答への補足

回答ありがとうございます。
そのまま実行するとブランクファイルが出来てしまいましたので、
処理ファイル抽出と読出し書出しにわけてコード見せて戴きました。
中途半端なコード書いたのが良くなかったかもしれません。
FDにあるS603000というディレクトリの中のa083.000から
a086.XXX(XXXはその都度ちがいます。)のファイルに1行の
テキストデータあるのでそれをファイル番号順に1行づつ
連結して出力ファイルにしたいのです。copy commandを
教わりました。テキストファイルの内容テキストをひたすら連結
しますが、それにファイルデータごとに改行を加えたいのです。
変数の扱いというか拾い出したデータから処理を進めていく
とこでつまづいています(判りづらい説明すみません)。
コード間違って理解していたら申し訳ないのですが、再度
教えて戴けると助かります。

補足日時:2004/05/26 20:26
    • good
    • 0
この回答へのお礼

まだ理解できてないのですが、回答戴き解決しました。
ありがとうございました。

お礼日時:2004/05/26 22:25

osはwindowsかな?


copyコマンドで十分。perl出番なしかも。
コマンドプロンプトから
copy a:\s603000\a086.* newfile.txt
でOKかと。

perlでやるんだったら、該当するfile読み込んで
出力用のfileに吐き出せばいいのでは。
    • good
    • 0
この回答へのお礼

os書いてませんでした。windowsです。
copy command で出来るなんて思いつきもしなかった
です。連結ソフトでやってみたりはしたんでが、
順番が狂ったり、読込みファイル数に制限があった
りで困って今回投稿しました。
ただ、最終csv形式にしたいのでSGMLのタグの置換
処理と改行コードの追加も合わせてperlが良いのか
なと思い手をつけてみました。
\nで改行コードも置換できそうですので.bat処理も
も検討してみます。
ありがとうございます。

お礼日時:2004/05/26 19:54

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