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

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    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 379
    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 379
    Points : 12 075
    Points
    12 075
    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
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    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, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    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 ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    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 …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    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

  7. #7
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    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
    Cordialement

    Docmarti.

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    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.

  9. #9
    Candidat au Club
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    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

  10. #10
    Candidat au Club
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Réponse
    Citation Envoyé par Docmarti Voir le message
    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
    Merci pour le code, lorsque je lance la dernière macro (Ouvrir_avec_Workbooks_Open()), il me décompose bien le fichier texte ligne par ligne dans un fichier Excel, j'ai bien 9000 lignes comme affiché avec ultraedit.
    Je ne comprends pas pourquoi mais c'est déjà une piste.
    Dans ce cas, je pourrai analyser mes données s'il n'y a pas d'autres solutions

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    J'aimerais vraiment voir au moins les 240 premiers caractères de ce fichier (obtenus par copié/collé)
    J'aimerais que ces 240 premiers caractères soient présentés ici entre balises code, qui, seules, respectent apparemment les espaces multiples, comme on peut le voir ici :
    alors que les autres "élaguent"
    Je demeure personnellement persuadé de ce que ce fichier est structuré.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Fais un copier/coller du résultat de ce code, afin de voir comment sont structurées tes données.

    EDIT: Bonjour Unparia. Pour avoir 240 caractères au minimum.
    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
     
    Sub Patrick()
    Dim laChaine As String, x, fichier As String
    Cells.ClearContents
    fichier = "Test.txt"
    x = FreeFile
     Open fichier For Binary Access Read As #x
            laChaine = String(LOF(x), " ")
            Get #x, , laChaine
     
    Close #x
    For i = 1 To Len(laChaine)
     
    Cells(i, 1) = Asc(Mid(laChaine, i, 1))
    Cells(i, 1).Offset(, 1) = Mid(laChaine, i, 1)
    If Cells(i, 1) = 13 Then
     nbligne = nbligne + 1
     Cells(i, 1).Offset(, 2) = "Retour chariot"
     End If
    If nbligne >= 2 And i >= 240 Then
    Exit For
    End If
    Next
     
    End Sub
    Cordialement

    Docmarti.

  13. #13
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    à mon avis ton fichier journal est de type unix (les appareils électroniques spécialisés sont souvent à base de linux) donc avec un séparateur de ligne égal à LF et pas au CRLF classique sous windows. Je viens de faire l'expérience de ce type de fichier avec ton code et j'ai le même comportement que toi. Sous Notepad++ on peut voir tous les caractères d'un fichier (dont les CR et LF) en sélectionnant Affichage/Symboles spéciaux/Afficher tous les caractères . Voici ce que l'on voit par exemple :

    Nom : Np++_LF.png
Affichages : 1428
Taille : 3,4 Ko

    Si c'est le cas pour ton fichier, FSO gère bien les fichiers texte unix et pour le problème que tu as avec, il faut passer par une variable intermédiaire comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set oFSO = CreateObject("Scripting.FileSystemObject")
                Set oFl = oFSO.GetFile(Filename)
                'ForReading = 1
                Set oTxt = oFl.OpenAsTextStream(1)
                With oTxt
                    While Not .AtEndOfStream
                        ' variable intermédiaire ligne
                        ligne = .ReadLine
                        MsgBox ligne
                        ' exploitation de ligne
                        ' ---------
                    Wend
                End With
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  14. #14
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Docmarti
    Ta démarche tend à repérer l'existence éventuelle d'un caractère de séparation.
    - Un fichier structuré n'en comporte pas
    - si le caractère 13 avait été présent seul, l'utilisation du bloc-notes l'aurait fait ressortir (sous la forme d'un petit carré). Idem si caractère 10 suivi du caractère 13 (2 carrés)
    - si le caractère 13 avait été suivi du caractère 10, l'utilisation du bloc-notes aurait fait apparaître un saut de ligne

    Ma demande des au moins 240 premiers caractères par copier/coller et entre balises codes n'est pas "gratuite". Leur examen me permettra peut-être de déterminer l'existence éventuelle d'une structure, le nombre de ses membres, leur type et leur longueur. Je me dis que celui qui a créé ce fichier aurait pu choisir de le structurer dans le but, entre autres, de connaître immédiatement le nombre des articles inscrits.
    Dans l'état actuel des choses, les deux lignes (la seconde et la troisième) composées de tirets ne me permettent pas de deviner si le créateur a voulu simplement "délimiter" visuellement un titre ou s'il a voulu remplacer ainsi deux champs d'un article composé de trois champs, les données réelles commençant ensuite.
    La mise de ces 240 caractères entre balises code (pour respecter les espaces) n'est pas gratuite non plus. Je ne serais par exemple pas étonné que le 1er "-" soit précédé de 3 espaces et non d'un seul (j'observe pour l'instant que le "titre" est "apparemment" composé de 37 caractères et qu'il est possible que ces 37 caractères soit en fait inclus dans une chaîne fixe de 39 caractères (nombre apparent des chaînes de tirets)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    ne pourrait on pas avoir une exemple raccourci de ton fichier texte en enlevant les données confidentielles????

    @ jurrassic
    le caractère LF est il traduisible par vba ???

    edit: autant pour moi

    c'est la même chose que vbLF

    @unparia

    Je demeure personnellement persuadé de ce que ce fichier est structuré
    c'est évident

    je pariait même que ce fichier est la résultante d'un traitement en xml j'en fait beaucoup et j'ai souvent ce soucis
    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

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    sinon on peut sortir l'artillerie
    et utiliser les expressions régulière
    exemple
    change le chemin pour le chemin de ton fichier

    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
    Sub test()
       MsgBox "apres traitement  " & vbCrLf & wraptexttovbcf("C:\Users\polux\Desktop\exemple 1.txt")
    End Sub
    Function wraptexttovbcf(chemin)
    Dim laChaine As String, x, fichier As String, reg As Object
    Dim Matches
    x = FreeFile: Open chemin For Input As #x: laChaine = Input(LOF(x), #x): Close #x
      MsgBox "avant traitement" & vbCrLf & laChaine
         Set reg = CreateObject("VBScript.RegExp")
        With reg
            .Global = True: .Pattern = "[-]{3,20}": .IgnoreCase = True
            Set Matches = .Execute(laChaine)
     
            For Each Match In Matches
                laChaine = Replace(laChaine, Match, vbCrLf)
                         Next
        tabl = Split(laChaine, vbCrLf)
        For i = 0 To UBound(tabl)
        If tabl(i) <> "" Then texte = texte & tabl(i) & vbCrLf
        Next
        End With
        wraptexttovbcf = texte
        Set reg = Nothing
    End Function
    le principe etant de repérer les morceaux de chaine correspond au caratere"-" qui se répète au mois de 3 a 20 fois

    et les remplacer par des saut de ligne
    comme les chaine ne font pas forcement 3 ou 20 fois tu aura plusieurs sauts de lignes
    alors dans tabl(x) on vérifie et reconstruit le text sans les chaines "----......." mais des sauts de lignes
    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

  17. #17
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour patricktoulon
    je fais quant à moi la différence entre un fichier balisé et un fichier structuré.
    J'apprécierais vraiment que soit mis ici le copié/collé que j'ai demandé
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Citation Envoyé par unparia Voir le message
    Bonjour patricktoulon
    je fais quant à moi la différence entre un fichier balisé et un fichier structuré.
    J'apprécierais vraiment que soit mis ici le copié/collé que j'ai demandé
    oui unparia mais j'ai souvent du xml a traité et j'avais une App téléchargée pour ca
    jusqu'au jour ou je me suis rendu compte que le fichier texte retourné selon le xml présenté des bizarrerie (donc structuré) comme l'exemple qui est concerné dans ce post

    d'ailleurs cet exemple de saut de lignes disparue mais visible dans Notepad+ en est 3 fois sur 4 la bizarrerie de mes fichier

    j'ai fait appel alors a un regexp perso et je n'ai plus de soucis et cela depuis 3 ans
    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

  19. #19
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Pour moi ce n'est pas un fichier "structuré" mais juste un pauvre fichier texte
    avec une séquence de fin de ligne différente de vbCrLf standard sous Windows
    comme l'a aussi souligné Jurassic Pork et c'est la raison pour laquelle certains éditeurs de texte s'en sortent
    car ils cherchent de facto les trois séquences de fin de ligne habituelles à savoir vbCrLf, vbLf ou vbCr !

    Comme je l'ai pourtant déjà démontré sur ce forum ou ailleurs, même avec l'instruction VBA Open
    il est extrêmement simple d'effectuer une ouverture universelle d'un fichier texte comme FSO
    soit pour le lire ligne à ligne ou affecter directement ses lignes dans une variable tableau
    quelle que soit l'une de ces trois habituelles séquences de fin de ligne !

    Du reste je ne comprends toujours pas que l'initiateur de cette discussion ne l'ai toujours pas vu avec UltraEdit,
    purée c'est juste visuel ‼ (basculer en mode hexadécimal au besoin )

    Et si tu ne comprends toujours pas, joindre alors un fichier texte !
    (tester le téléchargement fonctionne ensuite depuis le forum sinon utiliser par exemple cjoint.com …)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  20. #20
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Différences entre Workbooks.Open, ReadLine et Line input :

    Notepad lit jusqu'à ce qu'il rencontre chr(13)
    Line input lit jusqu'à ce qu'il rencontre chr(13)
    Input #1 lit jusqu'à ce qu'il rencontre chr(13) ou une une virgule

    Notepad++ lit jusqu'à ce qu'il rencontre chr(10) ou chr(13)
    .ReadLine lit jusqu'à ce qu'il rencontre chr(10) ou chr(13)

    Workbooks.Open lit jusqu'à ce qu'il rencontre chr(10) ou chr(13) qui ne sont pas à l'intérieur de Guillemets
    Cordialement

    Docmarti.

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