Page 1 sur 1

donnée impossible a enregistrer dans mon .ini

Posté : mar. 06 nov. 2018 23:51
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

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

Posté : mer. 07 nov. 2018 22:00
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