• ベストアンサー

テキストファイルを正常に取込するには?初心者です

下記の様なテキストファイルを配列に取込したいのですが、ファイル読込み途中で「これ以上ファイルが有りません」エラーとなります。どうしたらよいでしょうか? ちなみに配列は(14,100)としています。 【読込みしたいテキスト文】改行に↑が入ります 000002,0,0010,,,ABCDEFG,,,00000010,,,,,060420 000004,0,0010,,0,HIJKLMN,000,497009014866,00000550,020201,0000,000,000400,060420 【フォームロード時に取込む】 Private Sub Form_Load() If Dir(POPFile) = "" Then 'ファイルの存在チェック 'ファイルが無い NewData '変数の初期設定と画面の表示 TargetRec = 1 MaxRec = 0 lblRec.Caption = "1/新規" Else MaxRec = 0 'ファイルが在るのでデータを読み込む Open POPFile For Input As #1 Do Until EOF(1) MaxRec = MaxRec + 1 Input #1, POP(1, MaxRec) Input #1, POP(2, MaxRec) Input #1, POP(3, MaxRec) Input #1, POP(4, MaxRec) Input #1, POP(5, MaxRec) Input #1, POP(6, MaxRec) Input #1, POP(7, MaxRec) Input #1, POP(8, MaxRec) Input #1, POP(9, MaxRec) Input #1, POP(10, MaxRec) Input #1, POP(11, MaxRec) Input #1, POP(12, MaxRec) Input #1, POP(13, MaxRec) Input #1, POP(14, MaxRec) Loop Close #1

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>改行に↑が入ります ということなので、改行コードがLFになっているのでしょう。 nkf とかのツールを使って変換してから処理すればどうですか nkf -SsLwO original.txt convert.txt

drgubu
質問者

お礼

ご返答有難う御座います。 nkf ツールを使用し 改行コードを変換してから処理するようにしました。 無事成功です。

すると、全ての回答が全文表示されます。

その他の回答 (4)

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

#1のお礼に関して (1)レコードの終わりはvbCRLFでないのかもしれない。 UNIX、MAC起源のデータではそういうことがあると聞いています (2)Splitした後のループは0から初めて下さってますか (3)フィールド数は全レコードで同じでしょうか (4)全レコードを読みレコードセパレータ文字列でSplitして レコードそのものを、ユーザー側で切り出さないかも知れないですね。#4のご回答はそれ?

すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.4

次は、Text.txt を Datas()に読み込むコードサンプルです。 Dim Datas() As String IF FikeExists("Test.txt") Then   Datas()=FileReadArray("Text.txt") End If Public Function FileExists(ByVal FileName As String) As Boolean   Dim fso As FileSystemObject      Set fso = New FileSystemObject   FileExists = fso.FileExists(FileName) End Function Public Function FileReadArray(ByVal FileName As String) As String() On Error GoTo Err_FileReadArray    Dim fso    As FileSystemObject    Dim fil    As File    Dim txs    As TextStream    Dim strText  As String    Dim strTexts() As String       Set fso = New FileSystemObject    Set fil = fso.GetFile(FileName)    Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)    strText = txs.ReadAll    strTexts = Split(strText, Chr$(13) & Chr$(10)) Exit_FileReadArray:    FileReadArray = strTexts()    Exit Function Err_FileReadArray:    MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"    strTexts() = Split("")    Resume Exit_FileReadArray End Function

すると、全ての回答が全文表示されます。
回答No.3

あなたのプログラムでは、データー数が14の倍数でない かぎりエラーになりますね。 エラートラップしたらいかがですか? Open POPFile For Input As #1 On Error GOTO Pass1 Do Until EOF(1) MaxRec = MaxRec + 1 Input #1, POP(1, MaxRec) Input #1, POP(2, MaxRec) ・ ・ ・ Input #1, POP(14, MaxRec) Loop Pass1: Close #1

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

Line INPUT#で読み込みむ。すると1回でvbCrLfまでのデータ(1レコード分)を読み込み、変数A(名前は何でも良い)に読み込まれます(vbCrLfは含まず). Split関数を使い、 s=split(A,",")で、s(0)、s(1),..に文字列のデータがセットされます。0からUbound(s)まで繰り回せば、それぞれのフィールドデータが捕まえられます。バリアント型です。

drgubu
質問者

お礼

参考になりました。有難う御座います。 Split関数で1行(14項目)分のデータを捕まえましたが、改行コードが上手く変換されず「2行目の1項目」が一緒に取得されてしまいます。 イメージは下記です。 【読込みしたいテキスト文】改行に↑が入ります 000002,0,0010,,,ABCDEFG,,,00000010,,,,,060420 000004,0,0010,,0,HIJKLMN,000,497009014866,00000550,020201,0000,000,000400,060420 【デバックプリントの内容】 000002 0010 ABCDEFG 00000010 060420 000004 最終行の「000004」は2行目の1項目目です。 ↑改行コードはどの様に処理すればよいでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A