次の方法で共有


方法 : Visual Basic で固定幅のテキスト ファイルを読み取る

TextFieldParser オブジェクトを使用すると、ログなどの構造化されたテキスト ファイルを簡単かつ効率的に解析できます。

TextFieldType プロパティでは、解析対象のファイルが区切り記号入りファイルと固定幅のテキスト フィールドを持つファイルのどちらであるかを定義します。 固定幅のテキスト ファイルでは、最後のフィールドを可変幅にすることができます。 最後のフィールドが可変幅であることを指定するには、そのフィールドの幅を 0 以下として定義します。

固定幅のテキスト ファイルを解析するには

  1. 新しい TextFieldParser を作成します。 次のコードは、Reader という名前の TextFieldParser を作成し、test.log ファイルを開きます。

    Using Reader As New Microsoft.VisualBasic.
        FileIO.TextFieldParser("C:\TestFolder\test.log")
    
  2. TextFieldType プロパティを FixedWidth として定義し、幅と形式を定義します。 次のコードは、テキストの列を定義します。最初は幅が 5 文字、その次は 10、その次は 11、その次は可変幅です。

    Reader.TextFieldType =
    Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    
  3. ファイル内の各フィールドをループします。 破損している行がある場合は、エラーを報告し、解析を続けます。

    Dim currentRow As String()
       While Not Reader.EndOfData
          Try
             currentRow = Reader.ReadFields()
             Dim currentField As String 
             For Each currentField In currentRow
                MsgBox(currentField)
             Next 
          Catch ex As Microsoft.VisualBasic.
                      FileIO.MalformedLineException
             MsgBox("Line " & ex.Message &
             "is not valid and will be skipped.")
     End Try
    
  4. While ブロックと Using ブロックを End While と End Using で閉じます。

       End While 
    End Using
    

使用例

この例では、test.log ファイルを読み取ります。

Using Reader As New Microsoft.VisualBasic.FileIO.
   TextFieldParser("C:\TestFolder\test.log")

   Reader.TextFieldType =
      Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
   Reader.SetFieldWidths(5, 10, 11, -1)
   Dim currentRow As String()
   While Not Reader.EndOfData
      Try
         currentRow = Reader.ReadFields()
         Dim currentField As String 
         For Each currentField In currentRow
            MsgBox(currentField)
         Next 
      Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
         MsgBox("Line " & ex.Message &
         "is not valid and will be skipped.")
      End Try 
   End While 
End Using

信頼性の高いプログラミング

次の条件を満たす場合は、例外が発生する可能性があります。

  • 指定の書式を使用して行を解析できない (MalformedLineException)。 例外メッセージは、例外が発生した行を表し、ErrorLine プロパティには、行内のテキストが割り当てられる。

  • 指定のファイルが存在しない (FileNotFoundException)。

  • 部分信頼の状況で、ファイルにアクセスするための十分なアクセス許可がユーザーにない。 (SecurityException).

  • パスが長すぎる (PathTooLongException)。

  • ユーザーがファイルにアクセスするのに必要なアクセス許可がない (UnauthorizedAccessException)。

参照

処理手順

方法 : Visual Basic でコンマ区切りのテキスト ファイルを読み取る

方法 : Visual Basic で複数の書式を持つテキスト ファイルを読み取る

チュートリアル : Visual Basic によるファイルとディレクトリの操作

トラブルシューティング: テキスト ファイルの読み取りと書き込み (Visual Basic)

例外のトラブルシューティング : Microsoft.VisualBasic.FileIO.TextFieldParser.MalformedLineException

関連項目

TextFieldParser

概念

TextFieldParser オブジェクトによるテキスト ファイルの解析 (Visual Basic)