J'ai récupéré sur ce site un script qui permet de faire un "remplacer" dans un fichier texte.
Je cherche à l'adapter pour ne faire le remplacement que de certaines occurrences.
Par exemple, je voudrais modifier le texte seulement à la 3ième ou enième occurrence.
ce qui donnerait par exemple :
avant modif du txt :
texte1
texte1
texte1
texte1
Après modif en changeant que le 3ième :
texte1
texte1
texte2
texte1
Je pense qu'il faut utiliser une boucle ? ou un index ?
Voici le code de base
Code : Tout sélectionner
#include-once
#Include <File.au3>
Dim $SFile, $EN, $FR, $Res, $StrErr, $GErr
; Mise à jour du fichier Date.au3, pour afficher les jours et mois en Francais.
$SFile = "C:\test\fichier.txt"
$ancien = 'texte1|'
$nouveau = 'texte2|'
$Res = _FUpdate($SFile, $ancien, $nouveau, $StrErr)
$compteur= 2
If $Res = 0 Then $GErr = 1
Func _FUpdate($SFile, $Str1, $Str2, ByRef $StrErr, $fCaseness = 0)
; Vérification de la présence du fichier (Sinon pas la peine de continuer).
If Not FileExists($SFile) Then Return 0
; Récupération des attributs du fichier pour les remettres plus tard
$attrib = FileGetAttrib($SFile)
; Modification des attributs, pour pouvoir écrire dedans.
$Res = FileSetAttrib($SFile, "-RASH")
; Si le changement des attributs s'est mal déroulé, alors on sort.
If $Res = 0 Then Return 0
; Mise en tableau des valeurs à remplacer et de remplacement.
$Str1 = StringSplit($Str1, "|")
$Str2 = StringSplit($Str2, "|")
; Si il n'y à pas le meme nombre d'argument, on remet les attributs, et on sort.
If $Str1[0] <> $Str2[0] Then
FileSetAttrib($SFile, "+" & $attrib)
Return 0
EndIf
; Boucle de remplacement dans le fichier.
Dim $Err = 0
For $i = 1 To $Str1[0]
$Res = _ReplaceStringInFile($SFile, $Str1[$i], $Str2[$i], $fCaseness)
; Si la chaine n'a pas été remplacée, incrémentation de la variable $Err.
If $Res <= 0 Then
$Err = $Err + 1
$StrErr = $StrErr & $Str1[$i] & " => " & $Str2[$i] & @CRLF
EndIf
Next
; Remise en place des attributs
FileSetAttrib($SFile, "+" & $attrib)
; Pour indiquer que le fichier à été mofifier.
FileSetAttrib($SFile, "-A")
; Retourne le nombre de remplacement non effectué.
SetError($Err)
; Indique que des remplacements ont été effectués.
Return 1
EndFunc ;==>_FUpdate
exitMerci pour votre aide




