Là je cale....
je vous explique un peu ce que je fais:
- Je parcours un ensemble de fichiers html qui se trouvent dans un répertoire
- Pour chaque fichier html trouvé, j'en fais une copie txt (pour pouvoir le modifier)

Ce que je voudrais faire:
- je parcours le fichier txt
- si jamais je trouve l'expression:
  1. ">ENTIER:ENTIER<" alors je la remplace par ">00:[/B]ENTIER:ENTIER<"

  1. ">ENTIER(1 caractere):ENTIER:ENTIER<" alors je la remplace par ">0:ENTIER(1 caractere):ENTIER:ENTIER<"

  1. ">ENTIER<" alors je la remplace par ">00:00:ENTIER<"

  1. ">ENTIER(1 caractere):ENTIER<" alors je la remplace par ">00:0ENTIER(1 caractere):ENTIER<"


J'utilise des expressions régulières...
Je pense qu'il faut faire une CASE....ou bien un IF....THEN....ELSE....etc, mais je ne sais pas trop comment faire....

Help please...Thx

Voici le code que j'ai:

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
 
Private Sub Command1_Click()
'******************
Dim rep As String
Dim change As Boolean
 
Dim Reg As New RegExp
Dim Matchs As MatchCollection
Dim Chaine As String
 
 
Reg.Pattern = ">[0-9]+[0-9]+:[0-9]+[0-9]+<"
'Chaine = String(1, Reg.Pattern)
 
Reg.Global = True
Reg.IgnoreCase = True
Set Matchs = Reg.Execute(Chaine)
 
 
'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"
 
        'pour chaque fichier txt, rechercher ">03:38<", remplacer ">00:03:38<"
        change = ChangeWords(Reg.Pattern, "00:" & Chaine, "C:\TEST_HTML\" & rep & ".txt")
 
        'A la fin, on supprime le fichier txt
        'Kill "C:\TEST_HTML\" & rep & ".txt"
 
    End If
    'passe à l'élément suivant
    rep = Dir
 
Loop
End Sub
Voici ma fonction ChangeWords (mais le pb, c'est qu'elle prend en argument que des String, pas d'expression régulière....Donc je ne sais pas trop comment faire...)

Merci pour votre aide..

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
 
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, , sBuffer
        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 If
End Function