[R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

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

[R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#1

Message par Boulanza »

Bonjour,
Votre aide pour copier le contenu (les lignes) du fichier "Config.ini" : Soit tous ce qui se trouvent sous [Parametres] et sans le symbole "$" qui se trouve au début de chaque ligne dans "MsgBox".
Merci d'avance pour votre aide.
Cordialement.

Le contenu du fichier "Config.ini" :
[Parametres]
$Civilité=Madame
$Nom=FHFFFGHFG
$Prenom=Fggggggggggggggggggg
$EmailAcadimique=Info@Ff.Com
$EmailPersonnel=Info@Ff.Com
$GSM=21321321
$IntituleDuCours=com
$AbreviationDuCours!=GFGF
$CPS= SSSSSS
$GEM= MMMMM
Exemple de Code:
#include <File.au3>
$Fichier = @ScriptDir&"\Config.ini"
$Nombre_de_ligne = _FileCountLines($Fichier) ;Compte le nombre de ligne
 Run("notepad.exe")
sleep(1000)
For $i = 10 To $Nombre_de_ligne ;pour $i = 1 jusqua $Nombre_de_ligne
    $La_ligne_I = FileReadLine($Fichier, $i) ;On lit la ligne $i
   ClipPut($La_ligne_I) ;On met la ligne dans le presse papier
   ; Send("^v") ;On la colle
    ;Send("{ENTER}");On va a la ligne
MsgBox(64,"",$La_ligne_I)
Next
Modifié en dernier par Boulanza le mar. 10 nov. 2020 09:21, modifié 2 fois.
Boulanza
Niveau 9
Niveau 9
Messages : 666
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#2

Message par Boulanza »

Plusieurs exemples existent sur les forums Autoit mais sans la possibilité de copier le contenu (les lignes) du fichier "Config.ini" : Soit tous ce qui se trouvent sous [Parametres] et sans le symbole "$" qui se trouve au début de chaque ligne dans "MsgBox".
Voir aussi le code de cet exemple ci-dessous trouvé dans https://www.autoitscript.fr/forum/viewtopic.php?t=9652
#include <Array.au3>
$aIni6 = _DisplayIni("Config.ini")
_ArrayDisplay($aIni6)
Func _DisplayIni($ini6_file)
    Dim $aIni[1][3] = [["Section", "Clé", "Valeur"]] ; Description des valeurs du tableau
    Local $Count = 1 ; Initialisation compteur
    Local $aSection = IniReadSectionNames($ini6_file) ; Lecture des sections
    For $i = 1 To UBound($aSection) - 1 ; Boucle de lecture
        $aKey = IniReadSection($ini6_file, $aSection[$i]) ; Lecture des clés de la section en cours
        If IsArray($aKey) Then ; Si la section n'est pas vide
            ReDim $aIni[$Count + UBound($aKey) - 1][3] ; On redimentionne le tableau en ajoutant le nombre d'éléments de la section en cours
            For $j = 1 To Ubound($aKey) - 1 ; Boucle de lecture
                $aIni[$Count][0] = $aSection[$i] ; On stocke le nom de la section
                $aIni[$Count][1] = $aKey[$j][0] ; On stocke le nom de la clé
                $aIni[$Count][2] = $aKey[$j][1] ; On stocke la valeur de la clé
                $Count += 1 ; On incrémente le compteur
           MsgBox(0," ",   $aKey[$j][0] &" : " & $aKey[$j][1] )
         Next
         Else ; Si la section est vide
            ReDim $aIni[$Count + 1][3] ; On redimentionne le tableau de une ligne
            $aIni[$Count][0] = $aSection[$i] ; On stocke le nom de la section
            $Count += 1 ; On incrémente le compteur
        EndIf
    Next
  Return ($aIni) ; On retourne le tableau
EndFunc
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 911
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#3

Message par walkson »

Bonjour,
#3 Message par mikell » ven. 23 oct. 2020 21:55
Il y a des solutions, très probablement. Mais la manière confuse dont est présentée la question ne permet pas d'en proposer
:lol:
Un fichier INI se présente comme ceci
[ SectionName]
Key = valeur
Question: que voulez vous copier ? La key ? la valeur ? les deux ? la section ?
Vous avez, me semble t'il, le nom de la section donc en utilisant IniReadSection ( "filename", "section" ) vous obtenez un array à 2 dimensions où l'élément [n][0] est la clé et l'élément [n][1] est la valeur. En bouclant sur cet array, vous obtenez les valeurs et les key.
Avec FileOpen() option 1 puis FileWrite() vous récupérez ce que vous avez lu du array et les données s'écrivent à la suite.
Si c'est pour afficher dans un MsgBox
$array = IniReadSection ( "filename", "section" )
Local $val
For $i = 0 To UBound($array) - 1
   $val &= $array[$i][0] & "=" & $array[$i][1] & @CRLF
Next
MsgBox(0,"",$val)
Mais est ce là ce que vous souhaitez ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 666
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#4

Message par Boulanza »

Bonjour,
Merci infiniment Monsieur walkson pour votre suggestion qui fonction comme je le voulais. Il reste à supprimer le symbole "$" qui se trouve au début de chaque ligne dans "MsgBox".
J'ai testé StringRegExpReplace($file, '$.*', "") et d'auteure mais en vain.
Cordialement.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 911
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#5

Message par walkson »

Les méta-caractères PCRE sont \ . ^ $ | [ ( { * + ? # ils ont une ou plusieurs significations, selon le contexte.
Pour insérer un méta-caractère littéral, faites-le précéder par une barre oblique inverse ('backslash') (c'est l'échappement de ce caractère) : "\$" signifie le caractère dollar.
donc StringRegExpReplace($file, '$.*', "") est faux !
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 666
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#6

Message par Boulanza »

Bonsoir Monsieur Walkson,
C'est parfait Monsieur Walkson vous êtes un gentleman... Merci.
Code finale:
$fichier = @ScriptDir & "\Config.ini"
$file = FileRead($fichier)
$resultat = StringRegExpReplace($file,  "\$", "")
If FileExists(@ScriptDir & "\sortie.ini") Then FileDelete(@ScriptDir & "\sortie.ini")
Filewrite(@ScriptDir & "\sortie.ini", $resultat)

$filename = @ScriptDir & "\sortie.ini"
$array = IniReadSection ( $filename, "Parametres" )
Local $val
For $i = 0 To UBound($array) - 1
   $val &= $array[$i][0]&" Lignes" & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"",$val)
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6092
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#7

Message par mikell »

Je ne vois vraiment pas pourquoi un regex est nécessaire ici
Un simple StringReplace($file, "$", "") aurait fonctionné aussi bien :roll:
" 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 : 666
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#8

Message par Boulanza »

Bonsoir,
StringReplace($file, "$", "") et StringRegExpReplace($file, "\$", "") marchent parfaitement sans problème.
Par contre, j'ai un souci avec les actions (é,à,è...) de MsgBox(0,"",$val). Comment faire pour éviter cela?
Cordialement.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 911
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#9

Message par walkson »

C'est parfait Monsieur Walkson vous êtes un gentleman... Merci.
et voilà ! Michel casse la baraque ! :lol:
Plus sérieusement, pourquoi écrire un ini avec des $ si c'est pour les supprimer ?...
Pour le problème des accents
$text = "[Parametres]" & @CRLF
$text &= "$Civilité=Mémé" & @CRLF
$text &= "$Nom=pépé" & @CRLF
$text &= "$Prenom=où" & @CRLF
$text &= "essai=éèàùï"

$open = FileOpen(@ScriptDir & "\AA.ini",1 + 512); $FO_APPEND (1) = Write mode (append to end of file),  $FO_ANSI (512) = Use ANSI reading and writing mode.
FileWrite($open,$text)
FileClose($open)
$filename = @ScriptDir & "\AA.ini"
$array = IniReadSection ( $filename, "Parametres" )
Local $val
For $i = 0 To UBound($array) - 1
   $val &= $array[$i][0]&" Lignes" & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"",$val)
Autrement dit votre ini n'est pas écrit en ANSI et donc il faut le convertir, File open() avec 1 + 512 (voir le code), Filewrite(), File close()
Cela devrait résoudre le problème mais si j'ai écris une bêtise, notre JCHD va me corriger
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 666
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#10

Message par Boulanza »

Bonjour Monsieur walkson,
- Je vous confirme que votre remarque concernant FileOpen(@ScriptDir & "\Config.ini",1 + 512) marche bien une fois converti en ANSI, voir code 1.
- Impossible d'adapter FileOpen(@ScriptDir & "\Config.ini",1 + 512) à mon code. Pouvez-vous svp me dire elle est où mon erreur. Merci...
Code1:
$open = FileOpen(@ScriptDir & "\AA.ini",1 + 512); $FO_APPEND (1) = Write mode (append to end of file),  $FO_ANSI (512) = Use ANSI reading and writing mode.
FileWrite($open,$fichier)
FileClose($open)
$filename = @ScriptDir & "\AA.ini"
$array = IniReadSection ( $filename, "Parametres" )
Local $val
For $i = 0 To UBound($array) - 1
   $val &= $array[$i][0]&" Lignes" & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"",$val)
Code2:
Local $fichier = @ScriptDir & "\Config.ini"
$file = FileRead($fichier)
$resultat = StringRegExpReplace($file,  "\$", "")
If FileExists(@ScriptDir & "\AA.ini") Then FileDelete(@ScriptDir & "\AA.ini")
Filewrite(@ScriptDir & "\AA.ini", $resultat)

$open = FileOpen(@ScriptDir & "\Config.ini",1 + 512); $FO_APPEND (1) = Write mode (append to end of file),  $FO_ANSI (512) = Use ANSI reading and writing mode.
FileWrite($open,$fichier)
$resultat = StringRegExpReplace($file,  "\$", "")
FileClose($open)
$filename = @ScriptDir & "\AA.ini"
$array = IniReadSection ( $filename, "Parametres" )
Local $val
For $i = 0 To UBound($array) - 1
   $val &= $array[$i][0]&" Lignes" & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"",$val)
Exit
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 911
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#11

Message par walkson »

Bonjour,
Il y a une erreur dans mon code, le mode 512 est en lecture-écriture donc le 1 est inutile
Voici un test pour vérifier la correction (en OVERWRITE)

Code : Tout sélectionner

$text = "[Parametres]" & @CRLF
$text &= "$Civilité=Mémé" & @CRLF
$text &= "$Nom=pépé" & @CRLF
$text &= "$Prenom=où" & @CRLF
$text &= "$essai=éèàùï"
Local $fichier = @ScriptDir & "\AAA.ini"
If FileExists($fichier) Then FileDelete($fichier)
FileWrite($fichier,$text)
$array = IniReadSection ( $fichier, "Parametres" )
Local $val
For $i = 0 To UBound($array) - 1
   $val &= $array[$i][0]&" Lignes" & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"avant",$val)
;============================================================================
$val = ""
$file = FileRead($fichier)
$resultat = StringRegExpReplace($file,  "\$", "")
$open = FileOpen(@ScriptDir & "\AAA.ini",2 + 512); $FO_OVERWRITE (2),  $FO_ANSI (512) = Use ANSI reading and writing mode.
FileWrite($open,$resultat)
FileClose($open)
$filename = @ScriptDir & "\AAA.ini"
$array = IniReadSection ( $filename, "Parametres" )
For $i = 0 To UBound($array) - 1
   $val &= $array[$i][0]&" Lignes" & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"après",$val)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 666
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox

#12

Message par Boulanza »

Bonjour,
Monsieur walkson, merci pour votre contribution.
Voici le code final suivant l'objet de ma demande:
Cordialement.
FileCopy(@ScriptDir & "\Config.ini", @ScriptDir & "\NewConfig.ini", $FC_OVERWRITE + 8)
 Sleep(2000)
 Local $fichier = @ScriptDir & "\NewConfig.ini"
 $array = IniReadSection ( $fichier, "Parametres" )
Local $val1
For $i = 0 To UBound($array) - 1
   $val1 &= $array[$i][0] & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"avant",$val1)
;========================= Suite
$val2 = ""
$file = FileRead($fichier)
$resultat = StringRegExpReplace($file,  "\$", " ")
$open = FileOpen(@ScriptDir & "\NewConfig.ini",2 + 512); $FO_OVERWRITE (2),  $FO_ANSI (512) = Use ANSI reading and writing mode.
FileWrite($open,$resultat)
FileClose($open)$filename = @ScriptDir & "\NewConfig.ini"
$array = IniReadSection ( $filename, "Parametres" )
For $i = 0 To UBound($array) - 1
   $val2 &= $array[$i][0] & " : "  & $array[$i][1] & @CRLF
Next
MsgBox(0,"après",$val2)
 Exit
Répondre