• ベストアンサー

テキストファイルの結合

はじめまして。配列とか変数で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 );

  • geee
  • お礼率100% (3/3)
  • Perl
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答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);

geee
質問者

お礼

回答ありがとうございます。 欲しいテキストファイルが出来ました。 これで、一回の処理でエクセル利用出来ます。 kinokoyasan2004さんのコードの説明も ありがとうございます。 読込み書出しのとこのif部分あたり、本みながら 勉強させて貰います。

その他の回答 (2)

回答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); おそらく、これでできると思います。

geee
質問者

お礼

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

geee
質問者

補足

回答ありがとうございます。 そのまま実行するとブランクファイルが出来てしまいましたので、 処理ファイル抽出と読出し書出しにわけてコード見せて戴きました。 中途半端なコード書いたのが良くなかったかもしれません。 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に吐き出せばいいのでは。

geee
質問者

お礼

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

関連するQ&A

  • テキストファイルを、ファイル名を文章に組み込みながら結合する方法

    大量のテキストファイルを結合する必要に迫られています。 単純に結合するだけなら、そういった用途のソフトは多くありますので問題はありません。 しかし今回、テキストファイルのファイル名を、そのテキストファイル内の文章の先頭に入れ、その上でテキストファイルを結合する必要が出てきました。 ファイル名に法則性が無く、なおかつファイル名そのものがそのテキストファイルの内容を意味するものとなっており、どうしても上で書いたような処理が求められるのです。 また、出来ればフォルダごとドロップすることでフォルダ内のテキストファイルを上に書いたような処理をしたうえで結合し、その結合された新しいテキストファイルの名前に、フォルダの名前を付けてくれるソフトであれば、なおありがたいです。 模式図で示すと以下のようになります。 フォルダ「A」  ┣ファイル「ファイル01」  ┃   文章「文文文文文文文」  ┣ファイル「ファイル02」      文章「文文文文文文文」 この状態で、フォルダAをドロップすることで、 ファイル名「A」のテキストファイルが出来、 その中身が、 >ファイル01 >文文文文文文文 > >ファイル02 >文文文文文文文 となるソフトです。 このような機能を持ったテキスト結合ソフトがございましたらご教授下さい。 もしなければ、上記の機能を実現する方法が他にあるかお教え頂ければ幸いです。 どうぞよろしくお願いします。

  • perlで変数の中身を変数とみなす方法ってありますか?

    perlで、変数の中身を変数とみなし、その中身を知る方法ってありますか? 具体的に言うと、 $abc = "$xyz"; $xyz = "test"; なる状況だったとして、$abc から "test" という文字列にたどりつく 方法ってあるのでしょうか? 何をしたいのかというと、テキストファイル上に "$xyz" と書かれてたと します。そのテキストファイルを perl で解読したとき、その時点での 実行中の $xyz に何が入っているかを得たいのです。 もちろん、連想配列を使えば似たようなことができるのは知っていますが、 性質上、できればスタティック変数を使いたいのです。 そのような方法は、perl には用意されているのでしょうか?

    • ベストアンサー
    • Perl
  • 一つのテキストファイルと複数のファイルの結合

    よろしくお願いします.ディレクトリ内の一つのテキストファイル(joint.txt)と複数のファイルの結合を行ごとに隣へ結合するプログラムを作成しています.ここで以下のプログラムを作成したのですが,うまくいかないため,誤っている部分をご指摘願えないでしょうか. my $dirname = '.'; opendir(DIR, $dirname) or die "$dirname: $!"; while (my $dir = readdir(DIR)) { next unless (-f $dir); next unless ($dir =~ /\.txt$/); open(FILE, $dir) or die "$dir: $!"; open(FILE2,"joint.txt"); my @file = <FILE>; my @file2 = <FILE2>; close(FILE); close(FILE2); foreach my $line (@file) { foreach my $line2 (@file2) { chomp $line2; $line = "$line2.",".$line"; } } open(NEWFILE, "> $dir") or die "$dir: $!"; print NEWFILE @file; print NEWFILE @file2; close(NEWFILE); } closedir(DIR);

    • ベストアンサー
    • Perl
  • DOSプロンプト:一番速く10万テキストファイルを結合できる方法を教えてください。

    DOSプロンプト:一番速く10万テキストファイルを結合できる方法を教えてください。テキストのファイル名は、000001.txt,000002.txt…となっています。単純にcopy 000001.txt+000002.txt+…とすると文字数オーバー?なのか処理がとまってしまいます。

  • Excel VBAでの固定長のテキストファイル読み込み

    こんにちは。 会社にてEXCELをちょろっとかじっていると言う理由から、あまり触ったことのないVBAを使って固定長のテキストファイルを読み込むプログラムを作るように言われてしまって困っています。 利用している固定長のテキストファイル中の各行の桁数は同一でなく、行によってまちまち。しかし、各行の始めの3ケタはヘッダになっています。 例) ABCTTTTTTTTTTTTTTTTKKKKKOOOOOOPPPPPPPPWWWWWWWWWWWWWWWWWWWWWWWSS XYZLLLLL <ABCとXYZがヘッダ。同じ文字が固定長で決まったあるデータ項目と考えて下さい> もちろん、1ファイルにはもっとたくさんの行がずらずら並んでおります。 中身自体は、ある伝票の内容なのですが、1ファイル中には複数の伝票内容(ヘッダABC~XYZで1伝票)が記されております。 なので、ヘッダで言うとABC,DEF,GHI...XYZとなってまたABC~が続く。 しかも、ある伝票では途中存在しないヘッダがあったり、同じヘッダが何回も繰り返されたりするものもあります。 (ABC,DEF,DEF,DEF,GHI..やABC,GHI,JKL..など) これをどうやってEXCELの各セルに貼り付けるかがどう頑張っても分かりません。どうすればよいのでしょうか?

  • ファイル名を1かつ変換したい

    あるファイルがあります。例えばabc.jpgという画像データです。この中身のファイルデータを同じファイルを名前を変えて複製したいです。やりたいことはExcelのA1からA100にファイル名が書かれています。このファイル名は全て違います。連番でもなんでもない異なったファイル名です。abc.jpgという中身は同じファイル名を違った名前でExcelに書かれている通りに作りたいです。どうしたら簡単にできるでしょうか?

  • 外部jsファイルの変数に代入するには?

    初心者ですがjavascriptについて質問です。 なんらかの値を外部ファイル内の変数に代入させることは可能なのでしょうか? うまく説明できませんが・・・ あるjsファイル内の文字をリンク先の外部jsファイル内の変数の中に入れたいです。 <例> abc.js の中にある文字列"○○○" ↓ abc.jaから <a href="xyz.js">にリンク ↓ xyz.js の中の var xxx ="○○○" に、したいのですが・・・説明が下手ですみません。 わかる方是非教えてください。

  • 複数のノートパッドファイルの中身を結合するには

    たくさんのテキストファイルに日記が書いたのがあるのですが、 これの中身を1つにまとめて1つのテキストファイルにまとめる方法は ありますでしょうか?(テキストファイルのファイル名が日付になってるのでできたら日付順にまとめられたらいいのですが) 中身結合みたいなのができないかと思っているのですが方法がありましたら教えてください。宜しくお願いします。

  • ファイル名一覧からテキストファイル生成

    1000種類のテキストファイルを用意したいです。 ファイルの中身はすべて一緒でかまいません。 ファイル名が違います。 ファイル名は、Noで連番とかではないです。 ファイル名一覧を指定すれば、一括作成できる ソフトはないでしょうか?

  • 複数テキストを一行ずつファイル名を付けて結合する方法

    複数テキストを一行ずつファイル名を付けて結合する方法 フォルダにある複数のテキストデータを1つのテキストデータに結合する際、テキスト1行毎の先頭にファイル名を付けたいのですが。具体的には以下の通りです。 最終的にはexcelに取込み処理するので、excelのマクロかDOS系でできるとあり難いです。 [file1.txt] 1111111111 2222 33333333 [file2.txt] 123 1234 ↓ [all.txt] file1.txt 1111111111 file1.txt 2222 file1.txt 33333333 file2.txt 123 file2.txt 1234

専門家に質問してみよう