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

VB 6 et antérieur Discussion :

Détection des erreurs dans un fichier texte (txt)


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 123
    Points : 117
    Points
    117
    Par défaut Détection des erreurs dans un fichier texte (txt)
    Salut,
    J'ai un fichier texte qui a été tronqué pendant l'envoi du coup la dernière ligne ne contient pas le caractère de fin de ligne ordinaire "CR LF" mais
    "CR
    Null Null Null.............................Null" (très grand nombre de Null)

    Pour Ouvrir et lire un fichier texte j'utilise ce bout de code:
    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
    Sub ReadFile(ByVal FileName As String)
       Dim i As Long
       Dim FN As String
       Open FileName For Input As #1 'Ouvrir le fichier
       i = -1
       While Not EOF(1) 'parcourir le fichier jusqu'à la dernière ligne
           On Error GoTo Erreur 'Exception
          i = i + 1
          Line Input #1, FN  'FN reçoit à chaque fois la ligne lue
        Wend
       Close #1 'fermer le fichier
       Exit Sub
    Erreur:
      Result.AddItem "error" 'Afficher l'erreur
    End Sub
    L'erreur n'est pas détectée.

    Existe t'il une méthode ou une solution afin de détecter le caractère de fin de ligne "CR LF".

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Ton fichier doit impérativement se terminer par un CRLF...
    Avant de le parcourir, ouvre-le donc en mode binaire, positionne le pointeur sur l'avant-dernier caractère, et lis les deux caractères que tu trouves. Si pas CRLF, ton fichier est corrompu.

    Passablement "bidouillard", mais bon...

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 123
    Points : 117
    Points
    117
    Par défaut
    Je n'ai pas très bien compris ton idée. Je me suis renseigné sur Open File As Binary et j'ai écrit cette fonction qui permet de lire un fichier texte en mode binaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function ReadFile(FileName As String) As String
     Dim hF As Integer
     Dim Buffer As String
     hF = FreeFile
     Open FileName For Binary As #hF
     Buffer = String(LOF(hF), 0)
     Get #hF, , Buffer
     Close #hF
     ReadFile = Buffer ' Résultat
    End Function
    La chaine affichée à l'écran est sur une seule ligne et ne contient aucun CRLF

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Essaie ça :

    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
     
    Function ReadFile(FileName As String) As String
     
          Dim hF As Integer
          Dim Buffer As String
     
     
          hF = FreeFile
          Open FileName For Binary As #hF
          Buffer = String(2, " ")
          Get #hF,Lof(hF)-1 , Buffer
          Close #hF
          ReadFile = Buffer ' Résultat
     
          if Buffer = VbCrLf Then
               msgbox "Le fichier se termine bien par un CR LF"
          else
               msgbox "Le fichier ne se termine pas par un CR LF, mais par les codes ascii " & asc(left(Buffer,1)) & " et " & asc(right(Buffer,1))
          end if
     
    End Function
    Si tu as des doutes sur le contenu de ton fichier, télécharge et installe Notepad++ sur internet, et ouvre ton fichier avec en spécifiant d'afficher tous les caractères...

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 123
    Points : 117
    Points
    117
    Par défaut
    télécharge et installe Notepad++ sur internet, et ouvre ton fichier avec en spécifiant d'afficher tous les caractères...
    J'ai toujours utilisé NotPad++ et c'est grâce à ca que j'ai constaté que j'avais un fichier corrompu.

    Bref, merci pour le code. Mais ca ne fonctionne toujours pas et dans tous les cas j'ai le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox "Le fichier se termine bien par un CR LF"
    Le fichier avec lequel j'ai fais le test se termine par:
    "CR
    Null Null..................Null"

  6. #6
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 623
    Points
    16 623
    Par défaut
    Le fichier avec lequel j'ai fais le test se termine par:
    "CR
    Null Null..................Null"
    Null, litéralement ou chr(0) ?

  7. #7
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 417
    Points : 5 816
    Points
    5 816
    Par défaut
    Peux-tu découper le fichier(s'il est volumineux) et envoyer sa dernière partie pour qu'on puisse faire le test dessus ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 261
    Points : 216
    Points
    216
    Par défaut
    Peux tu essayer ça et me dire ça donne quoi ? Je ne suis pas sur que ça peut t'aider, mais pour voir si ton problème vient avec des séparateurs de ligne genre lf ou cr


    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
    open "c:\MonFichier.txt" for input as #1
    Dim strVarTemp as string 
    strVarTemp = input(lof(1),1)
    close #1 
     
     
        'Test which line terminator is used.    
        If InStr(1, strVarTemp, vbCrLf) > 0 Then
            msgbox "Le fichier contient vbCrLf"
     
        ElseIf InStr(1,strVarTemp, vbCr) > 0 Then
     
    	strVarTemp = Replace(strVarTemp, vbCr, vbCrLf) 
     
        ElseIf InStr(1, strVarTemp, vbLf) > 0 Then
     
    	strVarTemp = Replace(strVarTemp, vbLf, vbCrLf)
     
        Else
                   msgbox "Ce fichier n'utilise pas un séparateur de ligne normal"
        End If 
     
     
     
    Dim Vartemp2() as string
    Vartemp2 = split ( strVarTemp, vbcrlf)
    si tu n'as pas beaucoup de ligne dans le fichier, fais comme suit et dis moi ça donne quoi, mais si tu as beaucoup de lignes, dans ce cas essaye d'utiliser un espion pour voir le contenu de la variable vartemps2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim i as integer
     
    for i = 0 to ubound(Vartemp2) - 1
     
    msgbox vartemp2(i)
    next i

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonsoir,

    Déjà eu des problèmes lors d'un envoi d'un fichier texte assez volumineux par internet, car le serveur mettait un caractère spécial entre le flux des envois.
    (vérifier par un programme DOS qui lit caractère par caractère code ASCII).
    La solution c'est de renommer l'extention .txt en .doc (document word) et alors celà passe sans problème, puis de le renommer .txt à la réception.

    Mais celà n'est pas un problème de VB6

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 123
    Points : 117
    Points
    117
    Par défaut
    J'ai refais mon test avec ch(0) (le caractère NULL)... ca marche !

    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 10h04
  2. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  3. [3.0.2]Détection des erreurs dans le Package Explorer
    Par willowII dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 18/08/2005, 18h46
  4. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

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