テキストファイルの改行だけの読み込みについて

このQ&Aのポイント
  • テキストファイルの改行だけのファイルを読み込むプログラムにおいて、.Read(1)は何を読み込むのか?
  • Scripting.FileSystemObjectを使用してテキストファイルを開き、改行だけの場合は何も読み込まれない。
  • プログラムでは、改行だけの場合にカウンタjを0にリセットする処理がある。
回答を見る
  • ベストアンサー

読み込むテキストファイルが改行だけの場合について

あるテキストファイルC:\test.txtが改行だけのファイルの場合、 下記のプログラムにおいて、.Read(1)で何が読み込まれるの でしょうか? Set myFso = CreateObject("Scripting.FilesystemObject") Set mytxt = myFso.OpentextFile("C:\test.txt", 1, 0) With mytxt Do While mytxt.AtEndOfStream <> True mystr = .Read(1) If mystr = "" Then j = 0 End If Loop .Close End With Set mytxt = Nothing

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

その部分のストリームの前後は、前の実質データ+「前のレコードの終わり記号(文字コード)」+直ぐ続いて、「レコードの終わり記号」、だとおもいます。 16進表示が出来るテキストエディタで、読み込んで表示してみれば、はっきりして納得するでしょう。  ファイルの最後にたまたま当たったときは、、「前のレコードの終わり記号(文字コード)」+直ぐ続いて、「レコードの終わり記号」+「ファイルの終わり記号」、だと思います。 ファイルを読み書きする上で必要なレコード区切り文字(デリミタという)やファイル末尾を示す文字(EOF文字)は、勉強してください。OS、IOCS,文字コードなどで表面的には差異がある。 IOCSを通して受け取る場合は、空白というもので、VBなどでは、インプットバッファはIF A=””で受けられるものと思います。 CR+LF,CR,EF、EOFなどの話題を勉強してください。

関連するQ&A

  • VBAでテキストファイルの改行を無視する方法

    VBAでテキストファイルにある文字列を配列の変数に格納したいのですが、改行が含まれているとそこから2バイトずつずれてしまいます。 1行毎に読もうとしても1行の文字列が6000バイトぐらいあるので変数に格納しきれません。 読み込むテキストファイルは _________0_________1_________2・・・・________10 _______100________51 のようになっており、10バイトずつ変数に格納していきたいです(スペースも格納する必要あり) 以下のように作ったのですが、改行のあるところからずれてしまいます。 Sub ファイル読み込み() Dim buf(30000000) As String Dim i As Long i = 0 With CreateObject("Scripting.FileSystemObject") With .OpenTextFile("C:\test.text", 1) Do While .AtEndOfStream <> True buf(i) = .read(10) Loop End With End With End Sub 「次の文字列が改行コードである」ということが分かれば.skipで飛ばせるのですが、その判定式が探しても見つかりません。 どなたかご教授よろしくお願いします。

  • FSOでエクセルファイルを作成したい

    FSOでエクセルファイルを作成したいのですが、 ファイルの作成はできますが、作成したファイルが開けません。 Sub 新規Excelファイルを作成する() Dim MyFile As String Dim myFSO As Object MyFile = "管理簿.xlsx" Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO.CreateTextFile("C:\" & MyFile) .Close End With Set myFSO = Nothing End Sub で、エラーにならずうまくいっています。 が、その出来上がったファイルを開こうとすると 「ファイル形式またはファイル拡張子が正しくありません」 と言う旨のメッセージが表示されます。 何が間違ってますか? よろしくお願いします。

  • vbsでテキストファイル内の文字列検索

    初心者です。 テキストファイルを指定し、含まれる文字列を検索し、 結果表示したいと考えております。 色々探して、以下で作成したのですが、 うまく動いてくれません。 出来ましたら、テキストファイルの中の文字列の 一部分を指定して動作させたいと思っております。 どなたかご教示のほど宜しくお願い致します。 ---------------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Dim strSearchWord Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt") Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine strSearchWord = strSearchWord & tmpLine & vbcrlf Loop Dim SearchWord SearchWord = split(strSearchWord," ") if InStr(SearchWord(ix), "test")<>0 then WScript.Echo " testを含みます。" else WScript.Echo " testを含みません。" end if ----------------------------------------------------

  • vbscript ファイル操作

    二つのテキストファイルを行レベルで結合したファイルを 作成しようとしています。 ファイルの最後を越えた入力を行おうとしました。 とエラーが吐き出され、結合したファイルがうまく作成されません。 -vbscritptファイル- dim f, f_a, f_b, f_bu, f_mk, wrtxt set f = createobject("scripting.filesystemobject") set f_a = f.opentextfile("c:\temp\a.txt",1) set f_b = f.opentextfile("c:\temp\b.txt",1) set f_mk = f.createtextfile("c:\temp\result.txt") f_mk.close set wrtxt = f.opentextfile("c:\temp\result.txt",2) do while f_b.atendofstream <> true if not f_a.readline & f_b.readline = "" then wrtxt.writeline(f_a.readline & " " & f_b.readline) else exit do end if loop f_a.close f_b.close   -a.txt- 2008/07/01 9:30 2008/07/02 9:59 2008/07/03 9:35 2008/07/04 9:52 2008/07/08 9:45 2008/07/09 9:47 2008/07/10 9:15 2008/07/11 9:44 2008/07/14 9:44 2008/07/15 9:43 2008/07/16 13:19 2008/07/17 9:45 2008/07/18 9:31 2008/07/22 9:39 2008/07/23 9:28 2008/07/24 9:41 2008/07/25 9:58 2008/07/28 9:29 2008/07/29 9:49 2008/07/30 9:50 2008/07/31 9:21 -b.txt- 2008/07/01 18:25 2008/07/02 19:15 2008/07/03 18:45 2008/07/04 19:16 2008/07/08 18:36 2008/07/09 19:14 2008/07/10 18:46 2008/07/11 21:58 2008/07/14 22:36 2008/07/15 19:42 2008/07/16 18:00 2008/07/17 19:19 2008/07/18 18:16 2008/07/22 19:56 2008/07/23 18:42 2008/07/24 18:38 2008/07/25 21:55 2008/07/28 21:31 2008/07/29 22:23 2008/07/30 20:13 2008/07/31 20:00 期待値 2008/7/1 9:30 2008/7/1 18:25 2008/7/2 9:59 2008/7/2 19:15 2008/7/3 9:35 2008/7/3 18:45 2008/7/4 9:52 2008/7/4 19:16 2008/7/8 9:45 2008/7/8 18:36 2008/7/9 9:47 2008/7/9 19:14 2008/7/10 9:15 2008/7/10 18:46 2008/7/11 9:44 2008/7/11 21:58 2008/7/14 9:44 2008/7/14 22:36 2008/7/15 9:43 2008/7/15 19:42 2008/7/16 13:19 2008/7/16 18:00 2008/7/17 9:45 2008/7/17 19:19 2008/7/18 9:31 2008/7/18 18:16 2008/7/22 9:39 2008/7/22 19:56 2008/7/23 9:28 2008/7/23 18:42 2008/7/24 9:41 2008/7/24 18:38 2008/7/25 9:58 2008/7/25 21:55 2008/7/28 9:29 2008/7/28 21:31 2008/7/29 9:49 2008/7/29 22:23 2008/7/30 9:50 2008/7/30 20:13 2008/7/31 9:21 2008/7/31 20:00 vbscriptを使い出したのは最近のため、どこが悪いのかわかりません。 ご指導よろしくお願い致します。

  • 位置の指定をすることは可能ですか?

    VBAでテキストファイルを生成するコードを作ったのですが その際位置の指定をすることは可能ですか? Sub test() Dim myFSO As New FileSystemObject Dim ts As TextStream Dim MyFileName As String Dim MyPath As String MyPath = MyDesktop & "\" MyFileName = "test.txt" Set myFSO = CreateObject("Scripting.FileSystemObject") Set ts = myFSO.CreateTextFile(MyPath & MyFileName, True) CreateObject("Shell.Application").ShellExecute MyPath & MyFileName 'ここで位置の指定をしたい Set ts = Nothing Set myFSO = Nothing End Sub こんな感じのコードは作成しました。 With MyFileName .Top = 100 .Left = 100 End With みたいな感じで位置の指定は可能ですか? APIを使わないと無理ですか?

  • VBScriptで、ファイルから任意の行のみ取り出す方法について

    VBScriptにて、あるファイル内を1行ずつ順番に取り出しながら、 途中の数行を別のファイルに書き出したいのですが、方法が分からず 悩んでいます。 -------------------------------------------------------------- set objFS = CreateObject("Scripting.FileSystemObject") set objReadText = objFS.OpenTextFile("C:\read.log") set objWriteText = objFS.CreateTextFile("C:\write.log") count = 1 Do Until objReadText.AtEndOfStream If count >3 And count < 8 Then strLine = objReadText.ReadLIne objWriteText.WriteLine(strLine) ElseIf count = 8 Then Exit Do End If count = count + 1 Loop objReadText.Close objWriteText.Close -------------------------------------------------------------- 上記にて、例えばread.logの4行目から7行目だけをwrite.logに書き出したいのですが、 想定した途中の行だけを別ファイルに書き出す事が出来ません。 どなたかアドバイスを頂けないでしょうか。

  • ファイル書き込み

    out.csvファイルに追記していくにはどのように記述すればいいのでしょうか? アドバイス下さい。 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") 'objFile.ReadLine Do While Not objFile.AtEndOfStream StrLine = objFile.ReadLine MyString = split(StrLine,",") ' msgbox Mid(MyString(0),2,10) ' MyString = split(objFile.ReadLine,",") if Mid(MyString(0),2,10) = "(PDH-CSV 4" then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) msgbox "!!!" end if ' if Mid(MyString(0),2,10) = DateString then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) ' 'msgbox Mid(MyString(0),2,10) msgbox "???" end if loop objFile.close Set objFSO = Nothing Set objFile = Nothing

  • vbaでフォルダの中のファイルを削除したい

    vbaでフォルダの中のファイルを削除したいのですが その場合は、 Sub フォルダの中身を全て削除する() Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO MyFolderName = ConsT_フォルダ名 & "\" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" myFSO.DeleteFile MyFolderName & "\" & MyFileName MyFileName = Dir() Loop End With Set myFSO = Nothing End Sub の様にして、一つ一つループして消していかないとダメでしょうか? フォルダは残して、カラのフォルダにしたいです。

  • 【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 ----------------------------------------

  • バイトをGBにするには?

    Sub FSO() Dim myFSO As Scripting.FileSystemObject Set myFSO = New Scripting.FileSystemObject Debug.Print myFSO.Drives.Item("C").TotalSize & "バイト" End Sub でバイトで容量を取得できるのですが、 単位をGBにするにはどうすればいいですか? Debug.Print myFSO.Drives.Item("C").TotalSize / 1024000000 & "GB" これであってるのでしょうか?

専門家に質問してみよう