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ée
Code : 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)