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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par Boulanza le dim. 22 nov. 2020 21:05, modifié 1 fois.
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 382
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

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

#2

Message 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
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#3

Message 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.
Fichiers joints
fichier.au3
(9.09 Kio) Téléchargé 15 fois
fichier.au3
(9.09 Kio) Téléchargé 15 fois
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#4

Message 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)
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 382
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

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

#5

Message 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
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#6

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#7

Message 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
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 38
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

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

#8

Message 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)
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#9

Message par Boulanza »

Bonsoir Nine et merci pour ce script réfléchi et professionnel. :idea:
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#10

Message 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)
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#11

Message 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.
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6059
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#12

Message par mikell »

Peut-être en rajoutant en tête de script un #include <Array.au3> ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#13

Message 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.
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 38
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

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

#14

Message 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")
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#15

Message 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.
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 38
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

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

#16

Message 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)
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#17

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#18

Message 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")
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 38
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

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

#19

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 641
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#20

Message 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.
Répondre