Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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. Bir dosyayı işlerken, satırları ayrıştırdığınızda her bir satırın biçimini belirlemek için PeekChars yöntemini kullanabilirsiniz; böylece birden fazla biçime sahip olabilirsiniz.
Birden çok biçime sahip bir metin dosyasını ayrıştırmak için
Projenize testfile.txt adlı bir metin dosyası ekleyin. Metin dosyasına aşağıdaki içeriği ekleyin:
Err 1001 Cannot access resource. Err 2014 Resource not found. Acc 10/03/2009User1 Administrator. Err 0323 Warning: Invalid access attempt. Acc 10/03/2009User2 Standard user. Acc 10/04/2009User2 Standard user.Beklenen biçimi ve hata bildirildiğinde kullanılan biçimi tanımlayın. Her dizideki son girdi -1'dir, bu nedenle son alanın değişken genişlikte olduğu varsayılır. Dizideki son girdi 0'dan küçük veya buna eşit olduğunda bu durum oluşur.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}Genişliği ve biçimi tanımlayan yeni TextFieldParser bir nesne oluşturun.
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = stdFormatOkumadan önce biçimi test ederek satırlar arasında döngü yapın.
Dim currentRow As String() While Not MyReader.EndOfData Try Dim rowType = MyReader.PeekChars(3) If String.Compare(rowType, "Err") = 0 Then ' If this line describes an error, the format of the row will be different. MyReader.SetFieldWidths(errorFormat) Else ' Otherwise parse the fields normally MyReader.SetFieldWidths(stdFormat) End If currentRow = MyReader.ReadFields For Each newString In currentRow Console.Write(newString & "|") Next Console.WriteLine()Hataları konsola yaz.
Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Örnek
Aşağıda dosyasından testfile.txtokunan tam örnek verilmiştir:
Dim stdFormat As Integer() = {5, 10, 11, -1}
Dim errorFormat As Integer() = {5, 5, -1}
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt")
MyReader.TextFieldType = FileIO.FieldType.FixedWidth
MyReader.FieldWidths = stdFormat
Dim currentRow As String()
While Not MyReader.EndOfData
Try
Dim rowType = MyReader.PeekChars(3)
If String.Compare(rowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different.
MyReader.SetFieldWidths(errorFormat)
Else
' Otherwise parse the fields normally
MyReader.SetFieldWidths(stdFormat)
End If
currentRow = MyReader.ReadFields
For Each newString In currentRow
Console.Write(newString & "|")
Next
Console.WriteLine()
Catch ex As FileIO.MalformedLineException
MsgBox("Line " & ex.Message & " is invalid. Skipping")
End Try
End While
End Using
Console.ReadLine()
Sağlam programlama
Aşağıdaki koşullar bir özel 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.