【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
----------------------------------------
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
Do Until ( fILE1.AtEndOfStream )
をUntilにした理由がありますか?
Do While Not fin.AtEndOfStream
と同じ構文にすることには何か問題がありますか?
Do While Not fILE1.AtEndOfStream
だとどうなりますか?
この回答への補足
>Do Until ( fILE1.AtEndOfStream )
>をUntilにした理由がありますか?
特に理由はありません。
恥ずかしながら、ネットで検索したプログラムを足していった・・・
という感じで、
それぞれ単独で正常に動作していた、
ファイルを読み込んで表示を行うプログラムと、
ファイルを分割処理するプログラムを
合体させて作ったものです。
単独では動作させた際、両方共にWhile文の動きをしているように
思えたので、そのままにしてあるだけです。
指摘頂いたところを含め、再度プログラムと実行環境を見直したところ、無事解決しました。
リストファイルにファイル名を書き忘れていた というありえないミスが原因でした。
お騒がせしました。。。
変数の宣言等のエラーが出たので多少手直しして正常な動作が確認できました。
-----------------
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
-----------------
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
windows.hがincludeされない
-
フルパスから最後のディレクト...
-
ExcelVBAでカレントディレクト...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
VBAでサブフォルダ内の写真サイ...
-
VBAで自身のファイル名を取得す...
-
VBでフォルダ単位のFTP
-
「UNCパスはサポートされません...
-
Ubuntu テキストファイルをどこ...
-
VBA 探しているFileがないとき...
-
FindFirstFileについて
-
ファイルやディレクトリの存在...
-
圧縮(Zip)について
-
C#でカレントディレクトリの取...
-
セルに入力されたパスでフォル...
-
webアプリケーションでの画像フ...
-
ソフトウェアからオープンされ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
どんなプログラムを書いても指...
-
ExcelVBAでカレントディレクト...
-
マイクラでPythonのプログラミ...
-
windows.hがincludeされない
-
「UNCパスはサポートされません...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ExcelVBA サーバーの(共有フォ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
webアプリケーションでの画像フ...
-
ファイルダイアログのカレント...
-
VBAで自身のファイル名を取得す...
-
AfxLoadLibrary関数で、DLLのハ...
-
Ubuntu テキストファイルをどこ...
おすすめ情報