IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème lecture fichier texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Par défaut Problème lecture fichier texte
    Bonjour à tous
    Je travaille sur une analyse de fichiers journaux qui contiennent des données que je dois extraire sous Excel pour les analyser.
    J'ai développé un bout de code pour ouvrir le fichier journal (environ 10 000 lignes si je l'ouvre avec Ultra Edit ou Bloc Notes) et lancer une analyse ligne par ligne sur une recherche de caractère pour extraire les données qui m'intéressent.
    Mon problème est que je vois 255 lignes dans une seule valeur:

    Voici ce que je vois avec ultra edit:

    JOURNAL CREE LE 16/03/2016 A 10:29:45
    ---------------------------------------
    ---------------------------------------
    AB.0455 16/03/2016 10:29:52 MOBI 836105
    Mon bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Open Filename For Input As #1
           While Not EOF(1)
                 Input #1, Valeur_ligne
                         mon code pour analyser Valeur_ligne et extraire les valeurs
           Wend
    et voici ce que je lis dans ma Valeur_ligne:
    JOURNAL CREE LE 16/03/2016 A 10:29:45 --------------------------------------- --------------------------------------- AB.0455 16/03/2016 10:29:52 MOBI 836105
    J'ai également essayé avec une autre méthode ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set oFSO = New Scripting.FileSystemObject
                Set oFl = oFSO.GetFile(Filename)
                Set oTxt = oFl.OpenAsTextStream(ForReading)
                With oTxt
                    While Not .AtEndOfStream
                        MsgBox .ReadLine
                    Wend
                End With
    Dans ce cas je lis bien qu'une ligne sur .readLine mais qui change à chaque ligne de code, c'est à dire que dans MsgBox .ReadLine, il affiche bien "JOURNAL CREE LE 16/03/2016 A 10:29:45" mais quand en pas à pas, je passe à la ligne Wend, la valeur a changé et la valeur de .ReadLine est devenue "---------------------------------------" ci bien que je ne peux pas faire d'analyse...

    Si vous avez une idée du pourquoi, ça m'intéresse.
    Merci d'avance

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    salut
    texte exemple
    Voici ce que je vois avec ultra edit:
    JOURNAL CREE LE 16/03/2016 A 10:29:45
    ---------------------------------------
    ---------------------------------------
    AB.0455 16/03/2016 10:29:52 MOBI 836105
    la sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub testlecture()
    Dim laChaine As String, x, fichier As String
    fichier = "C:\Users\polux\Desktop\test2.txt"
    x = FreeFile
     Open fichier For Binary Access Read As #x
            laChaine = String(LOF(x), " ")
            Get #x, , laChaine
     
    Close #x
     tableau = Split(laChaine, vbCrLf)
    For i = 0 To UBound(tableau)
    MsgBox tableau(i)
     
    'TON CODE ICI
     
    Next
    End Sub
    normalement chaque msgbox t'affiche une ligne
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Par défaut Fonctionne pas...
    Citation Envoyé par patricktoulon Voir le message
    salut
    texte exemple


    la sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub testlecture()
    Dim laChaine As String, x, fichier As String
    fichier = "C:\Users\polux\Desktop\test2.txt"
    x = FreeFile
     Open fichier For Binary Access Read As #x
            laChaine = String(LOF(x), " ")
            Get #x, , laChaine
     
    Close #x
     tableau = Split(laChaine, vbCrLf)
    For i = 0 To UBound(tableau)
    MsgBox tableau(i)
     
    'TON CODE ICI
     
    Next
    End Sub
    normalement chaque msgbox t'affiche une ligne
    Merci pour la réponse mais cela ne fonctionne pas.

    Dans le MsgBox, je n'ai pas l'affichage ligne par ligne mais comme avant les 34 premières lignes en une fois.

    Est-on obligé de passer par un tableau? N'y a t-il pas un moyen de lire ligne par ligne ou d'ouvrir le fichier avec ultraedit pour garder le format?

    J'ai créé un tableau txt avec notepad pour test et cela fonctionne donc je pense que c'est le format de fichier qui est différent du standard.
    Je précise que ces fichiers txt sont créés par un PC dont je ne suis pas sûr que le format de retour de ligne soit le chariot.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Citation Envoyé par sevoli Voir le message
    Mon problème est que je vois 255 lignes dans une seule valeur
    C'est pourtant simple : quel est donc la séquence de fin de ligne du fichier texte ?‼
    Facile de le vérifier pourtant avec UltraEdit ou encore Notepad++ …

    Voilà, Voilà !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Il s'agit là très probablement d'un fichier structuré (toutes les données à la suite sur une seule ligne).
    D'où provient-il ? Quelle en est la structure (variable personnalisée) et ses membres ?

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Non car il arrive à le lire ligne par ligne via FileSystemObject !
    (au passage là aussi pour l'analyse avec FSO c'est encore une erreur de logique, de conception …)

    C'est juste qu'il n'a certainement pas vérifié la séquence de fin de ligne !
    Et avec l'instruction Open il est simple d'effectuer une ouverture universelle d'un fichier texte comme FSO
    en affectant directement les lignes dans une variable tableau à des fins d'analyse ou de traitement …

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    ca arrive de temps en temps sur certains fichiers
    dans Notepad ou autre on voit les saut de ligne mais si on récupère le texte par open ou fso on les a plus
    essaie mon exemple en y ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lachaine=replace(lachaine,vbtab,vbcrlf)
    comme tu risque d'avoir beaucoup de ligne blanche
    dans la boucle sur le tableau tu met la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if tableau(i) like"[a-z-0-9]" then
    tu peut aussi essayer avec chr(10) ou chr(13) a la place de vbtab


    résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub testlecture()
    Dim laChaine As String, x, fichier As String
    fichier = "C:\Users\polux\Desktop\test2.txt"
    x = FreeFile
     Open fichier For Binary Access Read As #x
            laChaine = replace(String(LOF(x), " "),vbtab,vbcrlf)
            Get #x, , laChaine
     
    Close #x
     tableau = Split(laChaine, vbCrLf)
    For i = 0 To UBound(tableau)
     if tableau(i) like"[a-z-0-9]" then 
    MsgBox tableau(i)
     
    'TON CODE ICI
     
    Next
    End Sub
    un truc a essayer aussi c'est le mode d'ouverture

    ici la même base en mode input


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub testlecture2()
    Dim laChaine As String, x, fichier As String
    fichier = "C:\Users\polux\Desktop\test2.txt"
    x = FreeFile
     Open fichier For Input As #x
          laChaine = Input(LOF(x), #x)
      Close #x
      MsgBox laChaine
     
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour à tous.

    Workbooks.Open est performant pour lire ce genre de fichier séquentiel problématique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub CreerUnFichierProbleme()
    ReDim a(5)
    i = i + 1: a(i) = "Voici ce que je vois avec ultra edit:"
    i = i + 1: a(i) = "JOURNAL CREE LE 16/03/2016 A 10:29:45"
    i = i + 1: a(i) = "---------------------------------------"
    i = i + 1: a(i) = "---------------------------------------"
    i = i + 1: a(i) = "AB.0455 16/03/2016 10:29:52 MOBI 836105"
     
    fich = "Test.txt"
    Open fich For Output As #1
    For i = 1 To 5
     Print #1, a(i); Chr(10);
    Next
    Print #1, ""
    For i = 1 To 5
     Print #1, a(i); Chr(10);
    Next
    Print #1, ""
    Close
     
    End Sub
    Sub Ouvrir_avec_Open_For_Input()
     
    Cells.ClearContents
     
    fich = "Test.txt"
    Open fich For Input As #1
     While Not EOF(1)
      Line Input #1, a
      i = i + 1
      Cells(i, 1) = a
     Wend
    Close
     
    End Sub
     
    Sub Ouvrir_avec_Workbooks_Open()
     
    fich = "Test.txt"
     
    Set wb = Workbooks.Open(fich, True)
     
    End Sub

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Par défaut Format fichier
    Citation Envoyé par unparia Voir le message
    Bonjour
    Il s'agit là très probablement d'un fichier structuré (toutes les données à la suite sur une seule ligne).
    D'où provient-il ? Quelle en est la structure (variable personnalisée) et ses membres ?

    C'est un fichier journal d'événement d'un appareil électronique qui enregistre les actions et demandes clients (type distributeur de timbres, affranchissement...)
    Toutes les données sont à la suite, il n'y a pas de retour chariot, mais pourquoi ultraedit le fractionne dans ce cas et comment?
    Comment lire et analyser ce type de fichiers? je souhaite récupérer les montants par transactions

    merci d'avance

Discussions similaires

  1. Problème lecture fichier texte
    Par nilsmatlab dans le forum MATLAB
    Réponses: 27
    Dernier message: 22/06/2011, 18h06
  2. Problème lecture fichier texte 315Mo
    Par phoenix420 dans le forum Langage
    Réponses: 9
    Dernier message: 26/05/2010, 10h16
  3. Probléme lecture fichier text.
    Par deppierre dans le forum Windows
    Réponses: 7
    Dernier message: 15/12/2009, 19h11
  4. Problème STL lecture fichier texte
    Par Bourrine dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 03/04/2007, 11h57
  5. [VB.NET]Problème lecture fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/05/2006, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo