こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割

【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割

■プログラム及びファイルに関する備考
.\test\     = 分割を行いたいファイルが格納されたディレクトリ
Dir_FileList.txt = testディレクトリ内のファイルをリスト化したもの。
          相対パスにて、1行ずつ改行して記述する。

■やりたい事
Dir_FileList.txtという、.\test\内に配置されたファイルをリスト化したtxtを
1行ずつ読み込み、読みこんだファイルに対し、10行毎に分割処理を行いたいと思っています。
分割したファイルは、分割元のファイルが格納されたディレクトリと同じ、.\test\ディレクトリに作成し、
分割前の元ファイルを最後に削除するという処理をリストに書かれた全てのファイルに対して行いたいです。

下記のようにコーディングをしたのですが、
どうも「Do Until ( fILE1.AtEndOfStream )」のループ文の処理が行われていない?ようで、
testディレクトリ内部のファイルが分割されません。

色々試したのですが、VBScriptを触るのは初めてでなかなか上手くいきませんでした。

どこが間違っていて、どのように修正すれば動くようになるでしょうか?
お手数ですが、ご教授をお願い致します。

----------------------------------------
Option Explicit

Dim flReadFSO, flReadFSO2, fFolder, fILE, flrSubFolder
Set flReadFSO = CreateObject("Scripting.FileSystemObject")

Set flReadFSO2 = WScript.CreateObject("Scripting.FileSystemObject")
Set fFolder = flReadFSO2.GetFolder(".")

Dim name1, fILE1
name1 = fFolder & "\Dir_FileList.txt"
Set fILE1 = flReadFSO.OpenTextFile(name1)


Dim oneLineTxt
oneLineTxt =""

Dim FSO
set FSO = WScript.CreateObject("Scripting.FileSystemObject")

Do Until ( fILE1.AtEndOfStream )
oneLineTxt = fILE1.ReadLine
WScript.Echo oneLineTxt

arg = ".\test\test01.txt"
set fin = FSO.OpenTextFile(arg, 1)
fbn = FSO.GetBaseName(arg)
fen = FSO.GetExtensionName(arg)
nf=0
set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true)
nl=0

Do While Not fin.AtEndOfStream
fout.WriteLine fin.ReadLine
nl=nl+1
if nl>9 then
fout.Close
nf=nf+1
if nf>9 then exit do
set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true)
nl=0
end if
Loop

fin.Close
FSO.DeleteFile arg, True
Loop

fILE1.Close
----------------------------------------

投稿日時 - 2010-06-19 22:43:49

QNo.5980730

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

19人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

Do Until ( fILE1.AtEndOfStream )
をUntilにした理由がありますか?

Do While Not fin.AtEndOfStream
と同じ構文にすることには何か問題がありますか?


Do While Not fILE1.AtEndOfStream
だとどうなりますか?

投稿日時 - 2010-06-19 23:00:05

補足

>Do Until ( fILE1.AtEndOfStream )
>をUntilにした理由がありますか?

特に理由はありません。

恥ずかしながら、ネットで検索したプログラムを足していった・・・
という感じで、
それぞれ単独で正常に動作していた、
ファイルを読み込んで表示を行うプログラムと、
ファイルを分割処理するプログラムを
合体させて作ったものです。

単独では動作させた際、両方共にWhile文の動きをしているように
思えたので、そのままにしてあるだけです。

投稿日時 - 2010-06-19 23:26:03

お礼

指摘頂いたところを含め、再度プログラムと実行環境を見直したところ、無事解決しました。

リストファイルにファイル名を書き忘れていた というありえないミスが原因でした。
お騒がせしました。。。

変数の宣言等のエラーが出たので多少手直しして正常な動作が確認できました。

-----------------
Option Explicit

Dim flReadFSO, flReadFSO2, fFolder, fILE, flrSubFolder
Set flReadFSO = CreateObject("Scripting.FileSystemObject")

Set flReadFSO2 = WScript.CreateObject("Scripting.FileSystemObject")
Set fFolder = flReadFSO2.GetFolder(".") 'カレントディレクトリの取得

Dim name1, fILE1
name1 = fFolder & "\Dir_FileList.txt" '読み込み対象ファイル指定
Set fILE1 = flReadFSO.OpenTextFile(name1) 'ファイルを開く

Dim oneLineTxt
oneLineTxt =""

Dim FSO
set FSO = WScript.CreateObject("Scripting.FileSystemObject")

Dim arg, fin, fbn, fen, nf, nl, fout, outputFL

Do While Not fILE1.AtEndOfStream
oneLineTxt = fILE1.ReadLine '1行読み込む
outputFL =fFolder & "\" & "\test\" & oneLineTxt '置換後ファイル名のフルパス化
WScript.Echo outputFL '表示する

arg = outputFL
set fin = FSO.OpenTextFile(arg, 1)
fbn = FSO.GetBaseName(arg)
fen = FSO.GetExtensionName(arg)
nf=0
set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true)
nl=0

Do While Not fin.AtEndOfStream
fout.WriteLine fin.ReadLine
nl=nl+1
if nl>9 then
fout.Close
nf=nf+1
if nf>9 then exit do
set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true)
nl=0
end if
Loop

fin.Close
FSO.DeleteFile arg, True '分割元ファイルの削除(分割前と分割後ファイルの競合を防ぐ)
Loop

fILE1.Close

-----------------

ありがとうございました。

投稿日時 - 2010-06-20 08:39:57

あなたにオススメの質問