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
Yeni
TextFieldParser
bir oluşturun. Aşağıdaki kod adlıReader
öğesiniTextFieldParser
oluşturur ve dosyasınıtest.log
açar.Using Reader As New Microsoft.VisualBasic. FileIO.TextFieldParser("C:\TestFolder\test.log")
TextFieldType
özelliğini olarakFixedWidth
tanı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)
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
While
ve ile veUsing
bloklarınıEnd While
End Using
kapatın.End While End Using
Örnek
Bu örnek dosyasından test.log
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 özel bir duruma neden olabilir:
Bir satır, belirtilen biçim (MalformedLineException ) kullanılarak ayrıştırılamaz. Özel durum iletisi özel duruma neden olan satırı belirtirken ErrorLine , özellik satırda yer alan metne atanır.
Belirtilen dosya yok (FileNotFoundException ).
Kullanıcının dosyaya erişmek için yeterli izinlere sahip olmadığı kısmi güven durumu. (SecurityException).
Yol çok uzun (PathTooLongException).
Kullanıcının dosyaya (UnauthorizedAccessException ) erişmek için yeterli izinleri yok.
Ayrıca bkz.
- Microsoft.VisualBasic.FileIO.TextFieldParser
- Nasıl Yapılır: Virgülle Ayrılmış Metin Dosyalarından Okuma
- Nasıl Yapılır: Birden Çok Biçimli Metin Dosyalarından Okuma
- TextFieldParser Nesnesiyle Metin Dosyalarını Ayrıştırma
- İzlenecek yol: Visual Basic'te Dosyaları ve Dizinleri Düzenleme
- Sorun Giderme: Metin Dosyalarını Okuma ve Yazma