• ベストアンサー

0バイトのテキストファイル

お世話になっております。 ファイルから特定の単語を抜き出し、新規でファイルを作成し、その中に単語を移行するスクリプトを作成しました。 しかし、単語のファイルが無い場合はエラーを出してくれるのですが、単語のファイルが空ファイル(0バイト)だった時、単語を移行する処理は行います。ですが、結果が空ファイルのままになります。 以下のスクリプトを作成したいのですが、勉強不足でうまくいきません。皆様のお知恵をお貸し下さい。 --------------------------------------------------------------- (1)単語のファイルがある事を確認。 (2)単語のファイルが空ファイルだった場合、移行する処理の中断およびエラー警告メッセージを表示。 (3)空ファイルじゃなかった場合、移行する処理を行う。 --------------------------------------------------------------- VBSを作成する場合、空ファイルが0バイトとして判断するのか、中身が白紙だった場合に判断するのか、という疑問もあって今回の質問をさせて頂きました。 どうか宜しく御願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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

mayoi-st99
質問者

お礼

redfox63さん、ご回答有難う御座います。 エラーが出る原因がわかりました。私のコード確認不足で、文字が一部欠けていた事がエラーを吐く原因となっておりました。よく確認もせず申し訳ありませんでした。 無事に問題も解決し、やりたい事がようやく出来ました。 本当に有難う御座いました。もっと、VBSについて勉強していきます。 感謝致します。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

たぶん ; でエラーになっているのでしょう VBSの場合ほとんど;は使いませんので 本業がC/C++屋なので たまに行末に;をつけてしまいます Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True) でいいはずです … 最初のDim のお尻の『;』も削除ですね m(__)m >スクリプトが別々に作成されているのであれば、単語処理のスクリプト >をCallで呼び出せば出来ると想定しています VBSはバッチファイルのように外部ファイルにCallで移行する機能はありません VBSのCallステートメントは あくまで自分のファイル内の関数やプロシージャを呼ぶためのものです # エラーが起きるのであればその内容を投稿しましょう

mayoi-st99
質問者

お礼

返信が遅れてすみませんでした。 あれから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 宜しく御願い致します。

noname#140971
noname#140971
回答No.3

さて、本日、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

mayoi-st99
質問者

お礼

初心者とは思えないですね・・・ 是非参考にさせていただきます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

「中身が白紙」というのが具体的にどういう状態なのかよくわかりませんが、 ファイルが存在するとか、そのサイズを知りたいという話なら 次のページのサンプルを見れば参考になるのではないかと。 2.12 ファイルの情報を見る - VBScript & JScript(JavaScript) Tips for WSH http://www.happy2-island.com/vbs/cafe02/capter00212.shtml

mayoi-st99
質問者

お礼

ご回答有難う御座います。 >「中身が白紙」というのが具体的にどういう状態なのかよくわかりま >せんが、 新規で作成したファイルの事で、中身が何も書かれていない状態を「中身が白紙」という表現をさせて頂きましたが、文章を端折ってしまってすみませんでした。 サンプルを拝見させて頂きました。私もこのページを見ていたのですが、最初のパラメタの部分でつまづいてしまったのです。 すごく初歩的なところなのですが、パラメタとは何かのテキストだったりプログラムの情報の事なのでしょうか?それとも、テキスト名やファイル名をobjParmで参照しているのでしょうか? パラメタが1コだった場合のイメージがどうしても沸かないのです・・・

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

たぶん 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 といった具合でしょう

mayoi-st99
質問者

お礼

ご回答有難う御座います。 コードを少しいじらせて頂いて、無事にテストする事が出来ました。 また一つ勉強になり、大変参考になりました。 すみません、一点だけアドバイスを頂きたいのですが、redfox63さんが記載して下さったプログラムの「else」後について疑問があります。 >    ' 単語処理 >    Set oWrite = oFSO.CreateTextFile("C:\Write.txt",True); set objWriteの行に単語処理のスクリプトを全部書き出す事は可能でしょうか? 何がやりたいかというと、単語処理のスクリプトを「else」後に誘導させたいのですが、スクリプトエラーが起こってしまって思うように出来ません。 何か方法はありますでしょうか? スクリプトが別々に作成されているのであれば、単語処理のスクリプトをCallで呼び出せば出来ると想定しています。 ただ、1つにまとめたい場合は「else」後と単語処理の前に紐付けをする方法が調べたのですが、ヒントがありませんでした。 宜しく御願いします。

関連するQ&A

  • 【テキストファイルへの出力ができない】

    お世話になっております。 以前こちらで質問させていただき、親切なご回答のおかげて解決したのですが、 新たに問題が出てしまいました。 ご存知の方、どうかご教授くださいませ。 WindowsVistaで、IE8を利用した場合、 IE右クリックを拡張で実行させたプログラムで、 「テキストへの書き込み」ができません。 XPでIE6を利用すると、きちんと動きます。 たとえば、http://www.happy2-island.com/vbs/cafe02/capter00207.shtml のサイトのプログラムを、【test1.vbs】という名前で保存します。 書き込み先を、同じフォルダに作った【test2.txt】というテキストファイルに指定します。 Windows Based Script Hostでvbsファイルをそのまま実行すると、ちゃんと【test2.txt】に 情報が書きこまれるのですが、 IE右クリックに登録して実行すると、【test2.txt】は白紙のままです。 特にエラーも出ないため、原因がまったくわかりません。 原因にお心当たりのある方がいらっしゃいましたら、 どうかお教え下さい。 宜しくお願いいたします。

  • 0バイトファイルの判断

    Windowsのバッチ処理についての質問です。 バッチから0バイトファイルを判断し削除するというようなものを作りたいです。 例えば、 C:\TEMP内にある0バイトのファイルを全て削除 上記のようなものをif文等で判断させることは可能でしょうか? OS:WindowsXP 以上、よろしくお願いいたします。

  • VBSからshift-jisのテキストファイルを作成するには?

    毎度お世話になっております。 NTサーバー上で、VBSで制御ファイルを記述し、その制御ファイルをバッチ操作でアプリケーションに読み込ますような処理を作成しています。  ところがアプリケーション側がSJISにしか対応しておらず、UNICODEに対応していないので、エラーになってしまいます。  BASP21 DLLのKconvを使用しても、書き出すときにはUNICODEになってしまいます。  この実現方法を、どなたかヒントでもいただけませんか? よろしくお願いいたします。

  • テキストファイルの置換

    テキストファイル"A.TXT"があります。 ファイルの中は項目を「,」(カンマ)で区切られています。 3個目の「,」(カンマ)の後に「日付」が入っていますが、"H21.2.5"や"H21.2.10"となっています。 1桁目は必ず"H"です。(平成の"H") ex. あああああ,AAA,H21.2.5,ああああああ いい,BBBBB,H21.2.10,いいいい この"H21.2.5"を"090205"と置換したいのですが、スキルがないため方法がわかりません。 和暦→西暦下2桁 月→2桁(1桁の時は頭"0") 日→2桁(1桁の時は頭"0") すでにあるファイルを処理するのであれば、Excel読み込み後に置換処理などでなんとかなると思いますが、日次で毎日ファイルが作成されるため、自動的に処理したいのです。 VBSなどのプログラムで一括で処理できないでしょうか。 お力添えをいただければありがたいです。 よろしくお願いいたします。

  • 書き込むファイルが開いているとき

    VBAを使って、テキストファイルに書き込みをしているのですが、 書き込みしたいファイルが開いているときは、 処理を中断したいのですが、 開いていることはどうやって判断できるのでしょうか?

  • textファイル名を取得して先頭行の挿入スクリプト

    大量のtxtファイルのファイル名をテキストの先頭行に挿入するスクリプトを見つけて実行したのですが、17行の引数エラーとなってしまいました。 古いスクリプト(2007年)で作者に繋がるかわからないので、どなたかvbsに詳しい方に教えていただければ幸いです。 http://beauty.geocities.jp/chirinuruwowahe/TxtTxtAddName.zip よろしくお願いします。

  • 0バイトファイルの作成

    PRO*Cで、DBから取得した値をCSVファイルに出力するプログラムを 作成しています。 fprintf関数で書込んでいるのですが、 途中でエラーが発生した場合(異常終了)、 今まで書込んでいたデータを残さず、0バイトファイルを 作成する仕様になっているのですが、 単純にファイルポインタにNULLを代入して、 ファイルクローズすればできますか?

  • ASPからサーバー上のVBSファイルを引数付で実行したい

    お世話になっております。 ASPで指定名称のフォルダを作成しアクセス権を割り当てる サイトを作成しております。 フォルダの作成は問題なく作成できましたが、アクセス権の指定がうまくいかず困っております。 アドバイスいただければ幸いです。 前提として作成したフォルダへのアクセス権割り当ては、MSで公開しているxcacls.vbsファイルを利用してます。 http://support.microsoft.com/kb/825751/ja このVBSファイルに先に作成したフォルダのネットワークパス・アクセス権を与えるユーザー名・与える権限レベルを引数として与えASPのサーバー上で実行し処理を完結しようと考えております。 ------------------スクリプト抜粋---------------------- Set WSHShell = CreateObject("WScript.Shell") 'xcacls.vbsを実行 'strPathNm = "xcacls.vbs \\fileServer\testfol /G Domain\User:M /f /t /e /q" Call WSHShell.Run(strPathNm, 0, false) -------------------------------------------------------- サーバー上でコマンドプロンプトから実行する限りは問題なく 処理されてます。 ASPサイトから実行した場合は特にエラーなど表示されず処理終了しますが、アクセス権の割り当てはされません。 また実行時にサーバー上で実行されたかタスクマネージャーにて確認してますが、起動された形跡がありません。 ちなみにスクリプトの問題かと思い、「strPathNm」の編集への代入を、メモ帳や電卓に変更したところ正常に起動しております。 ※xcacls.vbsはサーバー上でパス通してあります。 以上よろしくお願いいたします。

  • テキストファイルに固定文字挿入

    テキストファイル"A.csv"があります。 3個目の「,」の後に数字6桁が入っています。 他の項目は桁数可変ですが、この部分は6桁固定です。 ex. あああああ,AAA,090523,ああああああ いい,BBBBB,090101,いいいい この"090523"を"09/05/23"と置換(2桁おきに"/"を挿入)したいのですが、スキルがないため方法がわかりません。 すでにあるファイルを処理するのであれば、Excel読み込み後に置換処理などでなんとかなると思いますが、日次で毎日ファイルが作成されるため、自動的に処理したいのです。 VBS、バッチなどのプログラムで一括で処理できないでしょうか。 お力添えをいただければありがたいです。 よろしくお願いいたします。

  • 【VBScript】ファイルのPathを表示させる

    初歩ですが、VBScriptの処理で質問させてください。 以下の処理を実現したいと思っています。 ・WScript.Arguments.vbsにファイルをドラッグした際に、 ファイルのPathを表示する ・2つ以上のファイルがドラックされた場合は、 アラームを上げて処理を中断する [WScript.Arguments.vbs] Dim Inti Dim oParam(1) for Inti=0 to 1 Set oParam(Inti) = WScript.Arguments MsgBox oParam(Inti) next このコードですが、他に何を追加すればよろしいでしょうか。 恐れ入りますが、回答いただければ幸いです。