Bonjour,
Il faut être logique avec ce que l'on fait !
$sProgram = GUICtrlRead ($Combo1)
permet de lire le combo et remplir la variable $sProgram
_ArrayUnique($sProgram)
un array est un tableau composé de lignes et de colonnes et vous voulez transformer une variable en tableau ?
Si vous voulez réussir, il vous faudra un minimum de base comme distinguer les variables et les arrays et bien d'autres choses
Local $Ma variable = 1
ceci est une variable
Local $MyArray[4]
ceci est un tableau de 4 lignes avec une colonne (une dimension)
$MyArray[0] = 8
j'entre dans la première ligne la valeur 8 etc, etc...
votre code aurait du être
_ArrayUnique ($aLogin)
car le seul array du code est $aLogin
Concernant _ArrayUnique vous avez raison, il supprime les doublons mais le problème est de savoir qui est le bon entre les deux données ?!?
Je vous propose un approche plus fine en recherchant dans le tableau le doublon. Si le doublon est trouvé, soit on annule l'opération, soit on utilise les nouvelles données que l'on appliquent à ce doublon (on modifie le double trouvé du tableau sans créer un doublon, CAD modification des données)
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>
Opt("MustDeclareVars", 1)
Global $sCryptKey = "MyPassWord"
Global $sFileName = "Test.bin"
Local $aLogin [0][3]
If FileExists($sFileName) Then _ArrayAdd($aLogin, Decrypt_File($sFileName, $sCryptKey))
_ArrayDisplay ($aLogin)
Global $Form1 = GUICreate("Form1", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5") ;nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21) ; input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21) ; input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)
GUISetState(@SW_SHOW)
Local $sProgram, $sLogin, $sPassword, $nMsg, $sSearch, $rep
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button1
$sProgram = GUICtrlRead ($Combo1)
$sLogin = GUICtrlRead ($input1)
$sPassword = GUICtrlRead ($input2)
If $sLogin = "" or $sPassword = "" then ContinueLoop MsgBox ($MB_SYSTEMMODAL,"Erreur","Tous les champs doivent être remplis")
$sSearch = _ArraySearch($aLogin,$sLogin,0,0,0,1,1,1);on cherche le doublon
If $sSearch >= 0 then ;si doublon trouvé on modifie ou non l'original selon le doublon (permet de modifier les entrées)
$rep = MsgBox(4 + 48,"ATTENTION", $sLogin & " a été trouvé dans le tableau" & @CRLF & "Voulez vous modifier les données")
If $rep = 6 Then ;réponse oui
$aLogin[$sSearch][0] = $sProgram
$aLogin[$sSearch][2] = $sPassword
EndIf
Else
AjoutLogin ($sProgram, $sLogin, $sPassword)
EndIf
MsgBox ($MB_SYSTEMMODAL,"C'est fait!", "Vos données ont été enregistrées avec succès",1)
_ArrayDisplay ($aLogin); pour voir
ContinueCase
Case $Button2
GUICtrlSetData ($input1, "")
GUICtrlSetData ($input2, "")
EndSwitch
WEnd
If UBound ($aLogin) > 0 Then Encrypt_File($sFileName, $sCryptKey, _ArrayToString ($aLogin))
Func AjoutLogin ($sProgram, $sLogin, $sPassword)
Local $iIdx = UBound($aLogin)
ReDim $aLogin[$iIdx+1][UBound($aLogin,2)]
$aLogin[$iIdx][0] = $sProgram
$aLogin[$iIdx][1] = $sLogin
$aLogin[$iIdx][2] = $sPassword
EndFunc
Func Decrypt_File($FileName, $vCryptKey)
Local $hFile, $vContent, $sCrypt
$hFile = FileOpen($FileName, $FO_BINARY)
$vContent = FileRead($hFile)
FileClose($hFile)
Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
Local $sValue = BinaryToString($sCrypt)
Return $sValue
EndFunc ;==>Decrypt_File
Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
Local $hFile, $sCrypt
$sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
$hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
FileWrite($hFile, $sCrypt)
FileClose($hFile)
EndFunc ;==>Encrypt_File
J'aime à penser qu'avant de construire une cathédrale, il faut savoir construire une cabane. Et dites vous que nous avons tous été débutant un jour...