- ベストアンサー
0バイトのテキストファイル
お世話になっております。 ファイルから特定の単語を抜き出し、新規でファイルを作成し、その中に単語を移行するスクリプトを作成しました。 しかし、単語のファイルが無い場合はエラーを出してくれるのですが、単語のファイルが空ファイル(0バイト)だった時、単語を移行する処理は行います。ですが、結果が空ファイルのままになります。 以下のスクリプトを作成したいのですが、勉強不足でうまくいきません。皆様のお知恵をお貸し下さい。 --------------------------------------------------------------- (1)単語のファイルがある事を確認。 (2)単語のファイルが空ファイルだった場合、移行する処理の中断およびエラー警告メッセージを表示。 (3)空ファイルじゃなかった場合、移行する処理を行う。 --------------------------------------------------------------- VBSを作成する場合、空ファイルが0バイトとして判断するのか、中身が白紙だった場合に判断するのか、という疑問もあって今回の質問をさせて頂きました。 どうか宜しく御願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
FileSystemObjectのFileExistsメソッドでファイルの存在を確認できますよ 何行目でエラーになるのかも投稿しましょう 以下のコードの字下げには全角スペースですので半角スペースに置換してから使用してください Dim oFSO, oFile, oText, oWrite Set oFSO = CreateObject("Scripting.FileSystemObject") if oFSO.FileExists("C:\work.txt") then Set oFile = oFSO.GetFile("C:\work.txt") if oFile.Size = 0 then WScript.Echo "空のファイルです" else ' 単語処理 Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True) end if else WScript.Echo "『C:\work.txt』ファイルが存在しません" end if
その他の回答 (4)
- redfox63
- ベストアンサー率71% (1325/1856)
たぶん ; でエラーになっているのでしょう VBSの場合ほとんど;は使いませんので 本業がC/C++屋なので たまに行末に;をつけてしまいます Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True) でいいはずです … 最初のDim のお尻の『;』も削除ですね m(__)m >スクリプトが別々に作成されているのであれば、単語処理のスクリプト >をCallで呼び出せば出来ると想定しています VBSはバッチファイルのように外部ファイルにCallで移行する機能はありません VBSのCallステートメントは あくまで自分のファイル内の関数やプロシージャを呼ぶためのものです # エラーが起きるのであればその内容を投稿しましょう
お礼
返信が遅れてすみませんでした。 あれからredfox63が書き込みを下さったコードを利用して、スクリプトを作成しておりました。ですが、まだまだ勉強不足で質問があります。 以下のコードを走らすと、「オブジェクトがありません。:"」と表示されてしまい、スクリプトエラーが出てしまいます。どうしてなのでしょうか? >Dim oFSO, oFile, oText、oWrite >Set oFSO = CreateObject("Scripting.FIleSystemObject") >if oFSO.FileExists("C:\work.txt") then > Set oFile = oFSO.GetFile("C:\work.txt") > if oFile.Size = 0 then > WScript.Echo "空のファイルです" > else > ' 単語処理 > Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True) > end if >end if あともう一点あります。今回の質問は空ファイルが0バイトの時にif文で分岐をするというものだったのですが、空ファイルを調べる前に「ファイルが既存で無い」というのを新たに追加する場合は、以下のようにすれば良いのでしょうか? if Filename("C:\work.txt") = False then end if else if oFSO.FileExists("C:\work.txt") then Set oFile = oFSO.GetFile("C:\work.txt") if oFile.Size = 0 then WScript.Echo "空のファイルです" else ' 単語処理 Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True) end if end if 宜しく御願い致します。
さて、本日、No1さんの回答を手掛かりに生まれて初めて vbs とやらにチャレンジ。 すったもんだしましたが、何とか動作しています。 で、私なら、以下のようにします。 ※正真正銘の初めてのコード。参考程度にされてください! Dim lngSize lngSize=FileSize("C:\Temp\c.bat") Select Case lngSize Case -1 WScript.Echo "該当するファイルはありません" Case 0 WScript.Echo "空のファイルです" Case else WScript.Echo "処理します!" End Select Function FileSize(ByVal FileName) Dim fso Dim fil Dim lngSize IF FileExists(FileName) Then Set fso = CreateObject("Scripting.FIleSystemObject") Set fil = fso.GetFile(FileName) lngSize= fil.Size Else lngSize=-1 End If FileSize = lngSize End Function Public Function FileExists(ByVal FileName) Dim fso Set fso = CreateObject("Scripting.FIleSystemObject") FileExists = fso.FileExists(FileName) End Function
お礼
初心者とは思えないですね・・・ 是非参考にさせていただきます。
- sakusaker7
- ベストアンサー率62% (800/1280)
「中身が白紙」というのが具体的にどういう状態なのかよくわかりませんが、 ファイルが存在するとか、そのサイズを知りたいという話なら 次のページのサンプルを見れば参考になるのではないかと。 2.12 ファイルの情報を見る - VBScript & JScript(JavaScript) Tips for WSH http://www.happy2-island.com/vbs/cafe02/capter00212.shtml
お礼
ご回答有難う御座います。 >「中身が白紙」というのが具体的にどういう状態なのかよくわかりま >せんが、 新規で作成したファイルの事で、中身が何も書かれていない状態を「中身が白紙」という表現をさせて頂きましたが、文章を端折ってしまってすみませんでした。 サンプルを拝見させて頂きました。私もこのページを見ていたのですが、最初のパラメタの部分でつまづいてしまったのです。 すごく初歩的なところなのですが、パラメタとは何かのテキストだったりプログラムの情報の事なのでしょうか?それとも、テキスト名やファイル名をobjParmで参照しているのでしょうか? パラメタが1コだった場合のイメージがどうしても沸かないのです・・・
- redfox63
- ベストアンサー率71% (1325/1856)
たぶん FSOを使って入出力をしているのであろうと思います であるなら Fileオブジェクトを取得して Sizeプロパティを参照してみましょう Dim oFSO, oFile, oText、oWrite; Set oFSO = CreateObject("Scripting.FIleSystemObject") if oFSO.FileExists("C:\work.txt") then Set oFile = oFSO.GetFile("C:\work.txt") if oFile.Size = 0 then WScript.Echo "空のファイルです" else ' 単語処理 Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True); end if end if といった具合でしょう
お礼
ご回答有難う御座います。 コードを少しいじらせて頂いて、無事にテストする事が出来ました。 また一つ勉強になり、大変参考になりました。 すみません、一点だけアドバイスを頂きたいのですが、redfox63さんが記載して下さったプログラムの「else」後について疑問があります。 > ' 単語処理 > Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True); set objWriteの行に単語処理のスクリプトを全部書き出す事は可能でしょうか? 何がやりたいかというと、単語処理のスクリプトを「else」後に誘導させたいのですが、スクリプトエラーが起こってしまって思うように出来ません。 何か方法はありますでしょうか? スクリプトが別々に作成されているのであれば、単語処理のスクリプトをCallで呼び出せば出来ると想定しています。 ただ、1つにまとめたい場合は「else」後と単語処理の前に紐付けをする方法が調べたのですが、ヒントがありませんでした。 宜しく御願いします。
お礼
redfox63さん、ご回答有難う御座います。 エラーが出る原因がわかりました。私のコード確認不足で、文字が一部欠けていた事がエラーを吐く原因となっておりました。よく確認もせず申し訳ありませんでした。 無事に問題も解決し、やりたい事がようやく出来ました。 本当に有難う御座いました。もっと、VBSについて勉強していきます。 感謝致します。