Comment : lire des fichiers texte avec plusieurs formats dans Visual Basic
L'objet TextFieldParser permet d'analyser facilement et efficacement les fichiers texte structurés, tels que les journaux. Vous pouvez traiter un fichier à plusieurs formats à l'aide de la méthode PeekChars pour déterminer le format de chaque ligne à mesure que vous analysez le fichier.
Pour analyser un fichier texte avec plusieurs formats
Ajoutez un fichier texte nommé testfile.txt à votre projet. Ajoutez le contenu suivant au fichier texte.
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.
Définissez le format attendu et le format utilisé lorsqu'une erreur est signalée. La dernière entrée dans chaque tableau étant -1, le champ est supposé être à largeur variable. Cela se produit lorsque la dernière entrée dans le tableau est inférieure ou égale à 0.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}
Créez un objet TextFieldParser en définissant la largeur et le format.
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = stdFormat
Parcourez les lignes en testant le format avant la lecture.
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()
Écrivez les erreurs dans la console.
Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Exemple
Voici l'exemple complet qui lit le fichier testfile.txt.
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()
Programmation fiable
Les conditions ci-dessous peuvent générer une exception.
Une ligne ne peut pas être analysée avec le format spécifié (MalformedLineException). Le message d'exception spécifie la ligne qui provoque l'exception, tandis que la propriété ErrorLine est assignée au texte contenu dans la ligne.
Le fichier spécifié n'existe pas (FileNotFoundException).
Une situation de niveau de confiance partiel dans laquelle l'utilisateur n'a pas les autorisations suffisantes pour accéder au fichier. (SecurityException).
Le chemin d'accès est trop long (PathTooLongException
L'utilisateur n'a pas les autorisations suffisantes pour accéder au fichier (UnauthorizedAccessException).
Voir aussi
Tâches
Comment : lire des fichiers texte délimités par des virgules dans Visual Basic
Comment : lire des fichiers texte de largeur fixe dans Visual Basic
Référence
Microsoft.VisualBasic.FileIO.TextFieldParser
Concepts
Analyse des fichiers texte avec l'objet TextFieldParser (Visual Basic)
Historique des modifications
Date |
Historique |
Motif |
Janvier 2011 |
Ajout d'informations sur les champs à largeur variable. |
Commentaires client. |