[UDF] _FUpdate.au3 (Multi remplacement dans un fichier).

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

[UDF] _FUpdate.au3 (Multi remplacement dans un fichier).

#1

Message par Tlem »

Pour remplacer une chaîne de caractère dans un fichier, il suffit d'utiliser _ReplaceStringInFile et lorsque l'on veut faire plusieurs remplacements, il faut faire une boucle.
Voici donc un UDF tout prêt pour une telle utilisation :

Fichier _FUpdate.au3 :

Code : Tout sélectionner

#include-once
;====================================================================================================================
; Name              : _FUpdate
; Description       : Replace string(s) in files
; Syntax            : _FUpdate($SFile, $Str1, $Str2, $fCaseness, $StrErr)
; Parameter(s)      : $SFile - The file to proceed.
;                     $Str1 - The string(s) to be replaced (Separate by |).
;                     $Str2 - The new string(s) (Separate by |).
;                     $StrErr - Return the string(s) not replaced.
;                     $fCaseness - Case sensitive (0 = default)
; Requirement(s)    : File.au3
; Return value(s)   : On Success - Returns 1 and sets:
;                                  @Error = The numbers of no replaced string.
;                                  $StrErr = The string(s) not replaced.
;                     On Failure - Returns 0
; Author            : Tlem <tlem at tuxolem dot net>
; Note(s)           : None
; ====================================================================================================================
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
Voici comment je l'utilise pour mettre en Français certaines fonctions AutoIt :

Code : Tout sélectionner

Dim $SFile, $EN, $FR, $Res, $StrErr, $GErr
; Mise à jour du fichier Date.au3, pour afficher les jours et mois en Francais.
$SFile = $DirAutoit & "Include\Date.au3"
$EN = '["", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]|"Sunday"|"Monday"|"Tuesday"|"Wednesday"|"Thursday"|"Friday"|"Saturday"|' & _
'"January"|"February"|"March"|"April"|"May"|"June"|"July"|"August"|"September"|"October"|"November"|"December"'
$FR = '["", "Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Jull", "Aout", "Sept", "Oct", "Nov", "Dec"]|"Dimance"|"Lundi"|"Mardi"|"Mercredi"|"Jeudi"|"Vendredi"|"Samedi"|' & _
'"Janvier"|"Fevrier"|"Mars"|"Avril"|"Mai"|"Juin"|"Juillet"|"Aout"|"Septembre"|"Octobre"|"Novembre"|"Decembre"'
$Res = _FUpdate($SFile, $EN, $FR, $StrErr)
If $Res = 0 Then $GErr = 1
 
Ou

Code : Tout sélectionner

Dim $SFile, $EN, $FR, $Res, $StrErr, $GErr
; =============================================================================
; Mise à jour de la fonction _StringProper() du fichier string.au3,
; pour prendre en compte les caractères accentués.
$SFile = $DirAutoit & "Include\String.au3"
$EN = '[a-zA-Z]'
$FR = '[a-zA-ZÀ-ˆ]'
$Res = _FUpdate($SFile, $EN, $FR, $StrErr)
;MsgBox(0,"Infos ", "Code retour = " & $Res & @CRLF & "Code erreur = " & @error & @CRLF & $StrErr)
If $Res = 0 Then $GErr = 1
; =============================================================================
 
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre