[Func] _FileReplaceLine_FromArray

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

[Func] _FileReplaceLine_FromArray

#1

Message 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)
 
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] _FileReplaceLine_FromArray

#2

Message 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.
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