Nasıl yapılır: Visual Basic'te sabit genişlikli metin dosyalarından okuma

TextFieldParser nesnesi, günlükler gibi yapılandırılmış metin dosyalarını kolayca ve verimli bir şekilde ayrıştırmak için bir yol sağlar.

özelliği, TextFieldType ayrıştırılan dosyanın sınırlandırılmış bir dosya mı yoksa sabit genişlikli metin alanları olan bir dosya mı olduğunu tanımlar. Sabit genişlikli bir metin dosyasında, sonundaki alanın genişliği değişken olabilir. Sonundaki alanın değişken genişliği olduğunu belirtmek için, sıfırdan küçük veya sıfıra eşit bir genişliğe sahip olacak şekilde tanımlayın.

Sabit genişlikli metin dosyasını ayrıştırmak için

  1. Yeni TextFieldParserbir oluşturun. Aşağıdaki kod adlı Reader öğesini TextFieldParser oluşturur ve dosyasını test.logaçar.

    Using Reader As New Microsoft.VisualBasic.
        FileIO.TextFieldParser("C:\TestFolder\test.log")
    
  2. TextFieldType özelliğini olarak FixedWidthtanımlayın, genişliği ve biçimi tanımlayın. Aşağıdaki kod metin sütunlarını tanımlar; birincisi 5 karakter genişliğinde, ikinci 10, üçüncü 11 ve dördüncüsü değişken genişliktedir.

    Reader.TextFieldType =
    Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    
  3. Dosyadaki alanlarda döngü yapın. Herhangi bir satır bozuksa bir hata bildirin ve ayrıştırma işlemine devam edin.

    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 ve ile ve Using bloklarını End WhileEnd Usingkapatın.

        End While
    End Using
    

Örnek

Bu örnek dosyasından test.logokur.

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

Sağlam programlama

Aşağıdaki koşullar özel bir duruma neden olabilir:

Ayrıca bkz.