テキストファイルの一部を複数パターンで置換

このQ&Aのポイント
  • テキストファイルの一部を複数のパターンで置換する方法について教えてください。
  • VBAやバッチを使用して、テキストファイルの特定の部分を複数の置換パターンに基づいて置換し、別のファイルとして保存する方法を知りたいです。
  • 置換パターンの数だけ置換を行い、ファイル名もそれに基づいて変更する方法を教えてください。
回答を見る
  • ベストアンサー

テキストファイルの一部を複数パターンで置換

初めて質問させていただきます。 以下のようなテキストファイル(元ファイル) があります。 1行目 あいうえお 2行目 codea=aaaaa/$$ 3行目 codeb=11111*11111 4行目 … この2行目と3行目の「aaaaa」「11111」 の文字列を以下に従って置換し保存したいです。 置換パターンは、 別ファイルに一覧になっています。 bbbbb 22222 ccccc 33333 … これを、元ファイルの 「aaaaa」を「bbbbb」に、 「11111」を「22222」に置換し、 ファイル名を「bbbbb-22222.txt」として 保存するのを、 置換パターンの数だけ行う必要があります。 VBA、バッチは経験があります。得意分野ではありませんが… 申し訳ありませんが、ご教授いただけないでしょうか?

  • CSS
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

Web Pages Designのカテゴリーで質問されているということは、Web関連ですか? だとしたら、Perlなどのテキスト処理が特異なプログラムをインストールされて、それで処理されることをお勧めします。  Perlが扱えれば、Webでも役に立つでしょう。  また、CygwinなどのUNIXのツールが使えるものを入れて、様々なツールを使う手もあります。  あなたが、バッチ処理に経験があれば、まよわずSED(ストリームエディタ)をお勧めするところですが、ちょっと敷居が高いでしょう。 Perlでしたら open IN,./origianl.txt; open LIST,./list.txt; @lines = (<LIST>); close LIST; while(<lines>{ ($A,$B)~=/^(.+)\s(.+)$/; open OUT,$A\-$B.txt; while(<IN>){ s/(codea\=)(\w+)(\/\$\$)/$1$A$2/s; s/(codeb\=)(\d+)(\*)(\d+)/$B$2$B/s; print OUT; close OUT; } close IN; とか・・・・。

Drotea
質問者

補足

ご回答ありがとうございます!! 小カテゴリは、その他プログラムに設定するべきでしたが 何度やっても設定がクリアされてしまいましたので Webのままになっています。。 Webはまったく関係ないため、変更をできるものならしたいです。。 お恥ずかしながらPerlはどんなものかもわかっていませんが、 帰ったら調べて見ようと思います! また、もしWebではないことで他にも有効な方法がありましたら、 ぜひ教えていただきたいです。

関連するQ&A

  • ファイルを移動するためのバッチファイル

    テキストファイル(1行に1つのファイル名が書かれていて、ファイルの数だけの行があるテキスト)を読み込み それをもとに、パス指定した参照先ディレクトリより、1つずつファイルを取得し、 パス指定した保存先ディレクトリに保存していくという、ファイルを移動(コピー)するためのバッチファイルを作りたいのですが どのようなコマンドを記述すればよいでしょうか? (できれば、MS-DOSのバッチファイルだと助かります) 例 [list.txt] aaaaa bbbbb eeeee [参照先] aaaaa bbbbb ccccc ddddd eeeee ↓ [保存先] aaaaa bbbbb eeeee

  • ExcelVBAでテキスト出力で最後の行に追記

    エクセルVBAで、すでに色々と書き込まれているテキストファイルがあり 一番最後の行に追記したいです。 具体的に下記のようなテキストにzzzzzzと追記して aaaaa bbbbb ccccc ddddd 下記のようにしたいです。 どのようにしたらよいのでしょうか? aaaaa bbbbb ccccc ddddd zzzzzz

  • バッチファイルで複数のテキストファイルの置換

    バッチファイルで以下のような処理を行うことはできないでしょうか? フォルダ1以下の全てのテキストファイル内の abcde という文字列を あいうえお に置換して、上書き保存ではなく 元のファイル名+(編集済み).txt というファイル名で同じ場所に保存できないでしょうか。 バッチファイルで出来ない場合他の物でも構いません。 ――――――――――――――――――――――――――――― 処理前 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │   ├フォルダ3   │  └フォルダ4   │     └ファイル2.txt (内容:abcde123abcde123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― ↓ ――――――――――――――――――――――――――――― 処理後 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │  └ファイル1(編集済).txt (内容:123あいうえお)   │   ├フォルダ3   │  └フォルダ4   │     ├ファイル2.txt (内容:abcde123abcde123)   │     └ファイル2(編集済).txt (内容:あいうえお123あいうえお123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― こんな感じで出来ないでしょうか。 よろしくお願いします。

  • 複数のファイルを読み込み、1つのファイルとして出力する方法。

    Nakanoです。いつもお世話になっております。 例えばテキストファイルを2つ用意し、1つのテキストファイルとして 出力したいのですが、いまいちやり方が分かりません。出来るのかどうかも 分からないです。(汗) 下にサンプルデータがあります。取り合えず「in1.txt」「in2.txt」 を最終的に『out.txt』の様に仕上げたいのですが… # =in1.txt AAAAA BBBBB CCCCC DDDDD 1,000 2,000 3,000 4,000 1,001 2,002 3,003 4,004 1,010 2,020 3,030 4,040 1,100 2,200 3,300 4,400 =in2.txt EEEEE FFFFF GGGGG HHHHH 5,000 6,000 7,000 8,000 5,005 6,006 7,007 8,008 5,050 6,060 7,070 8,080 5,500 6,600 7,700 8,800 # =out.txt AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 1,001 2,002 3,003 4,004 5,005 6,006 7,007 8,008 1,010 2,020 3,030 4,040 5,050 6,060 7,070 8,080 1,100 2,200 3,300 4,400 5,500 6,600 7,700 8,800 # ・このデータはタブで区切っています。カンマはない場合もあります。 ・ファイルの中のそれぞれの文字列の数は固定です。行数も固定です。  各文字列の中の文字数はランダムです。  COPYコマンドを利用しても考えてみたのですが、後ろに続いちゃって  上手くいかなかったです。(笑)  Perlだと1つ目のファイルの1行目を配列に入れて、次に2つ目の  ファイルの1行目を配列に入れて、これを一旦出力して、同じ手順の  様な事を行を2行目、3行目、4行目、、とずらして繰り返す。って  感じでイメージしているのですが、どの様にソースを組めばいいのか  分かりませんでした。  どなたかご教授いただけないでしょうか? 宜しくお願い致します。

  • テキストファイルの一部置換したファイルをたくさん作りたい

    テキストファイル(a.txt)があるのですが このファイルの一部の文字列aaaをbbbに置換したファイル(b.txt)を作りたいです。 また文字列aaaをcccに置換したファイル(c.txt)も作りたいです。 続けてd.txtやe.txt・・・と作っていきたいですが簡単にできるフリーソフトはないでしょうか? 現状はa.txtを開いてaaaをbbbに置換して、別名で保存するのを繰り返し(10回以上)するので大変です。 このようなことが楽にできるフリーソフトがあれば教えてください。

  • 複数のファイルのファイル名の同一箇所を一斉置換する方法は?

    例えば、 AAAAA01.txt AAAAA02.txt AAAAA03.txt という3つのファイルがあったとします。 これら3つのファイル名を BB01.txt BB02.txt BB03.txt に一斉に、かつ、安全(※)に置換できる方法はありますか。 (※「安全」とは、似たファイル名だが置換したくない、関係の無いファイルを、誤って置換しないように、確認しながら置換したい、という意味です。もしも確認動作が出来なくても、1つのフォルダの中だけ限定で一斉置換を行なう、でも良いです。)

  • 秀丸エディタ・マクロの質問です

    秀丸エディタを使用して、以下のマクロの作成のやり方を教えてください。 元ファイルから必要なデータの抽出・計算を繰り返して下記の例のような形式で表示したいです。 (ここではAAAAA・BBBBB・CCCCC・DDDDD・hijkの表記のある行を抽出し、 「BBBB-AAAAA+1」「DDDDD-CCCCC」の結果をかかった時間1:、かかった時間2:の横に表記する。 これらの作業を10000件以上繰り返す。 ------------------------------------------------ 例)元ファイル 2013/3/6 10:10:10.100 AAAAA 2013/3/6 10:10:10.110 BBBBB 2013/3/6 10:12:12.120 hijk 2013/3/6 10:14:14.140 CCCCC 2013/3/6 10:14:14.150 DDDDD 2013/3/6 10:15:15.130 abcde 2013/3/6 10:15:16.100 AAAAA 2013/3/6 10:15:16.108 hijk 2013/3/6 10:15:16.110 BBBBB 2013/3/6 10:15:18.150 lmn 2013/3/6 10:15:19.140 CCCCC 2013/3/6 10:15:19.150 DDDDD … …(省略:10000行以上) … 2013/3/6 11:18.20.150 DDDDD ------------------------------------------------ 例)ほしい結果 2013/3/6 10:10:10.100 AAAAA 2013/3/6 10:10:10.110 BBBBB 2013/3/6 10:12:12.120 hijk 2013/3/6 10:14:14.140 CCCCC 2013/3/6 10:14:14.150 DDDDD かかった時間1:11msec(2行目-1行目+1) かかった時間2:10msec(5行目‐4行目) 2013/3/6 10:15:16.100 AAAAA 2013/3/6 10:15:16.108 hijk 2013/3/6 10:15:16.110 BBBBB 2013/3/6 10:15:19.140 CCCCC 2013/3/6 10:15:19.150 DDDDD かかった時間1:11msec(9行目-7行目+1) かかった時間2:10msec(12行目‐11行目) … …(省略:10000行以上) … ------------------------------------------------ 現状で以下の2つのマクロを作成しました(元ファイルで実行します) マクロ1.「AA…~DD…」を含む行の抽出+「かかった時間1:、かかった時間2:」の表記をDDDDDの下に挿入するマクロ マクロ2.時間のみの抽出を行うマクロ(下5ケタのみ 例:10100 小数点は削除) これら2つのマクロを同時に動かし、最終的に上記のような形式にまとめる予定です。 (もしかしたら1つのファイルで動かせるのかもしれませんが、わからなかったので二つにわけました;;) 現在、マクロ2.で抽出した時間からどのようにして「BBBB-AAAAA+1」「DDDDD-CCCCC」を 行えばいいか、また、計算した値をどのようにして「かかった時間1:、かかった時間2:」の 横においていけばいいかがわからない状態です。 マクロ自体さわったことがなく、もう一週間悩んでいます。 どなたか馬鹿な私に教えていただけないでしょうか

  • sedで特定の文字列を抜き出す方法

    有識者の知恵をお借りしたいのですが、以下のようなエラーログの出力結果が あった場合、AAAAA01が含まれる文字列の括弧の中の部分をsedで抜き出したい 場合はどのような指定をすればよいでしょうか。 括弧の中の文字はランダムで毎回同じとは限らない場合の指定方法をご教示下さい。 AAAAA00 AAAAA01 AAAAA02 AAAAA03 AAAAA04 AAAAA05 AAAAA06 (AAAAA07) BBBBB00 BBBBB01 BBBBB02 BBBBB03 BBBBB4 BBBBB05 BBBBB06 (BBBBB7) CCCCC00 CCCCC01 CCCCC02 CCCCC03 CCCCC4 CCCCC05 CCCCC06 (CCCCC7) 以下のコマンドで問題なく処理されますでしょうか。 sed -n "s/.*AAAAA01.*\((,)*\)\$ よろしくお願い致します。

  • VBAでマクロを作りたいのですが、、、困ってます

    1問目に答えた人で2問目に答えた人は何人いたか・・・ 2問目で初めて答えた人は何人いたか・・・・というのを計算させたいです。 たとえば(1)のデータがあった時に、(2)のデータのように変換したいとしたらどのようなVBAマクロにすればよいのでしょうか。 (1) 質問No,回答者, 1,AAAAA 1,BBBBB 1,CCCCC 1,AAAAA 2,AAAAA 2,BBBBB 3,AAAAA 3,DDDDD (2) 1 2 3 ←回答回数 1問目 3 2 1 2問目 0 0 3問目 1 上の結果ですが、 1問目で1回目に答えたのはAAAAA,BBBBB,CCCCCの3人、 1問目に答えて2問目に答えたのは、AAAAA,BBBBBの2人、 そのまま2問目に答えた人で3問目にも答えたのはAAAAAの1人、 2問目で初めて答えた人、その中で2問答えたのは0人 3問目で初めて答えた人は、DDDDDの1人 のような表を意味しています。 データは2万行ほどあるので、VBAで処理しなければならないと考えています。 ほかにも何か方法があれば教えていただけると助かります。 どうぞよろしくお願いします。

  • excelデータの斜めの文字行の抽出

    excelデータの斜めの文字行だけを絞りこんだり、抽出することはできんるのでしょうか。 例) 行NO. 001     AAAAA 002    BBBBB <=ここがexcelでは斜めになっている 003 CCCCC 004 DDDDD <=ここがexcelでは斜めになっている 結果 002    BBBBB 004 DDDDD VBAとかでも構いません。 宜しくお願いします。

専門家に質問してみよう