Page 1 sur 1
[R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 11:18
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 ligneMsgBox(64,"",$La_ligne_I)Next
Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 14:23
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 tableauEndFunc
Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 15:49
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
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
Mais est ce là ce que vous souhaitez ?
Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 17:57
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.
Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 18:28
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 !
Re: [..] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 19:41
par Boulanza
Bonsoir Monsieur Walkson,
C'est parfait Monsieur Walkson vous êtes un gentleman... Merci.
Code finale:
Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 21:12
par mikell
Je ne vois vraiment pas pourquoi un regex est nécessaire ici
Un simple
StringReplace($file, "$", "")
aurait fonctionné aussi bien

Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 21:46
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.
Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : sam. 07 nov. 2020 23:38
par walkson
C'est parfait Monsieur Walkson vous êtes un gentleman... Merci.
et voilà ! Michel casse la baraque !
Plus sérieusement, pourquoi écrire un ini avec des $ si c'est pour les supprimer ?...
Pour le problème des accents
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
Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : dim. 08 nov. 2020 10:39
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:
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 $valFor $i = 0 To UBound($array) - 1 $val &= $array[$i][0]&" Lignes" & " : " & $array[$i][1] & @CRLFNextMsgBox(0,"",$val)Exit
Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : dim. 08 nov. 2020 11:45
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)
Re: [R] Votre aide pour copier tous les lignes d'un fichier.ini dans MsgBox
Posté : dim. 08 nov. 2020 13:46
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 $val1For $i = 0 To UBound($array) - 1 $val1 &= $array[$i][0] & " : " & $array[$i][1] & @CRLFNextMsgBox(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] & @CRLFNextMsgBox(0,"après",$val2) Exit