[Code Source] Lecture d’un fichier texte ligne par ligne (plus ou moins formaté), et récupération des données

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.

Soyez le premier à commenter

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.