Aracılığıyla paylaş


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 bir TextFieldParseroluşturun. Aşağıdaki kod TextFieldParser adlı Reader oluşturur ve dosya test.log'yı aç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 gezin. 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 Using bloklarını End While ve End Using ile kapatın.

        End While
    End Using
    

Örnek

Bu örnek test.log dosyasını okur.

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 bir özel duruma neden olabilir:

Ayrıca bakınız