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 |
Partager