- 締切済み
vbscript ファイルのマージ
VB初心者です。 C:\test配下の複数のファイルをマージする便利ツールを只今作成中なのですが、 下記プログラムを実行すると「If aryStrings(3) = "yes" Then」の行に対し、 「Subscript out of range」というエラーメッセージが表示されます。 マージの対象としているファイルの中身は次のようなイメージです。 100,101,102,yes,104,105,106,107,108,109,110,111 101,101,102,no,104,105,106,107,108,109,110,111 102,101,102,yes,104,105,106,107,108,109,110,111 103,101,102,no,104,105,106,107,108,109,110,111 104,101,102,yes,104,105,106,107,108,109,110,111 出力データ(output.txt)を見ると正常に処理されているようなのですが なぜこのようなメッセージが表示されるのかご教授いただきたいです。 お手数ですが宜しくお願い致します。 プログラム -------------------------------------------------------------------------------------------------------------------------- Dim FileName Dim fso,baseFolder Dim frFile,toFile Dim mFile Dim strLine1,strLine Dim aryStrings Dim msg FileName = InputBox("ファイル名を入力してください","ファイル名入力","output") Set fso = CreateObject("Scripting.FileSystemObject") Set baseFolder = fso.GetFolder("C:\test") Set toFile = fso.OpenTextFile("C:\test\" & FileName & ".txt" ,2 , True) For Each mFile In baseFolder.Files Set frFile = fso.OpenTextFile("C:\test\" & mFile.Name , 1) Do While frFile.AtEndOfStream <> True strLine1 = frFile.ReadLine() aryStrings = Split(strLine1, ",") If aryStrings(3) = "yes" Then strLine = aryStrings(0) +" "+ aryStrings(1) +" "+ aryStrings(9) +" "+ aryStrings(10) +" "+ aryStrings(11) toFile.Write strLine & vbCrLf Else End If Loop frFile.Close Set frFile = nothing Next toFile.Close msg = "処理終了" MsgBox msg --------------------------------------------------------------------------------------------------------------------------
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
Splitしている元の文字列(strLine1) の中身の問題では。プログラムのエラーは、コードの組み立てがおかしい場合に出るが、データの情況に十分手当てをしてないと出る場合もあり、2通りある。 こんなところへ原因を聞く前に、Splitの前後でUboundをMsgBoxでだす(そういう行を仮に入れてみる)とか、strLine1をMsgBoxでだすとか、してみてからの話ではないか。そして異常が見られないか、質問に報告して質問すべきだ。 コードをそのまま載せて読み解かせるなど、他人に頼りすぎ。 >vbscript ファイルのマージ の標題(ファイルのマージ )も、中身を言い当ててないのでは。 たまたま課題が、ファイルのマージ 処理だというだけでは。私の考えるファイルのマージ のロジックはコードには出てないようだが。
- inosukemar
- ベストアンサー率33% (2/6)
違うかもしれませんが、 Dim FileName Dim fso,baseFolder Dim frFile,toFile Dim mFile Dim strLine1,strLine Dim aryStrings Dim msg FileName = InputBox("ファイル名を入力してください","ファイル名入力","output") Set fso = CreateObject("Scripting.FileSystemObject") Set baseFolder = fso.GetFolder("C:\test") Set toFile = fso.OpenTextFile("C:\test\" & FileName & ".txt" ,2 , True) For Each mFile In baseFolder.Files Set frFile = fso.OpenTextFile("C:\test\" & mFile.Name , 1) Do While frFile.AtEndOfStream <> True strLine1 = frFile.ReadLine() If strLine1 <> "" Then aryStrings = Split(strLine1, ",") If aryStrings(3) = "yes" Then strLine = aryStrings(0) +""+ aryStrings(1) +""+ aryStrings(9) +""+ aryStrings(10) +""+ aryStrings(11) toFile.Write strLine & vbCrLf Else End If End If Loop frFile.Close Set frFile = nothing Next toFile.Close msg = "処理終了" MsgBox msg でどうでしょう どうやら 空白の一行をSplitで分割しようとしているようです。 条件次第では最初のファイルで転ぶんじゃないでしょうか・・・