lineinputについての疑問

このQ&Aのポイント
  • プログラムでLineInput関数を使って1行ずつ読み取る際、読み取る順序が正確かどうか疑問です。
  • プログラムが永遠に1行目を読み取るか、ランダムになるのではないかと不安です。
  • LineInput関数が順序を保つ仕組みや、ランダムになることがない理由について教えてください。
回答を見る
  • ベストアンサー

lineinput について

下記のプログラムで処理を繰り返す時、どうして LinInput関数は正確に順序良く1行1行を読み取るのか分かりません。 下のプログラムでは永遠に1行目を読み取るか、読み取る行が ランダムになってしまうような気がするのですが、なぜでしょうか? 宜しくお願いします。 ---------------------------------------------------------------- filenum = FreeFile() FileOpen(filenum, openfile, OpenMode.Input) Do Until EOF(filenum) readline = LineInput(filenum) TextBox1.Text = TextBox1.Text & readline & vbCrLf Loof FileClose(filenum)

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

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

>読み取る行がランダムになってしまうような気がするのですが どういう理由で「ランダム」だと思われるのでしょう? ファイル番号ごとに、内部処理用に「Seekポイント」と言うデータを保持しています。 「Seek 関数 」 (http://msdn2.microsoft.com/ja-jp/library/7af2feyt(VS.80).aspx) 例えば、 1行目が10文字(+復改行2文字)、 2行目が5文字(+復改行2文字) 3行目が20文字(+復改行2文字) だと、 「FileOpen」直後はSeekポイント「1」に初期化され、 最初の「LineInput」で、1文字目から復改行まで10文字(+2文字)読み込み、 Seekポイントを+12して13に変更。 2回目の「LineInput」で、13文字目から復改行まで5文字(+2文字)読み込み、 Seekポイントを+7して20に変更。 3回目の「LineInput」で、20文字目から復改行まで20文字(+2文字)読み込み、 Seekポイントを+22して42に変更。 ・・・と続きます。

ko--kun
質問者

お礼

返答ありがとうございます。 seek関数というものがあるとは知りませんでした。 今勉強している本が入門編だからか、全く触れていません(T T)。

その他の回答 (1)

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

LineInputがそういう仕様だからとしか言いようがないのですが。

参考URL:
http://msdn2.microsoft.com/ja-jp/library/8e33ddk1(VS.80).aspx
ko--kun
質問者

お礼

ありがとうございます。

関連するQ&A

  • 文字コードについて

    特定のコードを指定して保存してみましたが、文字列を読み込めません。 どうしたら、読み込めるようになるかを教えてください。例えば、 FileOpen(FreeFile(), FileName, OpenMode.Output) Print(Filenum, Chr(150)) FileClose() というような具合で保存すると、文字列を読み込んでコードを表示しても0になります。 よろしくお願いします。

  • VB2005でのファイル操作について

        Dim filedata As String Dim fileNum As Integer Dim fileName As String Dim i As Integer fileName = "C:\Paradata.txt" fileNum = FreeFile() FileOpen(fileNum, fileName, OpenMode.Output) For i = 0 To 9 filedata = data(i, 0) & "," & data(i, 1)・・・・・ PrintLine(fileNum, filedata) Next FileClose あるボタンを押しますと上記のようにテキストファイルにデータを保存しようとしているのですが、1回目のボタンクリックではエラーが無いのですが2回目以降は"別のプロセスで使用されているため、プロセスはファイル 'C:\Paradata.txt' にアクセスできません。"のエラーが発生してしまいます。いろいろと調べているのですがまだわからないのでどこがおかしいか教えてください。よろしくお願い致します。

  • Do文を使い方について

    以下のようにループ内で2回ほど変数を更新したいのですが、追加情報 : ファイルにこれ以上データがありません。とエラーが出ます。どのように修正したら良いでしょうか? 'login.CSVファイルを開く FileNo = 1 FileOpen(FileNo, fileName, OpenMode.Input) 'logout.CSVファイルを開く FileNum = 2 FileOpen(FileNum, fileName2, OpenMode.Input) Do Until EOF(1) Do Until EOF(2) 'ファイルから読み込んだ内容を変数に保存する() 'login変数() Input(FileNo, setD1) Input(FileNo, setD2) Input(FileNo, setD3) Input(FileNo, setD4) 'logout変数() Input(FileNum, setDa) Input(FileNum, setDb) Input(FileNum, setDc) Input(FileNum, setDd) 'log表示() Debug.WriteLine(setD1) Debug.WriteLine(setD2) Debug.WriteLine(setD3) Debug.WriteLine(setD4) 'logout表示() Debug.WriteLine(setDa) Debug.WriteLine(setDb) Debug.WriteLine(setDd) Input(FileNo, setD1) Input(FileNo, setD2) Input(FileNo, setD3) Input(FileNo, setD4) Debug.WriteLine(setD1) Debug.WriteLine(setD2) Debug.WriteLine(setD4) Loop Loop の用に組んでみたのですが…初心者ですみませんがお願いします。

  • VBで複数のテキストを結合するときの問題

    教えてください!お願いします。 VB6を使って、複数のテキストファイル(~.txtで保存しているもの)を 一つずつ読み込んで、それらを結合して1つのファイルにして リッチテキストボックスに表示する、というツールを作成しています。 一応うまく出来たのですが、ただ、結合した時にそれぞれのテキストの 間にどうしても1行ブランクが入ってしまうんです。 このブランク行を削除して、結合したファイルの継ぎ目がきれいに 続いて表示されるようにする方法はありますでしょうか? ブランク行を全て削除してしまうのではなく、ファイルとファイルの 間に挿入されてしまうブランク行だけをなくしたいのです。 ちなみに Open App.Path & "\" & List1.List(List1.ListIndex) For Input As #FileNum Do Until EOF(FileNum) Line Input #FileNum, ddd gggg = gggg & ddd & vbCrLf Loop Close #FileNum このようにリストに載っているテキストファイルを全部読み込んで、 If Dir(書き出すテキストファイル) = "" Then Open 書き出すテキストファイル For Output As #FileNum Print #FileNum, gggg Close #FileNum Else Open 書き出すテキストファイル For Append As #FileNum Print #FileNum, gggg Close #FileNum End If 書き出すファイルが存在しなければそのまま保存し、書き出すファイルが あれば、そのファイルに追記するというコードにしています。

  • 文字列の出力で

    はじめまして、vb.netの初心者です。 テキストファイルの作成で下記のようにした場合 FileOpen(1, FileName, OpenMode.Output) Writeline(1,"AAAA")   FileClose(1) "AAAA"と文字列が出力されるところを の""を外して AAAA と出力指定のですが何か良い方法はないでしょうか? よろしくお願い致します。m(_ _)m

  • インデックスが配列の境界外です。というメッセージ

    連立方程式を解くプログラムにおいて、連立方程式の解をテキストファイルに記録する作業を行うために以下のようにしました。 [連立方程式のPAD] Dim File As Integer File = FreeFile() FileOpen(File, "ABC.txt", OpenMode.Output) Dim i As Integer For i = 0 To N_i - 1 WriteLine(File, b_data(i)) Next i FileClose(File) End Sub すると、「インデックスが配列の境界外です」とエラーメッセージが出てしまいました。理由がまったく分かりません。 どなたかご回答よろしくお願いします。

  • ダブルクォーテーション付きの文字列を含むファイルを読み込む方法?

    Visual Basic 2008 Express Editionを使用しています。 IE上の範囲選択のHTMLテキストをテキストファイルに保存しています。 保存日時(Date型):time "文字列":moji のように保存しています。 FileOpen(n, "Data.dat", OpenMode.Append)  WriteLine(n, time, moji) ~保存されたファイルの例~ #2008-08-31 10:21:05# , "この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームが表示されます。通常のご質問、ご意見等は<A href=""/vb/bbs/index.html"">掲示板</A>へご投稿ください。 " このファイルを以下のように読み込もうとしています。 FileOpen(n, "Data.dat", OpenMode.Input) Do While Not EOF(n) Input(n, time) Input(n, moji) TextBox1.Text += vbCrLf & time & vbCrLf & moji & vbCrLf Loop  ところが、HTMLの文字配列の中には、<a href="" http://・・・・ "">のようにダブルクォーテーションが含まれています。ダブルクォーテーションが2つなら、文字列として扱ってもらえると思っていましたが、文字列の終了位置として認識してしまうようです(エラーの内容から判断しました。) ダブルクォーテーションを含む文字列の場合どのように処理したらよいでしょうか?

  • ファイルの存在の確認をする方法

    こんにちは。 VB.netでプログラミングしているんですが、ファイル処理について質問があります。ファイルを保存する際に、よく「すでにファイルが存在します。上書きしますか?」と聞いてきますよね。これを実現するにはどんな方法があるでしょうか?ただし、コモンダイアログは使いません。FileOpen、FileCloseで実現したいのです。 以下のプログラムをどのように変えたらいいでしょうか?ご教授お願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   FileOpen(1, Format(Now, "yyyyMMdd") & " .txt", OpenMode.Output)   PrintLine(1, "test")   FileClose(1) End Sub

  • 複数のtextBoxに読み込んだデータを表示する。

    初めまして。 Visual C++ 2008 Express Edition を使って勉強しています。 今下記のように、1行を読み込んでその都度textBoxに表示していくようにしています。 String ^ b = br->ReadLine(); textBox1->Text = b; b = br->ReadLine(); textBox2->Text = b; b = br->ReadLine(); textBox3->Text = b; b = br->ReadLine(); textBox4->Text = b; b = br->ReadLine(); textBox5->Text = b; これをもっと、簡潔に記述できないでしょうか? String ^ b; for(i=1; i<6; i++){ b = br->ReadLine(); textBox(i)->Text = b; } という気持ちになるのですが。。。どうしたら良いでしょうか? よろしくお願いいたします。

  • VB2008 2バイト文字の化け字は当然! Yes or No?

    Function FileGetChar(ByVal f As String, ByVal p As Integer) As String   Dim n As Integer = FreeFile()   Dim c As Char = “”   If File.Exists(f) Then     FileOpen(n, f, OpenMode.Random, OpenAccess.Read, , 1)     Seek(n, p)     If Not EOF(n) Then       FileGet(n, c)     End If     FileClose(n)   End If   Return c End Function このようにSeek関数とFileGet関数を利用する限りでは2バイト文字の化け字は避けられない! 一体、この私の判断は正しいのでしょうか? VB2008 Express Edition