- ベストアンサー
部分コピーについて
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で考えてます。 よろしくお願いします。
- みんなの回答 (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を閉じる と言うプログラムにします。
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
>batでは無理なようなので フリーのコマンドライン版のsed.exeやawk.exeを使うと、batファイルの中で「この単語から、この単語までコピー」や「この行から、この行までコピー」ができますよ。 sed、awk、gawkで検索してみましょう。
お礼
そうなんですか有難う御座います。 今回はvbsでやってみたいのですが、 よろしくお願いします。
お礼
有難うございます。やってみます。