Page 1 sur 1

[Func] _FileReplaceLine_FromArray

Posté : mar. 28 déc. 2010 20:09
par matwachich
Une discution sur le forum m'a donner envie de faire cette toute petite fonction:
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
la fonction avec un exemple:

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)
 

Re: [Func] _FileReplaceLine_FromArray

Posté : mar. 28 déc. 2010 21:12
par Tlem
Le but d'une fonction est de simplifier un code et non de le compliquer.
J'ai relu plusieurs fois votre message afin de comprendre son utilité.

En partant du fait que le fichier ini de base ou l'array sont déjà préparé, cette solution permet effectivement de gagner un peut de temps, mais quant est-il si ils ne sont pas préparés ???

La création de fonctions à outrance ne simplifie pas forcément la vie de l'utilisateur, car il est obligé de ce plier aux contraintes de ces fonctions, avec les risques qui en découles. C'est à dire une erreur de conception ou un élément non pris en charge.

Je ne dénigre aucunement le travail effectué, je dit simplement de ne pas tombé dans le piège de la création de fonctions futiles qui ne serviront qu’exceptionnellement.