Section dans .ini écrasée

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

Section dans .ini écrasée

#1

Message par yohanb767 »

Bonjour à tous ,

je rencontre un point bloquant sur un de mes script

j'ai deux fichier .ini (Data2.ini et DataF)

mon script remplis bien le fichier DataF.ini comme ceci

[1]
Nom=2F
DateDep=mardi 20 novembre 2018
Observation=
Recupere=NOK

mais quand je veux recopier ces infos dans le Fichier Data2.ini il viens écraser une sections déjà existante
je pense qu'il faut que je dise au script de lire le nombre de section du fichier Data2
pour mettre a la suite la section que je veux ajouter dans celle ci

voici le morceau de script en question

For $i = 0 To $iCount - 1
                $Indice = ""
                $Chek = _GUICtrlListView_GetItemChecked($hListView, $i) ; Recupere dans une variable si une ligne est coche ou pas
                If $Chek = True Then ; Si elle est coche alors
                    _GUICtrlListView_SetItemSelected($hListView, $i) ; Je selectionne la ligne
                    $Indice = _GUICtrlListView_GetSelectedIndices($hListView)
                EndIf
                If $Indice <> "" Then
                    $Indice = $Indice + 1

;;Voici la partie Bloquante je pense

              IniWrite($DataF,$Section[$Indice], "Recupere", "OK" ) ; change la clef "recupere" dans $DataF
              $Temp = IniReadSection($DataF,$Section[$Indice]);je lis la section du fichier $DataF
              IniWriteSection($Data2,$Section[$Indice] ,$Temp) ; j'écris la section complete dans $Data2
              IniDelete($DataF,$Section[$Indice]) ;efface dans $DataF ce qui a été selectionné



                    _GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
                EndIf
            Next

            $Section = IniReadSectionNames($DataF) ; Lecture des sections
            For $i = 1 To UBound($Section) - 1
                IniRenameSection($DataF,$Section[$i],$i)
            Next

            $contenu=FileRead($DataF)
            ;première passe : Cherche plusieurs sauts de lignes depuis le début
            $contenu=StringRegExpReplace($contenu,'\A('&@CRLF&')+','')
            ;deuxième passe : cherche une succession de 2 sauts ou plus successifs pour les remplacer par un seul (sinon les chaînes de textes sont collées)
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&'){2,}',@CRLF)
            ;troisième passe : cherche plusieurs suts de ligne depuis la fin du fichier
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&')+\Z','')
            $hndout=FileOpen(@ScriptDir&"\DataF.ini",2)
            FileWrite($hndout,$contenu)
            FileClose($hndout)
            ;### ###
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Section dans .ini écrasée

#2

Message par Tlem »

Bonsoir.

Si vous ne souhaitez pas mettre à jour les sections existantes, vous devez changer le nom de celle-ci.

Pour plus d'aide, donnez un peux plus d'explication sur le fonctionnement désiré.
- Que reçoit DataF.ini comme données (1 ou plusieurs sections) ?
- Comment sont enchainées les sections (si utilisé) ?
- Que doit recevoir/stocker Data2.ini ?
- Est-ce que les sections des deux fichiers doivent correspondre ?
- Etc ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: Section dans .ini écrasée

#3

Message par yohanb767 »

Bonjour Tlem et merci pour ta réponse

voici mon script complet ci joint

en fait je pense que mon soucis viens de mes checkbox , j'aurai du ne pas utiliser les checkbox pour chaque action sur les bouton "EN ATTENTE" , "LITIGE OK" etc .
en gros j'aimerai que quand dans le tableau quand on selectionne une checkbox qu'il soit impossible d'en selectionner d'autre
#region Includes
#include <ButtonConstants.au3>
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
#endregion

#region Variable Global hors Interface
Global $hListView

#endregion

#region Interface Menu
; ####################################### Début de la création de l'interface Menu ########################################################
Global $F_Menu = GUICreate("Gestion des Litiges - v1.0.0", 565, 213, 192, 124)
Global $Lbl_Titre = GUICtrlCreateLabel("GESTION DES LITIGES", 112, 16, 400, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Btn_NewPret = GUICtrlCreateButton("NOUVEAU LITIGE", 32, 72, 209, 89)
Global $Btn_ModifPret = GUICtrlCreateButton("VOIR / MODIFIER / SUPPRIMER UN LITIGE", 328, 72, 209, 89, $BS_MULTILINE)
; ############################################### Fin de la création ######################################################################
#endregion

#region Interface Formulaire
; ################################# Début de la création de l'interface Formulaire ########################################################
Global $F_Formulaire = GUICreate("Nouveau Litige", 531, 438, 192, 123)
GUISetIcon("C:\Users\g056050\Desktop\422.ico", -1)
Global $Lbl_TitreN = GUICtrlCreateLabel("Données du nouveau litige", 64, 20, 450, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Lbl_NomEmp = GUICtrlCreateLabel("N° De Serie : ", 55, 114, 112, 17)
Global $Inp_NomEmp = GUICtrlCreateInput("", 152, 114, 300, 21)
Global $Lbl_DateDep = GUICtrlCreateLabel("Date du Litige :", 55, 146, 95, 17)
Global $Date_Depart = GUICtrlCreateDate("", 152, 146, 194, 21)
Global $Lbl_Obs = GUICtrlCreateLabel("Observation :", 16, 200, 67, 17)
Global $Edt_Obs = GUICtrlCreateEdit("", 90, 200, 409, 150)
Global $Btn_Valider = GUICtrlCreateButton("VALIDER", 16, 376, 161, 33)
Global $Btn_Retour = GUICtrlCreateButton("RETOUR", 352, 376, 161, 33)
; ############################################## Fin de la création #######################################################################
#endregion

#region Interface Tableau
; ################################# Début de la création de l'interface Tableau ########################################################
Global $hEdit, $hDC, $hBrush, $Item = -1, $SubItem = 0
                Global $Style = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT)
                Global $Data =  @ScriptDir & "\Data.ini"
            Global $Data2 =  @ScriptDir & "\Data2.ini"
                Global $F_Tableau = GUICreate("Liste des Empreints", 1074, 645)
                Global $Chk_Seltab = GUICtrlCreateCheckbox("Sélectionner tout", 32, 544, 97, 25)
                Global $Btn_SupprVisu = GUICtrlCreateButton("SUPPRIMER", 368, 596, 161, 33)
            Global $Btn_OK = GUICtrlCreateButton("LITIGE OK", 168, 544, 161, 33)
                Global $Btn_RetourVisu = GUICtrlCreateButton("RETOUR", 559, 594, 161, 33)
            Global $Btn_Attente = GUICtrlCreateButton("EN ATTENTE", 169, 593, 161, 33)
            Global $Btn_Autre = GUICtrlCreateButton("AUTRE", 366, 545, 161, 33)
            Global $Inp_Autre = GUICtrlCreateInput("", 560, 544, 161, 31)
            $Pic1 = GUICtrlCreatePic("C:\Users\g056050\Desktop\Capture.jpg", 912, 592, 135, 37)
; ############################################## Fin de la création #######################################################################
#endregion


#region Fonction
;##################### Zone des Fonctions nouveau litige#####################

Func _CreationListView()
    $Section = IniReadSectionNames($Data) ; Lecture des sections
    $hListView = _GUICtrlListView_Create($F_Tableau, "N° De Serie|Date Du Litige|Commentaire|Statut", 10, 6, 1050,520, BitOR($LVS_EDITLABELS, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($hListView,  BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))

    ; Taille des colonnes
    _GUICtrlListView_SetColumnWidth($hListView, 0, 190)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 150)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 625)
    _GUICtrlListView_SetColumnWidth($hListView, 3, 84)





    For $i = 1 To UBound($Section) - 1 ; Boucle de lecture
        $Cle = IniReadSection($Data, $Section[$i]) ; Lecture des clés de la section en cours
        If IsArray($Cle) Then ; Si la section n'est pas vide
            _GUICtrlListView_AddItem($hListView, $Cle[1][1]) ; Récupére valeur de la clé 1 de la section en cours
            _GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[2][1], 1) ; Récupére valeur de la clé 2 de la section en cours
            _GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[3][1], 2) ; Récupére valeur de la clé 3 de la section en cours
            _GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[4][1], 3) ; Récupére valeur de la clé 4 de la section en cours


        EndIf
    Next

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
 EndFunc


Func _GUICtrlListView_SetCheckedStates(Const $hListView, Const $iType) ; Fonction des selections des chekbox (0 = Tout Deselectionner , 1 = Tout Selectionner et 2 = Inversion)
    Local $fState = False

    Local Const $iCount = _GUICtrlListView_GetItemCount($hListView)

    If $iType < 0 Or $iType > 2 Then
        Return SetError(1, 0, 0)
    EndIf

    If $iType Then
        $fState = True
    EndIf

    For $i = 0 To $iCount - 1
        If $iType = 2 Then
            $fState = Not _GUICtrlListView_GetItemChecked($hListView, $i)
        EndIf

        _GUICtrlListView_SetItemChecked($hListView, $i, $fState)
    Next
EndFunc

Func _ISCHECKED($control)
    Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $iCode = BitShift($wParam, 16)

    Switch $lParam
        Case $hEdit
            Switch $iCode
                Case $EN_KILLFOCUS
                    Local $iText = _GUICtrlEdit_GetText($hEdit)
                    _GUICtrlListView_SetItemText($hListView, $Item, $iText, $SubItem)
                    ; Après maj de la listView
                    $item = $item + 1
                    $SubItem = $SubItem + 1
                    $Section = IniReadSectionNames($Data) ; Lecture des sections
                    For $i = 1 To UBound($Section) - 1 ; Boucle de lecture
                        If $i = $item Then
                            $Cle = IniReadSection($Data, $Section[$i]) ; Lecture des clés de la section en cours
                            If IsArray($Cle) Then ; Si la section n'est pas vide
                                IniWrite($Data,$Section[$i],$cle[$SubItem][0], $iText)
                            EndIf
                        EndIf
                    Next
                    _WinAPI_DeleteObject($hBrush)
                    _WinAPI_ReleaseDC($hEdit, $hDC)
                    _WinAPI_DestroyWindow($hEdit)

                    $Item = -1
                    $SubItem = 0
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc

Func FrameRect($hDC, $nLeft, $nTop, $nRight, $nBottom, $hBrush)
    Local $stRect = DllStructCreate("int;int;int;int")

    DllStructSetData($stRect, 1, $nLeft)
    DllStructSetData($stRect, 2, $nTop)
    DllStructSetData($stRect, 3, $nRight)
    DllStructSetData($stRect, 4, $nBottom)

    DllCall("user32.dll", "int", "FrameRect", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect), "hwnd", $hBrush)
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tNMHDR, $hWndFrom, $iCode

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case $hListView
            Switch $iCode
                Case $NM_DBLCLK
                    Local $aHit = _GUICtrlListView_SubItemHitTest($hListView)

                    If ($aHit[0] <> -1) And ($aHit[1] = 0) Then
                        $Item = $aHit[0]
                        $SubItem = 0
                        Local $aRect = _GUICtrlListView_GetItemRect($hListView, $Item)
                    ElseIf ($aHit[0] <> -1) And ($aHit[1] > 0) Then
                        $Item = $aHit[0]
                        $SubItem = $aHit[1]
                        Local $aRect = _GUICtrlListView_GetSubItemRect($hListView, $Item, $SubItem)
                    Else
                        Return $GUI_RUNDEFMSG
                    EndIf

                    Local $iItemText = _GUICtrlListView_GetItemText($hListView, $Item, $SubItem)
                    Local $iLen = _GUICtrlListView_GetStringWidth($hListView, $iItemText)
                    $hEdit = _GUICtrlEdit_Create($F_Tableau, $iItemText, $aRect[0] + 3, $aRect[1], $iLen + 10, 17, $Style)

                    _GUICtrlEdit_SetSel($hEdit, 0, -1)
                    _WinAPI_SetFocus($hEdit)
                    $hDC = _WinAPI_GetWindowDC($hEdit)
                    $hBrush = _WinAPI_CreateSolidBrush(0x0000FF)
                    FrameRect($hDC, 0, 0, $iLen + 10 , 17, $hBrush)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
;##################### Fin de la zone #########################
#endregion


GUISetState(@SW_SHOW, $F_Menu)

#region Boucle Principale
While 1 ; Début de la boucle infinie

    $nMsg = GUIGetMsg() ; Récupération des messages de l'interface
    Switch $nMsg ; Début du sélecteur de cas

        Case $GUI_EVENT_CLOSE ; Si clic fermeture fenêtre, on sort
            MsgBox(64, 'Info', 'Vous avez choisi de fermer la fenêtre en cours') ; Message
            Exit ; Fin du script

; ############################################## Action sur l'interface MENU #############################################################
        Case $Btn_NewPret ; Si clic sur le bouton Nouveau Prêt
            GUISetState(@SW_HIDE, $F_Menu) ; On masque le Menu
            GUISetState(@SW_SHOW, $F_Formulaire) ; On affiche le Formulaire

        Case $Btn_ModifPret ; Si clic sur le bouton Modification
            GUISetState(@SW_HIDE, $F_Menu) ; On masque le Menu

            _CreationListView()

            GUISetState(@SW_SHOW, $F_Tableau) ; On affiche le Tableau

; ######################################## Action sur l'interface Formulaire ################################################################
         Case $Btn_Retour ; Si clic sur le bouton Retour
            GUISetState(@SW_HIDE, $F_Formulaire) ; On masque le Formulaire
            GUISetState(@SW_SHOW, $F_Menu) ; On affiche le Menu

        Case $Btn_Valider ; Si clic sur le bouton Valider
            ; ######################################## Creation des fichiers .ini si inexistant ##############################################################
            If Not FileExists($Data) Then ; Si le fichier Data.ini n'existe pas alors
                FileWrite($Data,"") ; On le crée
            Endif ; Fin SI

            $file = FileOpen($Data, 1) ; On ouvre le fichier Data.ini
            If $file = -1 Then ; Si data.ini n'est pas trouvé alors erreur
                MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier de données.")
                Exit ; Sort du logiciel
          EndIf ; Fin SI


         If Not FileExists($Data2) Then ; Si le fichier Data2.ini n'existe pas alors
                FileWrite($Data2,"") ; On le crée
            Endif ; Fin SI

            $file2 = FileOpen($Data2, 1) ; On ouvre le fichier Data2.ini
            If $file2 = -1 Then ; Si data.ini n'est pas trouvé alors erreur
                MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier de données.")
                Exit ; Sort du logiciel
          EndIf ; Fin SI

            ; ################################################# Fin de l'action ##################################################################

            ; ############################################ Je récupère les valeurs ###############################################################
            Local $val_NomEmp = GUICtrlRead($Inp_NomEmp)
            Local $val_DateDep =GUICtrlRead ($Date_Depart)
            Local $val_Observation = GUICtrlRead ($Edt_Obs)

            ; #################################################### Fin de la récupération ########################################################
            $Statut = "NOK"
         $Section = IniReadSectionNames($Data) ; Lecture des sections
            $NbSection = UBound($Section)
            $Key1 = "Nom="& $val_NomEmp
            $Key2 = "DateDep="& $val_DateDep
            $Key7 = "Observation="& $val_Observation
            $Key8 = "Recupere="& $Statut


            Local $sData = $Key1 & @LF & $Key2 & @LF & $Key7 & @LF & $Key8
            IniWriteSection($Data, $NbSection, $sData) ;écris le contenu des Key dans le fichier ini Data.ini

            FileClose($file)

            MsgBox(64, "OK", "Le Litige a bien été prise en compte.")
            GUICtrlSetData ($Inp_NomEmp, "") ; On vide la cellule
            GUICtrlSetData ($Date_Depart, "") ; On vide la cellule
            GUICtrlSetData ($Edt_Obs, "") ; On vide la cellule


            ; ################################################## Action sur l'interface Tableau ##################################################
        Case $Chk_Seltab ; Si on coche la case Badgeacce
            If _ISCHECKED($Chk_Seltab) Then ; Si case coche alors
                 _GUICtrlListView_SetCheckedStates($hListView, 1) ; On selectionne tout
            Else ; Sinon
                _GUICtrlListView_SetCheckedStates($hListView, 0) ; Si elle n'est pas coche, On deselectionne tout
            EndIf ; Fin SI

        Case $Btn_SupprVisu ; Si clic sur le bouton Supprimer

            ; Je fais un deselection de toutes les lignes
            $fSelected = False
            $iCount = _GUICtrlListView_GetItemCount($hListView)
            For $i = 0 To $iCount - 1
                _GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
            Next

            ; Je compte le nombre de ligne dans le tableau
            $iCount = _GUICtrlListView_GetItemCount($hListView)
            $Section = IniReadSectionNames($Data) - 1 ; Lecture des sections

            ; J'execute une action selon le qui est coché
            For $i = 0 To $iCount - 1
                $Indice = ""
                $Chek = _GUICtrlListView_GetItemChecked($hListView, $i) ; Recupere dans une variable si une ligne est coche ou pas
                If $Chek = True Then ; Si elle est coche alors
                    _GUICtrlListView_SetItemSelected($hListView, $i) ; Je selectionne la ligne
                    $Indice = _GUICtrlListView_GetSelectedIndices($hListView)
                EndIf
                If $Indice <> "" Then
                    $Indice = $Indice + 1

              IniDelete($Data,$Section[$Indice]) ;efface dans $Data ce qui a été selectionné

                    _GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
                EndIf
            Next

            $Section = IniReadSectionNames($Data) ; Lecture des sections
            For $i = 1 To UBound($Section) - 1
                IniRenameSection($Data,$Section[$i],$i)
            Next

            $contenu=FileRead($Data)
            ;première passe : Cherche plusieurs sauts de lignes depuis le début
            $contenu=StringRegExpReplace($contenu,'\A('&@CRLF&')+','')
            ;deuxième passe : cherche une succession de 2 sauts ou plus successifs pour les remplacer par un seul (sinon les chaînes de textes sont collées)
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&'){2,}',@CRLF)
            ;troisième passe : cherche plusieurs suts de ligne depuis la fin du fichier
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&')+\Z','')
            $hndout=FileOpen(@ScriptDir&"\Data.ini",2)
            FileWrite($hndout,$contenu)
            FileClose($hndout)
            ;### ###

            _GUICtrlListView_Destroy($hListView)
            _CreationListView()

        Case $Btn_RetourVisu ; Si clic sur le bouton Retour
            GUISetState(@SW_HIDE, $F_Tableau) ; On masque le Tableau
            GUISetState(@SW_SHOW, $F_Menu) ; On affiche le Menu
            _GUICtrlListView_Destroy($hListView)

       Case $Btn_Attente ; Si clic sur le bouton Valider
            ; Je fais un deselection de toutes les lignes
            $fSelected = False
            $iCount = _GUICtrlListView_GetItemCount($hListView)
            For $i = 0 To $iCount - 1
                _GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
            Next

            ; Je compte le nombre de ligne dans le tableau
            $iCount = _GUICtrlListView_GetItemCount($hListView)
            $Section = IniReadSectionNames($Data) - 1 ; Lecture des sections

            ; J'execute une action selon le qui est coché
            For $i = 0 To $iCount - 1
                $Indice = ""
                $Chek = _GUICtrlListView_GetItemChecked($hListView, $i) ; Recupere dans une variable si une ligne est coche ou pas
                If $Chek = True Then ; Si elle est coche alors
                    _GUICtrlListView_SetItemSelected($hListView, $i) ; Je selectionne la ligne
                    $Indice = _GUICtrlListView_GetSelectedIndices($hListView)
                EndIf
                If $Indice <> "" Then
                    $Indice = $Indice + 1




              IniWrite($Data,$Section[$Indice], "Recupere", "EN ATTENTE" )


                    _GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
                EndIf
            Next

            $Section = IniReadSectionNames($Data) ; Lecture des sections
            For $i = 1 To UBound($Section) - 1
                IniRenameSection($Data,$Section[$i],$i)
            Next

            $contenu=FileRead($Data)
            ;première passe : Cherche plusieurs sauts de lignes depuis le début
            $contenu=StringRegExpReplace($contenu,'\A('&@CRLF&')+','')
            ;deuxième passe : cherche une succession de 2 sauts ou plus successifs pour les remplacer par un seul (sinon les chaînes de textes sont collées)
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&'){2,}',@CRLF)
            ;troisième passe : cherche plusieurs suts de ligne depuis la fin du fichier
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&')+\Z','')
            $hndout=FileOpen(@ScriptDir&"\Data.ini",2)
            FileWrite($hndout,$contenu)
            FileClose($hndout)
            ;### ###

            _GUICtrlListView_Destroy($hListView)
            _CreationListView()


       Case $Btn_OK ; Si clic sur le bouton Valider
            ; Je fais un deselection de toutes les lignes
            $fSelected = False
            $iCount = _GUICtrlListView_GetItemCount($hListView)
            For $i = 0 To $iCount - 1
                _GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
            Next

            ; Je compte le nombre de ligne dans le tableau
            $iCount = _GUICtrlListView_GetItemCount($hListView)
            $Section = IniReadSectionNames($Data) - 1 ; Lecture des sections

            ; J'execute une action selon le qui est coché
            For $i = 0 To $iCount - 1
                $Indice = ""
                $Chek = _GUICtrlListView_GetItemChecked($hListView, $i) ; Recupere dans une variable si une ligne est coche ou pas
                If $Chek = True Then ; Si elle est coche alors
                    _GUICtrlListView_SetItemSelected($hListView, $i) ; Je selectionne la ligne
                    $Indice = _GUICtrlListView_GetSelectedIndices($hListView)
                EndIf
                If $Indice <> "" Then
                    $Indice = $Indice + 1


              IniWrite($Data,$Section[$Indice], "Recupere", "OK" ) ; change la clef "recupere" dans $Data
              $Temp = IniReadSection($Data,$Section[$Indice])
              IniWriteSection($Data2,$Section[$Indice] ,$Temp)
              IniDelete($Data,$Section[$Indice]) ;efface dans $Data ce qui a été selectionné




                    _GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
                EndIf
            Next

            $Section = IniReadSectionNames($Data) ; Lecture des sections
            For $i = 1 To UBound($Section) - 1
                IniRenameSection($Data,$Section[$i],$i)
            Next

            $contenu=FileRead($Data)
            ;première passe : Cherche plusieurs sauts de lignes depuis le début
            $contenu=StringRegExpReplace($contenu,'\A('&@CRLF&')+','')
            ;deuxième passe : cherche une succession de 2 sauts ou plus successifs pour les remplacer par un seul (sinon les chaînes de textes sont collées)
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&'){2,}',@CRLF)
            ;troisième passe : cherche plusieurs suts de ligne depuis la fin du fichier
            $contenu=StringRegExpReplace($contenu,'('&@CRLF&')+\Z','')
            $hndout=FileOpen(@ScriptDir&"\Data.ini",2)
            FileWrite($hndout,$contenu)
            FileClose($hndout)
            ;### ###

            _GUICtrlListView_Destroy($hListView)
            _CreationListView()


    EndSwitch ; Fin du sélecteur de cas
WEnd ; Fin de la boucle infinie
#endregion
Fichiers joints
MCO.au3
(21.23 Kio) Téléchargé 138 fois
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Section dans .ini écrasée

#4

Message par Tlem »

quand on selectionne une checkbox qu'il soit impossible d'en selectionner d'autre
Dans ce cas, vous devez aire une boucle sur la liste des ID des Checkbox de votre liste pour les désactiver et inversement, si vous désactivé la Checkbox précédemment activée, alors vous devez refaire la même boucle pour ré-activer toutes les Chekbox.
Autre solution : A l'action de cocher une checkbox, écrire un flag d'indication et si un autre checkbox est cochée, on décoche et/ou on affiche un message.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: Section dans .ini écrasée

#5

Message par yohanb767 »

la deuxième solution me parait très bien mais n'ayant pas fait ce script seul j'avoue que je fais surement chercher un moment
je vais essayer quand même
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: Section dans .ini écrasée

#6

Message par yohanb767 »

un truc de ce genre la ?
par contre dans mon code je suis perdu


Func CheckBox ()

Local $maxCheck = 2
Local $nbCheck = 0

; Si l'on coche une case.
If (GUICtrlRead (@GUI_CtrlId) = $GUI_CHECKED) Then
; On incrémente le nombre de cases cochées.
$nbCheck += 1
EndIf
; Si l'on atteint la limite.
If ($nbCheck = $maxCheck) Then
MsgBox(64, 'Info', "vous ne pouvez qu'une selection à la fois)
EndIf

EndFunc ;Checkbox
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: Section dans .ini écrasée

#7

Message par yohanb767 »

J'ai essayé mais cela ne fonctionne pas , je pense que c'et moi qui s'y prend mal
Répondre