![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
はじめまして。配列とか変数で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 );
No.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);
回答ありがとうございます。
欲しいテキストファイルが出来ました。
これで、一回の処理でエクセル利用出来ます。
kinokoyasan2004さんのコードの説明も
ありがとうございます。
読込み書出しのとこのif部分あたり、本みながら
勉強させて貰います。
No.2
- 回答日時:
はじめまして。
抽出したファイル名をオープンして内容を読み込み、別のファイルに出力するって言う処理でいいんではないでしょうか。
自分なりにですが、コードを書いてみたんで、乗せておきますね。
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を
教わりました。テキストファイルの内容テキストをひたすら連結
しますが、それにファイルデータごとに改行を加えたいのです。
変数の扱いというか拾い出したデータから処理を進めていく
とこでつまづいています(判りづらい説明すみません)。
コード間違って理解していたら申し訳ないのですが、再度
教えて戴けると助かります。
No.1
- 回答日時:
osはwindowsかな?
copyコマンドで十分。perl出番なしかも。
コマンドプロンプトから
copy a:\s603000\a086.* newfile.txt
でOKかと。
perlでやるんだったら、該当するfile読み込んで
出力用のfileに吐き出せばいいのでは。
os書いてませんでした。windowsです。
copy command で出来るなんて思いつきもしなかった
です。連結ソフトでやってみたりはしたんでが、
順番が狂ったり、読込みファイル数に制限があった
りで困って今回投稿しました。
ただ、最終csv形式にしたいのでSGMLのタグの置換
処理と改行コードの追加も合わせてperlが良いのか
なと思い手をつけてみました。
\nで改行コードも置換できそうですので.bat処理も
も検討してみます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batファイルでrenameができませ...
-
ディレクトリ内CSVデータをすべ...
-
複数ファイルの読み込みについて
-
パスから最後のディレクトリだ...
-
vba dir の相対パス
-
FindFirstFileとFindNextFileで...
-
Rubyでフォルダ内にあるファイ...
-
awkスクリプトでダブルクォーテ...
-
VBA テキストファイルを読み取...
-
教えて!perlから.exeファイル...
-
ファイル名を複数個配列で確保...
-
Firefox で file:// で始まる U...
-
perlプログラム 外部複数ファ...
-
csvファイルの横方向への改行に...
-
Pythonでegrep機能をつかいたい
-
MPLABにおけるsyntax errorに...
-
Perlの変数に文字数制限(容量...
-
fopen64について
-
ファイル内の日付から1週間前...
-
cgiのログの書き方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
vba dir の相対パス
-
Windowsで複数のファイルを同じ...
-
FindFirstFileとFindNextFileで...
-
readdir()で得られるファイル・...
-
パスから最後のディレクトリだ...
-
ディレクトリ名を取得したい
-
Perlで フォルダ内の全て...
-
dos変数の%~dp0は powershellで...
-
LinuxのC言語で、ファイル名の...
-
ディレクトリの判別
-
複数ファイルの読み込みについて
-
ファイル名の変更
-
Director拡張子
-
makefileでファイルをコピー(...
-
C言語でファイル名を取得
-
ディレクトリのファイル作成を...
-
メタ文字の取り扱い
-
下のディレクトリ(3つ)に含ま...
-
指定ファイル内の一部内容を抽...
おすすめ情報