On lui passe un fichier, et elle ressort un fichier dont les lignes ont été modifier suivant un array2D de forme:
Code : Tout sélectionner
; $aModArray[0][0] = nombre de lignes à modifiers, c'est à dire, d'entrées dans le array 2D
    ;       (comme le fait la plupart des fonctions retournant un array -IniReadSection-)
    ; $aModArray[1][0] = Ligne à modifier, $aModArray[1][1] = Ligne modifiée
    ; $aModArray[2][0] = Ligne à modifier, $aModArray[2][1] = Ligne modifiéeCode : Tout sélectionner
#Include <File.au3>
;===============================================================================
;
; Function Name:    _FileReplaceLine_FromArray($pInFile, $pOutFile, $aModArray)
; Description::     Modifie les lignes d'un fichier en suivant les indications d'un array 2D
; Parameter(s):     - $pInFile = Chemin du fichier à modifier
;                   - $pOutFile = Chemin du fichier modifié
;                   - $aModArray = Array 2D de directives sous forme:
;                               $aModArray[0][0] = nombre de lignes à modifiers, c'est à dire, d'entrées dans le array 2D
;                                       (comme le fait la plupart des fonctions retournant un array -IniReadSection-)
;                               $aModArray[1][0] = Ligne à modifier, $aModArray[1][1] = Ligne modifiée
;                               $aModArray[2][0] = Ligne à modifier, $aModArray[2][1] = Ligne modifiée
;                               ... etc ...
;                       PS: L'idéale serait le resultat un IniReadSection d'un fichier ini de forme:
;                           [modifs]
;                           ligne à modifier 1=modification 1
;                           ligne à modifier 2=modification 2
;                           ... etc ...
; Requirement(s):   File.au3
; Return Value(s):  Succes: Retourne 1 et extended = nombre de lignes modifiées
;                   Echec:  Retourne 0 et @Error = 1 => Erreur ouverture du fichier à lire
;                                         @Error = 2 => Impossible de diviser le fichier dans un array
;                                         @Error = 3 => Erreur ouverture du fichier final
;                                         @Error = 5 => Erreur d'écriture dans le fichier final
; Author(s):        Matwachich
;
;===============================================================================
;
Func _FileReplaceLine_FromArray($pInFile, $pOutFile, $aModArray)
    Local $_FileArray, $iModifiedLines = 0
    If Not _FileReadToArray($pInFile, $_FileArray) Then Return SetError(@error, "", 0)
    For $i = 1 To $_FileArray[0]
        For $x = 1 To $aModArray[0][0]
            If $_FileArray[$i] = $aModArray[$x][0] Then
                $_FileArray[$i] = $aModArray[$x][1]
                $iModifiedLines += 1
            EndIf
        Next
    Next
    If Not _FileWriteFromArray($pOutFile, $_FileArray, 1) Then Return SetError(@error + 2, "", 0)
    Return SetError(0, $iModifiedLines, 1)
EndFunc
; ### EXEMPLE ###
#cs
Le fichier ini (ou log si on veut)
[modifs]
ligne1=ligne1_modifié
ligne4=ligne4_modifié
Le fichier à modifier
ligne0
ligne1
ligne2
ligne3
ligne4
ligne5
Donc on voit que l'on veut modifier les lignes 1 et 4
#ce
#region ### POUR CREER LES FICHIERS DE TEST ###
FileWrite("log.ini", "[modifs]" & @CRLF & "ligne1=ligne1_modifié" & @CRLF & "ligne4=ligne4_modifié")
For $i = 0 To 5
    FileWriteLine("le fichier a modifier.txt", "ligne" & $i)
Next
#endregion
$_IniArray = IniReadSection("log.ini", "modifs")
If Not IsArray($_IniArray) Then Exit MsgBox(0, "", "Aucune modification à apporter")
_FileReplaceLine_FromArray("le fichier a modifier.txt", "fichier modifie.txt", $_IniArray)
 

