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 :

rechercher/remplacer chaine dans fichier txt


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 rechercher/remplacer chaine dans fichier txt
    Salut,

    J'ai un p'ti pb pour faire ce que je veux faire....

    Voilà ce que je veux faire:

    A chaque fois que je trouve une chaine de la forme ">Entier:Entier<", je la remplace par ">00:entier:entier<".

    A chaque fois que je trouve une chaine de la forme ">Entier<",
    je la remplace par ">00:00:entier<".

    A chaque fois que je trouve une chaine de la forme ">0:Entier:Entier<",
    je la remplace par ">00:entier:entier<".


    J'espère que ce post est plus simple que celui que j'ai posté tout à l'heure

    Merci de votre aide....

    Mila

  2. #2
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    il faut que tu prennes tous les caracteres un à un et détecté si c un nombre
    ou sinon prendre les mots verifier qu'ils correspondent a ton schema

    et les remplacer par ton truc 00:entier:entier
    Plzzz pas de questions par MP.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour


    tu peux tester cette procédure


    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
    Private Sub Command1_Click()
        Dim Valeur As Long
        Dim Cible As String, Fichier As String
        Dim Ancien() As Variant, Nouveau As Variant
        Dim i As Integer
     
        Fichier = "C:\NomFichier.txt"
        Ancien = Array(">Entier:Entier<", ">Entier<", ">0:Entier:Entier<")
        Nouveau = Array(">00:entier:entier<", ">00:00:entier<", ">00:entier:entier<")
     
        Open Fichier For Input As #1
            'recupère les données du fichier texte
            Valeur = FileLen(Fichier)
            Cible = Input(Valeur, 1)
        Close 1
     
        'Remplacement des chaînes de caractères
        For i = 0 To UBound(Ancien())
            Cible = Replace(Cible, Ancien(i), Nouveau(i))
        Next i
     
        'suppression fichier d'origine
        Kill Fichier
     
        'Création nouveau fichier txt avec valeurs modifiees
        Open Fichier For Append As #1
            Print #1, Cible
        Close 1
     
        MsgBox "Terminé"
     
    End Sub

    michel

  4. #4
    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
    Heu, je pense que C_Mila, en ecrivant Entier, Vopulait dire N'importe quelle valeur entière. C'est un problème d'expression regulière , plutot qu'un problème de remplacement de chaines. Mais là je cale
    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

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour Delbeke

    Ooups... effectivement tu dois avoir raison ... ;o)

    michel

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    rebonjour

    J'espère ne pas être hors sujet cette fois ... ;o)

    La procédure remplace les formats ">Entier:Entier<" par ">00:entier:entier<".
    j'ai supposé qu'il s'agit d'entiers à 2 caractères: >14:42< . ce qui donnera >00:14:42<



    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
    Private Sub Command2_Click()
        Dim Valeur As Long
        Dim Chaine As String, Cible As String, Fichier As String
        Dim sTrouve As String
     
        Fichier = "C:\NomFichier.txt"
     
        Open Fichier For Input As #1
            'recupère les données du fichier texte
            Valeur = FileLen(Fichier)
            Chaine = Input(Valeur, 1)
        Close 1
     
        Cible = Chaine
     
     
        Do
            Do
                Cible = Mid(Cible, 2)
            'recherche les données type 12:24
            Loop Until Cible Like "[>]##[:]##[<]*" Or Cible = ""
     
            sTrouve = Left(Cible, 7)
            'MsgBox sTrouve
            Chaine = Replace(Chaine, sTrouve, ">00:" & Right(sTrouve, 6))
       Loop While Cible Like "[>]##[:]##[<]*"
     
     
        'suppression fichier d'origine
        Kill Fichier
     
        'Création nouveau fichier txt avec valeurs modifiees
        Open Fichier For Append As #1
            Print #1, Chaine
        Close 1
     
        MsgBox "Terminé"
    End Sub



    Il te restera à l'adapter pour les autres formats


    michel

  7. #7
    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
    Salut à tous !

    merci quand même pour votre coup de main, mais hier, (du moins ce matin à 02h00 du mat), j'ai réussi à faire marcher mon programme.

    Voici mon script, ça peut servir à d'autres personnes.

    Et merci encore !

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    Private Function RegChangeInFile(motif As String, changement As String, sFile As String) As Boolean
        ' la fonction ne s'execute que si l'on ajoute le caractere [$] pour désigner l' objet à trouver
        If InStr(changement, "[$]") > 0 Then
            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, , sBuffer
               Close #FF
     
                ' on instancie un objet RegExp avec son motif depuis la fonction customisée RegPattern
                Dim Recherche As RegExp, occurrences As MatchCollection
                Set Recherche = RegPattern(motif)
     
                ' la liste des occurences en tant que liste de Match
                Set occurences = Recherche.Execute(sBuffer)
                    'If len(sBuffer)>0 then
     
                        ' on instancie un objet RegExp avec son motif depuis la fonction customisée RegPattern
                            Set Recherche = RegPattern(motif)
                            'response.write("motif >>>>>>>>>>> " & Recherche.pattern)
                            ' la liste des occurences en tant que liste de Match
                            Set occurences = Recherche.Execute(sBuffer)
                            'response.write("occurences trouvées " & occurences.Count)
                            If occurences.Count > 0 Then
     
                                    For Each trouve In occurences
                                        Dim tmp As String, tmpChange As String
                                        tmp = trouve.Value
                                        ' on dénude l'occurence trouvée des tags < et > , l'utilisateur doit les fournir dans le remplacant
                                        tmp = Replace(tmp, ">", "")
                                        tmp = Replace(tmp, "<", "")
                                        tmpChange = changement
                                        ' permet de placer le motif trouvé où l'on veut dans le remplacant
                                        tmpChange = Replace(tmpChange, "[$]", tmp)
                                        sBuffer = Replace(sBuffer, trouve.Value, tmpChange)
                                    Next
                            Else
     
                            End If
     
                '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
                RegChangeInFile = True
            End If
        End If
    End Function
     
    Private Function RegPattern(pattern As String)
        ' la fonction RegPattern va servir a instancier facilement un objet RegExp configuré en standard
        'avec en paramétre le motif
      'Création d'une nouvelle instance de l'objet RegExp
      Set oRegExp = New RegExp
      With oRegExp
         'Une recherche globale s'effectue sur la totalité du texte, sans s'arrêter dès le premier résultat trouvé
         .Global = True
         'Le texte est-il considéré comme une seule et même ligne, ou comme plusieurs lignes distinctes ?
         .MultiLine = True
         'Tient-on compte de la différence entre majuscules et minuscules (case sensitiveness) ou non (case insensitiveness) ?
         .IgnoreCase = True
         'Clef de voûte de notre expression réguliére (en paramétre)
         .pattern = pattern
      End With
      Set RegPattern = oRegExp
    End Function
     
     
    Private Sub Command1_Click()
    Dim change As Boolean
     
    Dim rep As String
     
     
    'obtient le premier fichier ou répertoire qui est dans "c:\TEST_HTML"
    rep = Dir("C:\TEST_HTML\*.html", vbDirectory)
    'boucle tant que le répertoire n'a pas été entièrement parcouru
    Do While (rep <> "")
        'teste si c'est un fichier ou un répertoire
        If (GetAttr("C:\TEST_HTML\" & rep) And vbDirectory) = vbDirectory Then
            MsgBox "Répertoire " & rep
        Else
            MsgBox "Fichier " & rep
     
            'à chaque fichier html trouvé, on crée un fichier txt
             FileCopy "C:\TEST_HTML\" & rep, "C:\TEST_HTML\" & rep & ".txt"
     
            'change = False
            ' les modifications se font par l'appel à des fonction et non a des sous routines comme précédemment
            ' avantage : on n'utilise pas de variables globales mais simplement des variables locales
            change1 = RegChangeInFile(">[0-9]:[0-9]+<", ">00:0[$]<", "C:\TEST_HTML\" & rep & ".txt")
            change2 = RegChangeInFile(">[0-9]+:[0-9]+<", ">00:[$]<", "C:\TEST_HTML\" & rep & ".txt")
             change3 = RegChangeInFile(">[0-9]:[0-9]+:[0-9]+<", ">0[$]<", "C:\TEST_HTML\" & rep & ".txt")
        End If
        'passe à l'élément suivant
        rep = Dir
     
    Loop
    If change1 = True And change2 = True And change3 = True Then MsgBox "Terminé"
     
    End Sub
     
    Private Sub Command2_Click()
        Unload Me
    End Sub
    La bise.
    Mila

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

Discussions similaires

  1. Remplacer chaine de caractère dans fichier .txt
    Par lepiaf69 dans le forum VB.NET
    Réponses: 6
    Dernier message: 07/09/2010, 15h57
  2. Remplacer Automatiquement dans fichier txt
    Par sami_b dans le forum VBA Access
    Réponses: 19
    Dernier message: 29/01/2008, 15h00
  3. [RegEx] remplacement chaine dans fichier regexp
    Par calitom dans le forum Langage
    Réponses: 6
    Dernier message: 20/12/2007, 12h15
  4. [VBA][Acces 2000]Remplacer une chaine dans un txt
    Par JulienTough dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/07/2007, 09h58
  5. Réponses: 3
    Dernier message: 29/09/2006, 16h27

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