
Lecture d’un fichier texte « plus ou moins formaté » comme dans l’exemple ci-dessous, permet de récupérer les données pour un traitement ultérieur.
Il est possible par exemple de les stocker dans une base de données.
Pour utiliser la fonction ci-dessous, il faut passer en paramètre le nom du répertoire, le nom du fichier puis le caractère de séparation. Avec le fichier ci-dessus on utilisera le caractère « | ».
La fonction réalise la lecture du fichier ligne par ligne en ne prenant que les lignes qui contiennent le caractère choisi.
Public Function Lecture_fichier_extraction(nom_repertoire As String, nom_fichier As String, Car_sep As String) As Boolean
Try
If File.Exists(nom_repertoire & nom_fichier) Then
Ecrire_Log("Lecture_fichier_extraction", "Début" & " - " & nom_repertoire & nom_fichier & " (SEP: " & Car_sep & " )")
Dim monStreamReader As StreamReader = New StreamReader(nom_repertoire & nom_fichier, System.Text.Encoding.Default)
Dim NextLine As String
Dim Colonnes() As String
Dim Date_fichier As String = File.GetLastWriteTime(nom_repertoire & nom_fichier)
Colonnes = Split(Date_fichier, Chr(32))
Date_fichier_txt = Colonnes(0)
NombredeLigne = 0
ReDim LignesFichierTexte(NombredeLigne)
Do
NextLine = monStreamReader.ReadLine()
If NextLine <> vbNullString Then
If InStr(1, NextLine, Car_sep, 1) Then
NombredeLigne = NombredeLigne + 1
ReDim Preserve LignesFichierTexte(NombredeLigne)
LignesFichierTexte(NombredeLigne) = NextLine
End If
End If
Loop Until NextLine Is Nothing
monStreamReader.Close()
Ecrire_Log("Lecture_fichier_extraction", "Fin" & " - " & nom_repertoire & nom_fichier)
Return True
Else
Ecrire_Log("Lecture_fichier_extraction", "Pas de fichier" & " - " & nom_repertoire & nom_fichier)
Return False
End If
Catch ex As Exception
Afficher_message_status(ex.Message)
Ecrire_Log("Lecture_fichier_extraction : ERREUR - " & nom_repertoire & nom_fichier, ex.Message)
Return False
End Try
End Function
La fonction suivante supprime les lignes qui ne seront pas nécessaire.
En résumé on réalise la lecture du fichier avec la fonction « Lecture_fichier_extraction » puis on supprime les lignes en trop avec la fonction « Suppression_lignes_fichier_extraction » avec 5 mots clef.
Dans notre cas on utilise la fonction comme ceci :
Suppression_lignes_fichier_extraction(« Usage », « state », « -|-« , « », « », « »)
Public Sub Suppression_lignes_fichier_extraction(mot1 As String, mot2 As String, mot3 As String, mot4 As String, mot5 As String, mot6 As String)
Dim Tab_filtre() As String
Dim nb_ligne_filtre As Long
Dim b_filtre As Boolean
nb_ligne_filtre = 0
ReDim Tab_filtre(nb_ligne_filtre)
For i = 1 To NombredeLigne
b_filtre = False
If LignesFichierTexte(i) <> vbNullString Then
'Ne pas prendre les lignes avec les mots suivants
If mot1 <> "" And InStr(LignesFichierTexte(i), mot1, vbTextCompare) Then
b_filtre = True
End If
If mot2 <> "" And InStr(LignesFichierTexte(i), mot2, vbTextCompare) Then
b_filtre = True
End If
If mot3 <> "" And InStr(LignesFichierTexte(i), mot3, vbTextCompare) Then
b_filtre = True
End If
If mot4 <> "" And InStr(LignesFichierTexte(i), mot4, vbTextCompare) Then
b_filtre = True
End If
If mot5 <> "" And InStr(LignesFichierTexte(i), mot5, vbTextCompare) Then
b_filtre = True
End If
If mot6 <> "" And InStr(LignesFichierTexte(i), mot6, vbTextCompare) Then
b_filtre = True
End If
'Prendre en compte les lignes suivantes
If b_filtre = False Then
nb_ligne_filtre += 1
ReDim Preserve Tab_filtre(nb_ligne_filtre)
Tab_filtre(nb_ligne_filtre) = LignesFichierTexte(i)
End If
End If
Next
NombredeLigne = nb_ligne_filtre
ReDim LignesFichierTexte(NombredeLigne)
LignesFichierTexte = Tab_filtre
End Sub
Le but étant d’obtenir le résultat suivant.

Il est alors beaucoup plus simple de traiter les lignes restantes, via la commande « Split », qui permet de découpé la ligne en plusieurs morceaux.
Dim colonnes() As String
colonnes = Split(LignesFichierTexte(i), "|")
Tab_CARTES(j).param.ACT = colonnes(1).Trim
Tab_CARTES(j).param.CPL = colonnes(2).Trim
Tab_CARTES(j).param.TYP = colonnes(3).Trim
Tab_CARTES(j).param.ETA = colonnes(4).Trim
Tab_CARTES(j).param.VER = colonnes(5).Trim
If Tab_CARTES(j).param.ACT = 19 Then
Tab_CARTES(j).param.VIR = 1
Else
Tab_CARTES(j).param.VIR = 0
End If
Astuce ; En rajoutant « .Trim » on supprime les espaces avant et après la chaîne de caractères.
Poster un Commentaire