• ベストアンサー

部分コピーについて

vbsで以下のことをするにはどうしたらいいでしょうか? log.txtからある部分のみコピーして別のファイルに出力したい。 例:log.txt コピー開始キーワード:start 終了キーワード:end 出力ファイル:new.log <log.txt> aaa addd start ddddd sssss end aaaaa ddddd <new.log> start ddddd sssss end のようにしたいんですけど、batでは無理なようなのでvbsで考えてます。 よろしくお願いします。

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

  • ベストアンサー
回答No.2

vbsでやる場合は、基本、以下のようにします。 1.フラグ変数をクリアして0にする。 2.log.txtを読み込みモードでオープンする。 3.new.logを新規作成(既存の場合は上書き)モードでオープンする。 4.do whileでlog.txtがEOFじゃない間、以下を繰り返す  4-1.log.txtから1行読み込む  4-2.もしフラグ変数が0ならば   4-2-1.読んだ1行が「start」と一致したならば    4-2-1-1.フラグ変数を1にする   End If  End If  4-3.もしフラグ変数が0でないならば(4-2.と4-3.は、Else文で繋がないこと。動作が変わってしまう)   4-3-1.読んだ1行をnew.logに1行書き込む   4-3-2.読んだ1行が「end」と一致したならば    4-3-1.フラグ変数を0にする   End If  End If loop 5.log.txtを閉じる 6.new.logを閉じる なお、以下のように、startとendが「入れ子」になった場合 aaa addd start ←外側のstart ddddd aaa addd start ←内側のstart ddddd sssss end ←内側のend aaaaa ddddd sssss end ←外側のend aaaaa ddddd 上記のプログラムでは、結果は start ←外側のstart ddddd aaa addd start ←内側のstart ddddd sssss end ←内側のend になってしまう。 start ←外側のstart ddddd aaa addd start ←内側のstart ddddd sssss end ←内側のend aaaaa ddddd sssss end ←外側のend と言う結果を返したいなら 1.フラグ変数をクリアして0にする。 2.log.txtを読み込みモードでオープンする。 3.new.logを新規作成(既存の場合は上書き)モードでオープンする。 4.do whileでlog.txtがEOFじゃない間、以下を繰り返す  4-1.log.txtから1行読み込む  4-2.読んだ1行が「start」と一致したならば    4-2-1.フラグ変数に1を加算する(0ならば1に、1ならば2にする)  End If  4-3.もしフラグ変数が0でないならば   4-3-1.読んだ1行をnew.logに1行書き込む   4-3-2.読んだ1行が「end」と一致したならば    4-3-1.フラグ変数からを1を減算する(2ならば1に、1ならば0にする)   End If  End If loop 5.log.txtを閉じる 6.new.logを閉じる と言うプログラムにします。

devid
質問者

お礼

有難うございます。やってみます。

その他の回答 (1)

回答No.1

>batでは無理なようなので フリーのコマンドライン版のsed.exeやawk.exeを使うと、batファイルの中で「この単語から、この単語までコピー」や「この行から、この行までコピー」ができますよ。 sed、awk、gawkで検索してみましょう。

devid
質問者

お礼

そうなんですか有難う御座います。 今回はvbsでやってみたいのですが、 よろしくお願いします。

関連するQ&A