- ベストアンサー
BATファイルについて
BATファイルについて教えてください。 現在エクセルのVBAでテキストファイルから読み込んだデータを一行づつ解析し条件文でそれぞれ決められた書式のテキストファイルに書き直して新たなテキストファイルを作成するというプログラムを作成して使っています。 この機能をエクセルのVBAではなくBATファイルのようなインタープリンターを介さないプログラムができないかと悩んでいます。 BATファイルで上記の処理が可能か、または作成方法など教えていただけると助かります。 どなたかご存知の方教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> BATファイルのようなインタープリンターを介さないプログラム ここはちょっと認識が違うと思います。 BAT自体がインタプリタ(プリンターではありません)みたいなものです。 純粋にBATだけと言えるのは「内部コマンド」と呼ばれるコマンドだけです。他は外部のプログラムを利用します。 例えば、解析には、文字列検索が必要でしょう。 検索には、findstrというコマンドがありますが、これは、findstr.exeという外部プログラムを利用します。 findstr.exeを削除してしまえば、batだけでは実行できなくなります。 やりたいのは、わざわざExcelのような巨大なプログラムを立ち上げなくても、その処理をBATでしたい、ということではないでしょうか? 「内容によってはできなくはないが、いろいろと貧弱なBATでは難しいだろう」というのが私の回答です。 Excelみたいに巨大ではない、他のインタプリタ等を使うのが便利だと思います。 ○WSHを使う http://ja.wikipedia.org/wiki/Windows_Script_Host とくに、VBScriptはVBAにちょっと似ているので、変換が比較的楽と思われる http://ja.wikipedia.org/wiki/VBScript ○ awk,perl,ruby,python等の言語を使う これらは、テキスト処理に優れている。資料やサンプルも多い。 テキスト処理は環境にほとんど依存しないので、Linux用等に書かれたスクリプトでもほとんど変更無く動く。 インストールする必要があるので、インストールされていないPCで実行するには工夫が必要。
その他の回答 (1)
- f272
- ベストアンサー率46% (8467/18126)
素朴なbatファイルでは「解析し」「決められた書式」というのができないかもしれないし,できるかもしれない。その複雑さによります。でもbatファイルから外部ツールを呼び出す形にすればなんでもできますね。
補足
回答ありがとうございます。 複雑さを説明しますと、現在エクセルのマクロで以下のVBAを使っています。 ただし、これは前段階でテキストファイルからエクセルにインポートするという作業が発生するため、この部分の効率化とインポート時のトラブル回避が目的です。 具体的には A = Cells(n, 1) Intime = Cells(n, 2) OutTime = Cells(n, 3) text = Cells(n, 4) テキストファイルからある関数にデータの読み込み と Open "I:\Data.txt" For Append As #1 If A = "" Then Print #1, Chr(9); text Else Print #1, Format(No, "@"); Chr(9); Intime; "/"; OutTime; Chr(9); text 'Print #1, Str(No); Chr(9); Intime; "/"; OutTime; Chr(9); text No = No + 1 End If Close #1 の用に新規のテキストファイルをOPENして、最初に読み込んだ関数をみてIF文で分岐、先程開いたテキストファイルにPRINT#1のように書き出していくといものです。 何かよい方法がありましたら教えてください。 よろしくお願いします。 以下VBAマクロ全文です。-------------------------- Sub Macro1() Dim A As String Dim Intime As String Dim OutTime As String Dim text As String No = 1 Open "I:\Data.txt" For Append As #1 Print #1, "Lambda字幕V4 DF0+0 Scene" & Chr(34) & "和文標準" & Chr(34) Print #1, Chr(13) Close #1 For n = 1 To 2000 A = Cells(n, 1) Intime = Cells(n, 2) OutTime = Cells(n, 3) text = Cells(n, 4) Open "I:\Data.txt" For Append As #1 If A = "" Then Print #1, Chr(9); text Else Print #1, Format(No, "@"); Chr(9); Intime; "/"; OutTime; Chr(9); text 'Print #1, Str(No); Chr(9); Intime; "/"; OutTime; Chr(9); text No = No + 1 End If Close #1 Next End Sub
お礼
回答ありがとうございます。 BATファイルでは難しいようですね。 あまりBATファイルの中身を理解せず質問してしまったようですね。 ただ、WSHなる言語があることがわかり大変ためになりました。 少しWSHを勉強してみたいと思います。