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 :

Pb Boucle VB6 pour parcourir fichier TXT en VB6


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut Pb Boucle VB6 pour parcourir fichier TXT en VB6
    Salut à tou,

    j'ai un petit pb pour parcourir un fichier texte.
    Mon fichier texte contient la chose suivante:
    *********************
    >25:47<
    >25:47<
    >25:47<

    Corps du fichier

    >25:47<
    >25:47<
    >25:47<
    *********************

    Ce que je veux faire:
    A chaque fois que je trouve la chaine ">25:47<", je la transforme en ">00:25:47<"


    Voici mon 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Private Function ChangeWords(sWordsToRemove As String, sWordsToChange As String, sFile As String) As Boolean
        If Dir(sFile, vbSystem Or vbHidden) = vbNullString Then
    '       fichier existe?
            ChangeWords = False
        Else
    '       ouvre le fichier
            Dim FF As Integer, sBuffer As String
            FF = FreeFile
            Open sFile For Input As #FF
                sBuffer = Input(LOF(FF), 1)
            Close #FF
     
    '       ligne à changer existe?
     
            Dim lPos As Long
            lPos = InStr(1, sBuffer, sWordsToRemove)
     
            If lPos = 0 Then
                ChangeWords = False
            Else
     
    '           on découpe
                Dim sFirst As String, sLast As String
                sFirst = Left$(sBuffer, lPos - 1)
                sLast = Right$(sBuffer, Len(sBuffer) - lPos - Len(sWordsToRemove) + 1)
     
    '           on écrit
                FF = FreeFile
                Open sFile For Output As #1
                Print #1, sFirst & sWordsToChange & sLast
                Close #1
                ChangeWords = True
     
            End If
     
        End If
    End Function
    Puis,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command5_Click()
     Dim change As Boolean
      change = False
    change = ChangeWords(">25:47<", ">00:25:47<", "C:\TEST_HTML\TEST.txt")
     
    End Sub

    MON PB:
    SEULE LA PREMIERE LIGNE EST MODIFIER, et QUAND JE CREE UNE BOUCLE WHILE, CA ME FAIT PLANTER LE CODE.....

    Merci de votre aide....

    La bise.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bon montrez nous ou et comment vous la mettez cette fameuse boucle While...

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Voici les 2 boucles que j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                FF = FreeFile
                Open sFile For Output As #1
                while ChangeWords= False
                    Print #1, sFirst & sWordsToChange & sLast
                wend 
                Close #1
                ChangeWords = True
    J'ai aussi essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Command5_Click()  
     Dim change As Boolean  
     change = False 
     while change=False
     change = ChangeWords(">25:47<", ">00:25:47<", "C:\TEST_HTML\TEST.txt")   
     wend
    End Sub
     
    Mais ni l'une ni l'autres des méthodes ne fonctionnent :(

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    oui mais la elles sont un peu placée au hasard tes boucles...!

    dans ton code tu lis et écrit le fichier d'une seule instruction .... par contre tu n'effectue la modification qu'une seule fois ... c'est cette modification qu'il te faut intégrer dans ta boucle de façon à la faire pour toutes tes lignes.... ne touche ni a la lecture ni a l'écriture, ni à l'appel de ta fonction...

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Où est-ce que je dois placer ma boucle alors...

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Voici ce que l'ai fait:
    Cette fois ci la boucle fonctionne, mais les valeurs dans mon fichier texte sont inchangées. C'est à dire que lorsque le script est terminé, j'ouvre mon fichier txt, mais j'ai toujours ">25:47<" au lieu de "00:>25:47<"

    Voici le 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
    16
    17
     
    Private Sub Command2_Click()
     
    Dim TextLine As String
    Dim f As Integer
     
    f = FreeFile
    Open "C:\TEST_HTML\TEST.txt" For Input As #f    ' Ouvre le fichier.
    'Do While Not EOF(f)    ' Effectue la boucle jusqu'à la fin du fichier.
        Line Input #f, TextLine        ' Lit la ligne dans la variable.
        Do While TextLine <> ""
            strNew = Replace(TextLine, ">25:47<", ">00:25:47<")
            Line Input #f, strNew
        Loop
    Close #f    ' Ferme le fichier.
     
    End Sub
    Merci pour votre aide !

    Mila.

  7. #7
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    En repartant de ton premier jet

    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
    Private Function ChangeWords(sWordsToRemove As String, sWordsToChange As String, sFile As String) As Boolean
        If Dir(sFile, vbSystem Or vbHidden) = vbNullString Then
    '       fichier existe?
            ChangeWords = False
        Else
    '       ouvre le fichier
    'On le lit entierement d'un bloc
            Dim FF As Integer, sBuffer As String
            FF = FreeFile
            Open sFile For Binary As #FF
                sBuffer = String(Lof(FF) ,0 )
                Get #FF, ,Buffer
            Close #FF
     
    '       ligne à changer existe?
     
            Dim lPos As Long
            lPos = InStr(1, sBuffer, sWordsToRemove)
     
            If lPos = 0 Then
                ChangeWords = False
            Else
     
    '           on découpe (voir methode replace)
                Dim sFirst As String, sLast As String
                Do While lPos>0
                   sFirst = Left$(sBuffer, lPos - 1)
                   sLast = Right$(sBuffer, Len(sBuffer) - lPos - Len(sWordsToRemove) + 1)
                   sBuffer = sFirst & sWordsToChange & sLast
                   lPos = InStr(lPos + len(sWordsToRemove) , sBuffer, sWordsToRemove)                        
                Loop
                'en Utilisant la fonction replace, ce serait plus efficace
                'sBuffer = Replace(sBuffer, sWordsToRemove ,sWordsToChange )
     
     
    '           on écrit
    'comme pour la lecture, on l'ecrtit d'un bloc
                FF = FreeFile
                Open sFile For Binary As #FF
                Put #FF,, sBuffer
                Close #FF
        End If
    End Function
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Qaund je lance le script, j'ai l'erreur suivante sur la méthode GET:

    "Variable uses an Automation type not supported in Visual Basic"

    Y a pas une librairie à importer ou un truc de ce genre ??

    Merci

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    non c'est juste une erreur de frappe... sur la ligne :

    rajoute le s....

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    C'est Bon ça marche !!!

    J'ai rajouté cette partie là dans mon code initial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Do While lPos>0
                   sFirst = Left$(sBuffer, lPos - 1)
                   sLast = Right$(sBuffer, Len(sBuffer) - lPos - Len(sWordsToRemove) + 1)
                   sBuffer = sFirst & sWordsToChange & sLast
                   lPos = InStr(lPos + len(sWordsToRemove) , sBuffer, sWordsToRemove)                        
                Loop
    Merci Beaucoup !!
    (Notamment à Delbeke et à bbil !!) you are the best !!

    A pluche !

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

Discussions similaires

  1. Boucle pour parcourir fichiers YAML
    Par Lorddolf dans le forum Ruby
    Réponses: 9
    Dernier message: 28/03/2011, 10h47
  2. Comment accéder à un fichier texte en vb6 pour le modifier ?
    Par Ange_1987 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/04/2009, 17h36
  3. Comment decouper fichier txt avec VB6
    Par MarieMoka dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 26/11/2007, 17h03
  4. Réponses: 6
    Dernier message: 14/04/2006, 11h18
  5. Pb fprintf, fscanf pour un fichier .txt
    Par GeekMéPaTrop dans le forum C
    Réponses: 8
    Dernier message: 23/09/2005, 18h57

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