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:
- ">ENTIER:ENTIER<" alors je la remplace par ">00:[/B]ENTIER:ENTIER<"
- ">ENTIER(1 caractere):ENTIER:ENTIER<" alors je la remplace par ">0:ENTIER(1 caractere):ENTIER:ENTIER<"
- ">ENTIER<" alors je la remplace par ">00:00:ENTIER<"
- ">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:
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...)
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
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
Partager