- ベストアンサー
テキストデータを合成するプログラム
- テキストデータを合成するプログラムを作成したいと考えています。データの数が多く手作業だとミスが起きやすいため、プログラム化したいです。VBScriptやExcelのVBAを使用していますが、筋道が立ちません。アドバイスを求めています。
- テキストデータの合成を行いたいです。手作業だとミスが起きやすいため、プログラム化したいと思っています。VBScriptやExcelのVBAを使用していますが、筋道が立ちません。アドバイスをいただけないでしょうか。
- テキストデータの合成を行いたいです。データの数が多く手作業ではミスが起きやすいため、プログラム化したいと考えています。VBScriptやExcelのVBAを使用していますが、うまくいきません。どのように取り組めば良いかアドバイスをいただけませんか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
プログラムを組むとして。 1. 3つのファイル(a.txt, b.txt, c.txt)をそれぞれ読み取りモードで オープンします。 2. 書き込みファイル(d.txt)を書き込みモードでオープンします。 3. 入力ファイルから1行読みとります。 4. 連結して出力します. 5. 3. 4.を入力ファイルのどれかが終端に達するまで繰り返します。 てな感じでいいんじゃないですかね。 入力ファイルの長さが違うときの対処はいろいろ 考えられますがそれは宿題ということで。 とりあえずvbscriptだとこんな感じになります。 Excel VBAでもできますがパス。 あとエラーチェックをほとんどまともにやってませんので、 あくまで参考程度にどうぞ。 option explicit Dim oArgs Set oArgs = WScript.Arguments If oArgs.Count <> 4 Then WScript.Echo "ファイルを4個指定してください" WScript.Quit End If Dim oFS Dim oInFile1 Dim oInFile2 Dim oInFile3 Dim oOutFile Set oFS = CreateObject("Scripting.FileSystemObject") Set oInFile1 = oFS.OpenTextFile(oArgs(0)) Set oInFile2 = oFS.OpenTextFile(oArgs(1)) Set oInFile3 = oFS.OpenTextFile(oArgs(2)) Set oOutFile = oFS.CreateTextFile(oArgs(3), True, False) Dim sLine1 Dim sLine2 Dim sLine3 Do While oInFile1.AtEndOfStream <> True And _ oInFile2.AtEndOfStream <> True And _ oInFile3.AtEndOfStream <> True sLine1 = oInFile1.ReadLine sLine2 = oInFile2.ReadLine sLine3 = oInFile3.ReadLine oOutFile.WriteLine(sLine1 & sLine2 & sLine3) Loop oInFile1.Close oInFile2.Close oInFile3.Close oOutFile.Close Set oInFile1 = Nothing Set oInFile2 = Nothing Set oInFile3 = Nothing Set oOutFile = Nothing Set oFS = Nothing
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
> それぞれの方法にどんなメリットデメリットあるのでしょうか? コマンドプロンプトでcscript.exe経由で実行した場合、 標準入力や標準出力が使えますので、他のテキスト処理を行うコマンドがあれば それらと連携しやすくなります。これはメリットでしょう。 一方で「普通の人」からすると、わけのわからん英語めいたものをぽちぽちと 入力させられるということでとっつきは良くないでしょうね。 IEからとかwscript.exeをつかったときはこれが逆になると。 > ただ実行の状態をresponse.writeのような形で返せたらなあと思いましたが・・・何かあるんでしょうね。 コンソールに経過表示などをしたいということですか? Wscript というオブジェクトに StdOut(標準出力)とかStdErr(標準エラー出力)が ありますので、普通のファイルと同じようにこれらに対して出力を送ってやると コンソールに出てきますよ。 Wscript.StdOut.WriteLine "こんにちは!" VBScript実用プログラミング・テクニック―正規表現、OOP、SQLを応用した実用ツールの作成技法 http://www.amazon.co.jp/dp/4896273311/ この本なんかは結構参考にできるのではないかと思います。
- sakusaker7
- ベストアンサー率62% (800/1280)
ひょっとしてデスクトップとかエクスプローラから ダブルクリックして使おうとしていますか? #2で提示したスクリプトはコマンドライン引数で入力ファイルと出力ファイル (最初三つが入力で最後が出力)を指定するようになっています。 プログラム(スクリプト)に対象ファイルをベタに 書いちゃうと違うファイルを処理しようというときに いちいち書き換えなければいけないので 不便でしょう? 簡単には コマンドプロンプトを開いて cscript //nologo paste3.vbs a.txt b.txt c.txt d.txt のように入力して使います。 ここで paste3.vbs はスクリプトの名前ですので、 自由につけてください。 マウスでダブルクリックして使いたいっ ということなら スクリプトに対してのショートカットを作って、 プロパティのリンク先を C:\scripts\vbs\paste3.vbs a.txt b.txt c.txt hoge.txt のようにしてやればよいです。 >oArgsは、変数の配列のような使い方でしょうか? 実際配列です。 oArgs.Count でプログラムの引数が何個与えられたかがわかりますし、 oArgs(n) で n番目の引数の内容(文字列)を取り出せます。 ただし、0始まりなのでご注意。
補足
丁寧なご説明いただき、大変ありがとうございます!! そうでした、vbsのファイルを作成してダブルクリックして実行するつもりでした。 基本がわかっていなくすみません。 確かに・・・ 毎回ファイルを記述する部分を書き換えて使用するあたまでした。 引数で渡した方が楽かもしれませんね。 ありがとうございました。 疑問がでてきました、 このようにコマンドプロンプトでcscriptから実行するのと vbsファイルをダブルクリックなどで実行する方法、 それとIE上で実行させたり、あとwscriptで実行する方法 いろいろやり方はあると思うのですが、 それぞれの方法にどんなメリットデメリットあるのでしょうか? 個人的にはコマンドプロンプトで実行する方法が気に入りました。 (シンプルで見やすいから) ただ実行の状態をresponse.writeのような形で返せたらなあと思いましたが・・・何かあるんでしょうね。 いろいろ勉強してみたくなりました。
- chie65536
- ベストアンサー率41% (2512/6032)
マクロやプログラムなんて要りません。 1.Excelで3つのテキストファイルを開く。(ファイル - 開く、で、ファイルの種類を「テキストファイル」にしてa.txt、b.txt、c.txtを次々に開いて行く) 2.新しいブックを新規作成する。(ファイル - 新規作成) 3.新規作成したブックのA1セルに「=a.txt!A1 & b.txt!A1 & c.txt!A1」という式を打ち込む。 4.A1セルを必要なだけ下方向にドラッグしてセルのコピーを行う。 5.新規作成したブックをd.txtという名前でテキスト形式で「名前を付けて保存」で保存する。 これだけで行結合したd.txtが作れます。 ※※※注意※※※ 行の中に「"」や「,」など、括り文字や区切り文字があると上手く行かない場合があります。テキストファイルを読み込む時に、読み込み方式を変えたり、文字列を括る文字の指定、項目区切り文字の指定を変えると、上手く行く事があるので、読み込み時に色々試してみて下さい。
お礼
ご回答ありがとうございます。 確かにそうなんですよね(^^; もちろん手作業でも全く問題ないのですが、 業務の精度の向上と時間の短縮の為、 今回はあえて処理の自動化を行いたいと思います。
お礼
ご回答ありがとうございました。 早速試してみましたところ、結果できました。 ありがとうございました!!
補足
そのまま使えないところがありました。 というか私が理解できていないだけだと思いますが・・・ 最初の1~7行までの部分 Dim oArgs Set oArgs = WScript.Arguments If oArgs.Count <> 4 Then WScript.Echo "ファイルを4個指定してください" WScript.Quit End If どのように使用するのでしょうか? ここいきなりエラーになるので 結局わからないので Set oInFile1 = oFS.OpenTextFile(oArgs(0)) Set oInFile2 = oFS.OpenTextFile(oArgs(1)) Set oInFile3 = oFS.OpenTextFile(oArgs(2)) Set oOutFile = oFS.CreateTextFile(oArgs(3), True, False) に Set oInFile1 = oFS.OpenTextFile("c:\a.txt") みたいにべた打ちいたしました。 oArgsは、変数の配列のような使い方でしょうか? とんちんかんな質問でしたらすみません。。。 その他は全く問題なく動作しました。 ありがとうございます。