donnée impossible a enregistrer dans mon .ini

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

donnée impossible a enregistrer dans mon .ini

#1

Message par yohanb767 »

Bonjour a tous ,

j'essaye difficilement et grace a l'aide de walkson de finir un petit script mais encore une fois je pense que je manque de connaissance, je veux aller plus vite que la musique
il me manque un seul truc pour le terminer , quand je rentre des données dans les deux input et clic sur ajouter cela m'affiche bien ma date du jour, et les deux input mais quand je quitte le programme il ne m'enregistre que la date et un seul input (et non les deux)

voici le script et le .ini
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <GuiStatusBar.au3>

Global $ini = @ScriptDir & "\testini.ini"
Global $iniG = @ScriptDir & "\testiniG.ini"
If Not FileExists($iniG) Then FileWrite($iniG,"")
If Not FileExists($ini) Then FileWrite($ini,"")
Global $arrayG = _ReadZeIni($iniG)
Global $array = _ReadZeIni($ini) ; lecture du ini => 1ère array ($array) pour stocker les infos
Global $itemG = -1, $itemD = -1

$gui = GUICreate("liste des Litiges", 582, 280, -1, -1, -1)
GUISetBkColor(0x99B4D1)
Global $listview2 = GUICtrlCreateListView("||" & "soft", 370, 40, 200, 130, $LVS_NOCOLUMNHEADER, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
Global $listview = GUICtrlCreateListView("||" & "soft", 10, 40, 200, 130, $LVS_NOCOLUMNHEADER, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 320)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 1, 320)
_GUICtrlListView_AddArray ($listview,$array)
_GUICtrlListView_AddArray ($listview2,$arrayG)

$ajoute = GUICtrlCreateButton("Ajouter", 30, 220, 120, 25)
$degage = GUICtrlCreateButton("Supprimer", 250, 130, 80, 25)
$Nserie = GUICtrlCreateInput("", 30, 190, 120, 25)
$Commentaire = GUICtrlCreateInput("", 190, 190, 120, 25)
$Transferer = GUICtrlCreateButton("Tranférer >>>", 240, 70, 100, 25)
$TransfererG = GUICtrlCreateButton("<<< Tranférer", 240, 100, 100, 25)
$Label = GUICtrlCreateLabel("Litige à traiter", 40, 10, 200, 25)
$Label = GUICtrlCreateLabel("Litige Résolu", 400, 10, 200, 25)
GUISetState()
While 1
        $msg = GUIGetMsg()
        Switch $msg

                Case -3
                        $rep = MsgBox(4 + 32,"Fermeture du programme","Voulez vous enregistrer ?",0,$gui)
                        If $rep = 6 Then
                                $arrayList =  LisviewToArray($listview)
                                _WriteInZeIni($ini,$arrayList)
                                $arrayList =  LisviewToArray($listview2)
                                _WriteInZeIni($iniG,$arrayList)
                        EndIf
                        Exit
                Case $Transferer
                        $itemG = _GUICtrlListView_GetNextItem($listview);item sélectionné
                        If $itemG > -1 Then
                                _GUICtrlListView_CopyItems(GUICtrlGetHandle($listview), GUICtrlGetHandle($listview2), 1)
                        EndIf
                Case $TransfererG
                        $itemD = _GUICtrlListView_GetNextItem($listview2)
                        If $itemD > -1 Then
                                _GUICtrlListView_CopyItems(GUICtrlGetHandle($listview2), GUICtrlGetHandle($listview), 1)
                        EndIf
                Case $degage
                        $itemS = _GUICtrlListView_GetNextItem($listview)
                        If $itemS > -1 Then _GUICtrlListView_DeleteItem ( $listview, $itemS )
                         $itemS = - 1
                Case $ajoute

                        $var = GUICtrlRead($Nserie)
                  $var2 = GUICtrlRead($Commentaire)
                        If $var = "" Then

                                MsgBox(0, "Erreur", 'Veuillez Saisir un Litige')
                        Else
                                $TIME = @MDAY & "/" & @MON & "/" & @YEAR
                                        $nbLigne = _GUICtrlListView_GetItemCount($listview)
                                         _GUICtrlListView_AddItem($listview,$TIME )
                                _GUICtrlListView_AddSubItem($listview,$nbLigne, $var,1 )
                               _GUICtrlListView_AddSubItem($listview,$nbLigne, $var2,2 ); j'aimerai que $var2 soit enregistrer
                                        GUICtrlSetData($Nserie, "")
                              GUICtrlSetData($Commentaire, "")
                                        GUICtrlSetState($Nserie,$GUI_FOCUS )

                        EndIf


        EndSwitch
WEnd
Func _WriteInZeIni($file, $array)
        FileDelete($file)
        FileWrite($file,"")
        For $i = 0 To UBound($array) - 1
                IniWrite($file, $i, $array[$i][0], $array[$i][1])
        Next
EndFunc   ;==>_WriteInZeIni

Func _ReadZeIni($file)
        $var = IniReadSectionNames($file)
        If @error Then
                Return SetError(1)
        EndIf
        Dim $array[$var[0]][2]
        For $i = 1 To $var[0]
                $readsection = IniReadSection($file, $var[$i])
                $array[$i - 1][0] = $readsection[1][0]
                $array[$i - 1][1] = $readsection[1][1]

        Next
        Return $array
EndFunc   ;==>_ReadZeIni
Func LisviewToArray($ListView)
        $nbLigne = _GUICtrlListView_GetItemCount($ListView)
        $nbCol = _GUICtrlListView_GetColumnCount ( $ListView )
        Local $TT
        If $nbCol > 1 Then
                Local $arrayA[0][$nbCol];;;;;;;non
                For $i = 0 To $nbLigne - 1
                        For $y = 0 To $nbCol - 1
                        $rep = _GUICtrlListView_GetItem ( $ListView, $i , $y )
                        $TT &= $rep[3] &"|"
                        Next
                        _ArrayAdd($arrayA, StringTrimRight($TT,1))
                        $TT = ""
                Next

        Else
                Local $arrayA[0]
                For $i = 0 To $nbLigne - 1
                        $rep = _GUICtrlListView_GetItem ( $ListView, $i )
                        _ArrayAdd($arrayA, $rep[3])
                Next
        EndIf

        Return $arrayA
EndFunc
Fichiers joints
essai1.au3
(5.64 Kio) Téléchargé 143 fois
testiniG.ini
(24 Octets) Téléchargé 137 fois
testini.ini
(24 Octets) Téléchargé 140 fois
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: donnée impossible a enregistrer dans mon .ini

#2

Message par mikell »

Le problème est évident : à chaque enregistrement, tu veux enregistrer 3 données : date, nom du machin, commentaire
Mais tel que le fichier ini fonctionne actuellement, tu ne peux en enregistrer que 2 (dans "clé" et "valeur")
Donc tu n'as que 2 solutions Image
1) concevoir le fichier ini différemment, ce qui sous-entend revoir le script en profondeur, parce que (par exemple) "transférer" devrait aussi transférer le commentaire
2) garder la même structure de ini, mais trouver une combine. Par exemple :

[0]
06/11/2018=123456#commentaire

Dans ce cas tu enregistres dans "valeur" les 2 données. A l'enregistrement tu les assembles avec un "#" (ou un autre caractère exotique de ton choix), à la lecture tu les re-sépares avec StringSplit, tu fais des arrays à 3 colonnes, etc
(tiens en passant, le commentaire devrait pouvoir être affiché dans la gui... )

Oh, j'oubliais la 3ème solution possible (que jchd notre maître à tous recommanderait certainement) : la base de données SQLite, qui n'a pas ces limitations : tu peux y rentrer toutes les données que tu veux, et les exploiter de toutes les façons imaginables Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre