Page 1 sur 2

[R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : dim. 22 nov. 2020 09:15
par Boulanza
Bonjour,
Je cherche script pour copier plusieurs lignes d’un fichier ini vers un script Autoit :
Soit de la ligne numéro 2 à 30 = 29 lignes à copier vers un script au3 à partir de la ligne 200 à la ligne numéro 229. Voir exemple ci-dessous:
J'ai trouvé plusieurs solutions (fonction: _FileWriteToLine()) sur ce sujet mais pas de solution qui permet de copier plusieurs lignes d'un coup du fichier ini vers un autre fichier.
N.B: fonction: _FileWriteToLine() ne copie pas les lignes d'un fichier ini vers un autre fichier ! ?
Merci d'avance pour votre aide.
Cordialement.

Code : Tout sélectionner

Fichier ini
1- [Parametres]
2- $Civilite=XXXX
.
.
.
30- $CodeCNE=XXXX

Code : Tout sélectionner

Fichier au3
200- $Civilite=XXXX
.
.
.
229- $CodeCNE=XXXX

Re: [..] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : dim. 22 nov. 2020 11:15
par jl56
Bonjour à tous,

Je reconstituerai le fichier Au3 avec des boucles
; creation fichier ini
$file = FileOpen(@ScriptDir & "\fichier.ini", 2)
For $i = 1 To 50
   FileWriteLine($file, "Ligne fichier INI n°=" & $i)
Next
FileClose($file)


; creation fichier au3
$file = FileOpen(@ScriptDir & "\fichier.au3", 2)
For $i = 1 To 300
   FileWriteLine($file, "Ligne fichier AU3 n°=" & $i)
Next
FileClose($file)


$tableau_fichier_ini = StringSplit(FileRead(@ScriptDir & "\fichier.ini"), Chr(13)) ; on crée un tableau avec le fichier decoupé sur le caractere retour chariot
$tableau_fichier_au3 = StringSplit(FileRead(@ScriptDir & "\fichier.au3"), Chr(13)); on crée un tableau avec le fichier decoupé sur le caractere retour chariot

; position des variables pour l'insertion
$debut_insertion_fichier_ini = 2
$fin_insertion_fichier_ini = 39

$debut_insertion_fichier_au3 = 200


$file = FileOpen(@ScriptDir & "\fichier.au3", 2) ; on reconstruit le fichier au3
For $i = 1 To $tableau_fichier_au3[0]
   FileWriteLine($file, StringReplace( $tableau_fichier_au3[$i],Chr(10),"")) ; ajout de la ligne dans le nouveau fichier au3 avec suppresion du @LF

   If $i = $debut_insertion_fichier_au3 Then ; losrqu'on arrive on point d'insertion sur le fichier au3 on ajoute les lignes choisies du fichier ini
      For $j = $debut_insertion_fichier_ini To $fin_insertion_fichier_ini
         FileWriteLine($file, StringReplace( $tableau_fichier_ini[$j],Chr(10),"")); ajout de la ligne du fichier ini dans le nouveau fichier au3 avec suppresion du @LF
      Next
   EndIf

Next
FileClose($file)


A+

JL56

Re: [..] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : dim. 22 nov. 2020 12:32
par Boulanza
Bonjour JL56,
Merci pour votre suggestion. Voici ci-joint le résultat du test de votre script:
En plus il supprime le contenu du fichier source.ini (fichier.ini)
Cordialement.

Re: [..] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : dim. 22 nov. 2020 14:59
par Boulanza
Bonjour,
Je suis arrivé à copier de la line 2 à la ligne 25 du fichier.ini avec le code ci-dessous.
Quelqu'un peut m'aider à placer ces 25 lignes dans la ligne numéro 200 à 225 du fichier au3
Cordialement.
#include <file.au3>
$file = FileOpen(@ScriptDir&"\fichier.ini", 0)
Global $Line[26]
If $file = -1 Then
   MsgBox(0, "Error", "Unable to open file.")
   Exit
EndIf

;While 1
   $Message = ""
   For $i = 2 to 25
   $line[$i] = FileReadLine($file,$i)
   $Message= $Message&$Line[$i]&@CRLF
   Next
  ; If @error = -1 Then ExitLoop
   MsgBox(0, "Test", $message)
;WEnd
FileClose($file)

Re: [..] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : dim. 22 nov. 2020 15:54
par jl56
Mon script fonctionne et ne retourne pas ce que vous avez mis en téléchargement

Chez moi ça me retourne ceci ce qui me semble conforme a votre demande initial

► Afficher le texte

n'ayant pas vos fichiers je les génère en début de script. Je pensais que vous l'auriez compris c'était en commentaire (
; creation fichier ini
) désolé.
Supprimez les lignes du code de 1 a 15

Avez vous testé le script seul dans un dossier a part de vos propre fichier source?

Bonne journée

Cordialement,

JL56

Re: [..] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : dim. 22 nov. 2020 16:20
par Boulanza
Bonjour,
Avez vous testé le script seul dans un dossier a part de vos propre fichier source?
Je viens de le faire, j'ai toujours le même résultat.
Cordialement.

Re: [..] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : dim. 22 nov. 2020 21:04
par Boulanza
Bonsoir,
Voici le code qui résoud mon problème:
Cordialement.
;;Copier les lignes du fichier ini
Global $Line[26]
If $file01 = -1 Then
   MsgBox(0, "Error", "Unable to open file.")
   Exit
EndIf
   $Message = ""
   For $i = 2 to 25
   $line[$i] = FileReadLine($file01,$i)
   $Message= $Message&$Line[$i]&@CRLF
    Next
  ; MsgBox(0, "$Message", $Message)
FileWriteLine($file02, $Message)
;============================
;Copier $Message dans au3
$Source01 = FileRead($file02)
Local $nb = 0
While 1
   $nb += 1
   $read = FileReadLine(@ScriptDir & "\fichier.au3",$nb)
   If @error Then ExitLoop
   If $read = "Func CopyInfoEnseignant()" Then
      _FileWriteToLine(@ScriptDir & "\fichier.au3",$nb + 1,$Source01,False)
     ExitLoop
   EndIf
WEnd

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : lun. 30 nov. 2020 17:04
par Nine
Et si on laissait les UDF faire le travail :
#include <File.au3>

Const $sFileIni = "Test.ini"
Const $sFileAu3 = "Test.au3"
Const $sFileAu3New = "Test New.au3"

Local $aINI = FileReadToArray($sFileIni)
$aINI = _ArrayExtract($aINI, 1, 30)   ; extraire les ligne 2 à 31 du fichier ini
Local $aAU3 = FileReadToArray($sFileAu3)
Local $aAU3New = _ArrayExtract($aAU3, 0, 198) ; extraire les lignes 1 à 199 du fichier au3
_ArrayAdd($aAU3New, $aINI)
$aAU3 = _ArrayExtract($aAU3, 199) ; extraire le reste des lignes au fichier au3 à partir de la ligne 200
_ArrayAdd($aAU3New, $aAU3)
_FileWriteFromArray($sFileAu3New, $aAU3New)

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : lun. 30 nov. 2020 20:44
par Boulanza
Bonsoir Nine et merci pour ce script réfléchi et professionnel. :idea:

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : ven. 04 déc. 2020 12:30
par Boulanza
Bonjour Monsieur Nine,
Je viens de tester votre script, mais sans aucune réaction.
SVP : Je vous prie de revoir votre script.
#include <File.au3>
Const $sFileIni = @ScriptDir&"\Config.ini"
Const $sFileAu3 = @ScriptDir&"\Test.au3"
Const $sFileAu3New = @ScriptDir&"\Test New.au3"

Local $aINI = FileReadToArray($sFileIni)
$aINI = _ArrayExtract($aINI, 1, 30)   ; extraire les ligne 2 à 31 du fichier ini
Local $aAU3 = FileReadToArray($sFileAu3)
Local $aAU3New = _ArrayExtract($aAU3, 0, 198) ; extraire les lignes 1 à 199 du fichier au3
_ArrayAdd($aAU3New, $aINI)
$aAU3 = _ArrayExtract($aAU3, 199) ; extraire le reste des lignes au fichier au3 à partir de la ligne 200
_ArrayAdd($aAU3New, $aAU3)
_FileWriteFromArray($sFileAu3New, $aAU3New)

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 09:04
par Boulanza
Bonjour,
Pas de réaction de Nine, pour corriger son dernier solution : "Copier plusieurs lignes d’un fichier ini vers un script Autoit". Y a t 'il quelqu'un qui peut aider à résoudre les erreurs du script. Merci à vous...
Cordialement.

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 12:48
par mikell
Peut-être en rajoutant en tête de script un #include <Array.au3> ?

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 13:59
par Boulanza
Bonjour mikell,

Code : Tout sélectionner

#include <Array.au3>
existe déjà dans le script, après vérification ce n'est pas la réelle cause. J'ai cherché la solution, mais en vain.
Cordialement.

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 15:53
par Nine
Il fonctionne très bien de mon côté. Je soupçonne peut-être un problème avec les fichiers sources. En ajoutant des vérifications, ça pourrait aider :

Code : Tout sélectionner

#include <File.au3>

Const $sFileIni = @ScriptDir & "\Test.ini"
Const $sFileAu3 = @ScriptDir & "\Test.au3"
Const $sFileAu3New = @ScriptDir & "\Test New.au3"

Local $aINI = FileReadToArray($sFileIni)
_ArrayDisplay($aINI, "Fichier INI intégral")
$aINI = _ArrayExtract($aINI, 1, 30)   ; extraire les ligne 2 à 31 du fichier ini
_ArrayDisplay($aINI, "Fichier INI ligne 2 à 31")

Local $aAU3 = FileReadToArray($sFileAu3)
_ArrayDisplay($aAU3, "Fichier AU3 intégral")
Local $aAU3New = _ArrayExtract($aAU3, 0, 198) ; extraire les lignes 1 à 199 du fichier au3
_ArrayDisplay($aAU3New, "Nouveau AU3 199 1ères lignes")
_ArrayAdd($aAU3New, $aINI)
_ArrayDisplay($aAU3New, "Nouveau AU3 avec lignes du fichier INI")
$aAU3 = _ArrayExtract($aAU3, 199) ; extraire le reste des lignes au fichier au3 à partir de la ligne 200
_ArrayAdd($aAU3New, $aAU3)
_ArrayDisplay($aAU3New, "Nouveau AU3 complet")
_FileWriteFromArray($sFileAu3New, $aAU3New)
ShellExecute($sFileAu3New, "", "", "Edit")

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 17:42
par Boulanza
Bonjour Nine,
Cette fois le script réagie bien pour les _ArrayDisplay($aINI, "Fichier INI intégral") et _ArrayDisplay($aINI, "Fichier INI ligne 2 à 31") mais pas pour les autres "_ArrayDisplay()". Le fichier Test New.au3 est vide.
Cordialement.

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 17:59
par Nine
Il semble que ton fichier $sFileAu3 est invalide, inexistant ou entièrement vide. Vérifie le @error après la commande FileReadToArray($sFileAu3)

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 18:14
par Boulanza
Bonjour,
Nine a écrit : sam. 05 déc. 2020 17:59 Il semble que ton fichier $sFileAu3 est invalide, inexistant ou entièrement vide. Vérifie le @error après la commande FileReadToArray($sFileAu3)
Local $aAU3 = FileReadToArray($sFileAu3) $sFileAu3 est vide mais surement valide. Pas d'erreur.
A partir de là le code ne fontionne plus:
Local $aAU3 = FileReadToArray($sFileAu3)
_ArrayDisplay($aAU3, "Fichier AU3 intégral")
Local $aAU3New = _ArrayExtract($aAU3, 0, 198) ; extraire les lignes 1 à 199 du fichier au3
_ArrayDisplay($aAU3New, "Nouveau AU3 199 1ères lignes")
_ArrayAdd($aAU3New, $aINI)
_ArrayDisplay($aAU3New, "Nouveau AU3 avec lignes du fichier INI")
$aAU3 = _ArrayExtract($aAU3, 199) ; extraire le reste des lignes au fichier au3 à partir de la ligne 200
_ArrayAdd($aAU3New, $aAU3)
_ArrayDisplay($aAU3New, "Nouveau AU3 complet")
_FileWriteFromArray($sFileAu3New, $aAU3New)
ShellExecute($sFileAu3New, "", "", "Edit")
Cordialement.

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 18:42
par Boulanza
Cette première partie du code marche parfaitement:
#include <Array.au3>
#include <File.au3>

Const $sFileIni = @ScriptDir & "\Config.ini"
Const $sFileAu3 = @ScriptDir & "\Test.au3"
Const $sFileAu3New = @ScriptDir & "\Test New.au3"

Local $aINI = FileReadToArray($sFileIni)
_ArrayDisplay($aINI, "Fichier INI intégral")
$aINI = _ArrayExtract($aINI, 1, 30)   ; extraire les ligne 2 à 31 du fichier ini
_ArrayDisplay($aINI, "Fichier INI ligne 2 à 31")
_FileWriteFromArray($sFileAu3New, $aINI)
ShellExecute($sFileAu3New, "", "", "Edit")

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 18:45
par Nine
S'il est vide, ça ne fonctionnera évidemment pas. La commande retourne une erreur (voir Help File) et le résultat n'est donc plus un Array. L'objectif était d'insérer des lignes INI dans un fichier AU3 d'au moins 200 lignes. Maintenant, si l'objectif a changé, faudra modifier le script en conséquence.

Re: [R] Copier plusieurs lignes d’un fichier ini vers un script Autoit

Posté : sam. 05 déc. 2020 18:51
par Boulanza
Nine a écrit : sam. 05 déc. 2020 18:45 S'il est vide, ça ne fonctionnera évidemment pas. La commande retourne une erreur (voir Help File) et le résultat n'est donc plus un Array. L'objectif était d'insérer des lignes INI dans un fichier AU3 d'au moins 200 lignes. Maintenant, si l'objectif a changé, faudra modifier le script en conséquence.
Non l'objectif n'a pas changé, il est toujours le même: Insérer des lignes INI dans un fichier AU3 d'au moins 200 lignes.