je vous sollicite à nouveau suite à ce sujet
Dans mon projet de programme plusieurs utilisateurs sont amenés à ajouter des modifications.
Si un de ces utilisateurs supprime par exemple les *********** le tri ne fonctionne plus et j'ai derrière des pertes de données !?
Je recherche donc à empêcher la modification de cette ligne *********** qui se répéte toutes les 4 lignes.
Si vous avez une piste

merci
#include <Crypt.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
;~ #include <CLassFichc.au3>
Global Const $FIHCHIER = @HomeDrive & "\test.txt"
Global Const $stabFic = @TempDir & "\test1.txt"
Global Const $stabFic2 = @TempDir & "\test2.txt"
;~ Global $hFileOpen = ""
Global $Val1 = 'Pour test'
Global $FIHC, $Tab, $Ed_DONNEE, $hfile
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 396, 192, 124)
$Input1 = GUICtrlCreateInput("", 16, 24, 153, 21)
$Input2 = GUICtrlCreateInput("", 16, 56, 153, 21)
$Input3 = GUICtrlCreateInput("", 16, 88, 153, 21)
$bt_crypter = GUICtrlCreateButton("Crypter", 16, 136, 153, 25)
$bt_decrypt = GUICtrlCreateButton("Afficher", 16, 184, 153, 25)
$bt_trier = GUICtrlCreateButton("Trier", 16, 236, 153, 25)
$bt_Save = GUICtrlCreateButton("Enregistrer", 16, 282, 153, 25)
$Edit1 = GUICtrlCreateEdit("", 192, 8, 401, 369)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
FileDelete($stabFic) ; on supprime
;~ FileDelete($stabFic2) ; on supprime
Case $bt_crypter
Local $readD1 = GUICtrlRead($Input1)
Local $readD2 = GUICtrlRead($Input2)
Local $readD3 = GUICtrlRead($Input3)
; on lit et déchiffre le contenu du fichier
$hfile = FileOpen($FIHCHIER, $FO_BINARY)
$FIHC = StringEncrypt(False, FileRead($hfile), $Val1)
FileClose($hfile)
$FIHC &= "************" & @CRLF
$FIHC &= "Prénom : "
$FIHC &= $readD1 & @CRLF
$FIHC &= "Age : "
$FIHC &= $readD2 & @CRLF
$FIHC &= "Ville : "
$FIHC &= $readD3 & @CRLF
; on rechiffre TOUT le contenu (pas seulement ce qui a été ajouté)
Local $sEncrypted = StringEncrypt(True, $FIHC, $Val1)
$hfile = FileOpen($FIHCHIER, $FO_OVERWRITE + $FO_BINARY)
FileWrite($hfile, $sEncrypted)
FileClose($hfile)
Case $bt_decrypt
GUICtrlSetData($Edit1, "")
Sleep(200)
$hfile = FileOpen($FIHCHIER, $FO_BINARY)
Local $rREADF = FileRead($hfile)
FileClose($hfile)
Local $sDecrypted = StringEncrypt(False, $rREADF, $Val1)
GUICtrlSetData($Edit1, $sDecrypted)
Case $bt_trier
GUICtrlSetData($Edit1, "") ; On vide GUICtrlCreateEdit
Sleep(100) ; juste pour s'assurer visuellement de l'action
Local $hFileOpen = FileOpen($stabFic, 2)
If $hFileOpen = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "Une erreur est survenue pendant la lecture du fichier.")
EndIf
FileWrite($hFileOpen, $sDecrypted) ; Ecrit dans le fichier le décryptage
_FileReadToArray($stabFic, $Tab) ; Mise en tableau des données du fichier tab.txt
_ArrayDisplay($Tab, "") ; Affiche le tableau
Global $Tab2D[UBound($Tab) / 4][4] ; déclare le tableau 4 colonnes 4 lignes
$Tab2DLine = 0 ; Initialisation de la valeur de la première ligne du tableau à peupler
For $i = 1 To UBound($Tab) - 1 Step 4 ; Lecture du tableau $Tab par pas de 4
; On commence par vérifier que la première ligne soit celle avec les étoiles.
If $Tab[$i] = "************" Then
; Ensuite on récupère la ligne Prénom, puis Age et enfin la Ville
$Tab2D[$Tab2DLine][0] = "************" ; on réinscrit
$Tab2D[$Tab2DLine][1] = $Tab[$i + 1] ; Prénom
$Tab2D[$Tab2DLine][2] = $Tab[$i + 2] ; Age
$Tab2D[$Tab2DLine][3] = $Tab[$i + 3] ; Ville
$Tab2DLine += 1 ; On rajoute 1 pour passer à la ligne suivant
EndIf
Next
_ArraySort($Tab2D, 0, 0, 0, 1) ; tri le prénom
_FileWriteFromArray($stabFic, $Tab2D)
_ArrayDisplay($Tab2D, "")
$rtxt = FileRead($stabFic)
$txt2 = StringReplace($rtxt, '|', @CRLF) ; on remplace le pipe par un chariot
FileWrite($stabFic2, $txt2) ; on écrit le résultat dans le fichier
$rresult = FileRead($stabFic2) ; on lit le fichier
GUICtrlSetData($Edit1, "") ; On vide GUICtrlCreateEdit
GUICtrlSetData($Edit1, $rresult) ; on inscrit dans GUICtrlCreateEdit
FileClose($stabFic2) ; on ferme
FileDelete($stabFic2) ; on supprime
FileClose($stabFic) ; on ferme
save() ; on enregistre
Case $bt_Save
save()
EndSwitch
WEnd
Func StringEncrypt($bEncrypt, $sData, $sPassword)
_Crypt_Startup() ; Exécute la bibliothèque Crypt.
Local $sReturn = ''
If $bEncrypt Then ; Si l'indicateur est défini à True alors chiffrer, sinon déchiffrer.
$sReturn = _Crypt_EncryptData($sData, $sPassword, $CALG_RC4)
Else
$sReturn = BinaryToString(_Crypt_DecryptData($sData, $sPassword, $CALG_RC4))
EndIf
_Crypt_Shutdown() ; Arrête la bibliothèque Crypt.
Return $sReturn
EndFunc ;==>StringEncrypt
Func save()
$var = GUICtrlRead($Edit1, 1)
Local $sEncrypted = StringEncrypt(True, $var, $Val1)
$hfile = FileOpen($FIHCHIER, 2)
FileWrite($hfile, $sEncrypted)
FileClose($hfile)
EndFunc ;==>save
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
;~ #include <CLassFichc.au3>
Global Const $FIHCHIER = @HomeDrive & "\test.txt"
Global Const $stabFic = @TempDir & "\test1.txt"
Global Const $stabFic2 = @TempDir & "\test2.txt"
;~ Global $hFileOpen = ""
Global $Val1 = 'Pour test'
Global $FIHC, $Tab, $Ed_DONNEE, $hfile
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 396, 192, 124)
$Input1 = GUICtrlCreateInput("", 16, 24, 153, 21)
$Input2 = GUICtrlCreateInput("", 16, 56, 153, 21)
$Input3 = GUICtrlCreateInput("", 16, 88, 153, 21)
$bt_crypter = GUICtrlCreateButton("Crypter", 16, 136, 153, 25)
$bt_decrypt = GUICtrlCreateButton("Afficher", 16, 184, 153, 25)
$bt_trier = GUICtrlCreateButton("Trier", 16, 236, 153, 25)
$bt_Save = GUICtrlCreateButton("Enregistrer", 16, 282, 153, 25)
$Edit1 = GUICtrlCreateEdit("", 192, 8, 401, 369)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
FileDelete($stabFic) ; on supprime
;~ FileDelete($stabFic2) ; on supprime
Case $bt_crypter
Local $readD1 = GUICtrlRead($Input1)
Local $readD2 = GUICtrlRead($Input2)
Local $readD3 = GUICtrlRead($Input3)
; on lit et déchiffre le contenu du fichier
$hfile = FileOpen($FIHCHIER, $FO_BINARY)
$FIHC = StringEncrypt(False, FileRead($hfile), $Val1)
FileClose($hfile)
$FIHC &= "************" & @CRLF
$FIHC &= "Prénom : "
$FIHC &= $readD1 & @CRLF
$FIHC &= "Age : "
$FIHC &= $readD2 & @CRLF
$FIHC &= "Ville : "
$FIHC &= $readD3 & @CRLF
; on rechiffre TOUT le contenu (pas seulement ce qui a été ajouté)
Local $sEncrypted = StringEncrypt(True, $FIHC, $Val1)
$hfile = FileOpen($FIHCHIER, $FO_OVERWRITE + $FO_BINARY)
FileWrite($hfile, $sEncrypted)
FileClose($hfile)
Case $bt_decrypt
GUICtrlSetData($Edit1, "")
Sleep(200)
$hfile = FileOpen($FIHCHIER, $FO_BINARY)
Local $rREADF = FileRead($hfile)
FileClose($hfile)
Local $sDecrypted = StringEncrypt(False, $rREADF, $Val1)
GUICtrlSetData($Edit1, $sDecrypted)
Case $bt_trier
GUICtrlSetData($Edit1, "") ; On vide GUICtrlCreateEdit
Sleep(100) ; juste pour s'assurer visuellement de l'action
Local $hFileOpen = FileOpen($stabFic, 2)
If $hFileOpen = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "Une erreur est survenue pendant la lecture du fichier.")
EndIf
FileWrite($hFileOpen, $sDecrypted) ; Ecrit dans le fichier le décryptage
_FileReadToArray($stabFic, $Tab) ; Mise en tableau des données du fichier tab.txt
_ArrayDisplay($Tab, "") ; Affiche le tableau
Global $Tab2D[UBound($Tab) / 4][4] ; déclare le tableau 4 colonnes 4 lignes
$Tab2DLine = 0 ; Initialisation de la valeur de la première ligne du tableau à peupler
For $i = 1 To UBound($Tab) - 1 Step 4 ; Lecture du tableau $Tab par pas de 4
; On commence par vérifier que la première ligne soit celle avec les étoiles.
If $Tab[$i] = "************" Then
; Ensuite on récupère la ligne Prénom, puis Age et enfin la Ville
$Tab2D[$Tab2DLine][0] = "************" ; on réinscrit
$Tab2D[$Tab2DLine][1] = $Tab[$i + 1] ; Prénom
$Tab2D[$Tab2DLine][2] = $Tab[$i + 2] ; Age
$Tab2D[$Tab2DLine][3] = $Tab[$i + 3] ; Ville
$Tab2DLine += 1 ; On rajoute 1 pour passer à la ligne suivant
EndIf
Next
_ArraySort($Tab2D, 0, 0, 0, 1) ; tri le prénom
_FileWriteFromArray($stabFic, $Tab2D)
_ArrayDisplay($Tab2D, "")
$rtxt = FileRead($stabFic)
$txt2 = StringReplace($rtxt, '|', @CRLF) ; on remplace le pipe par un chariot
FileWrite($stabFic2, $txt2) ; on écrit le résultat dans le fichier
$rresult = FileRead($stabFic2) ; on lit le fichier
GUICtrlSetData($Edit1, "") ; On vide GUICtrlCreateEdit
GUICtrlSetData($Edit1, $rresult) ; on inscrit dans GUICtrlCreateEdit
FileClose($stabFic2) ; on ferme
FileDelete($stabFic2) ; on supprime
FileClose($stabFic) ; on ferme
save() ; on enregistre
Case $bt_Save
save()
EndSwitch
WEnd
Func StringEncrypt($bEncrypt, $sData, $sPassword)
_Crypt_Startup() ; Exécute la bibliothèque Crypt.
Local $sReturn = ''
If $bEncrypt Then ; Si l'indicateur est défini à True alors chiffrer, sinon déchiffrer.
$sReturn = _Crypt_EncryptData($sData, $sPassword, $CALG_RC4)
Else
$sReturn = BinaryToString(_Crypt_DecryptData($sData, $sPassword, $CALG_RC4))
EndIf
_Crypt_Shutdown() ; Arrête la bibliothèque Crypt.
Return $sReturn
EndFunc ;==>StringEncrypt
Func save()
$var = GUICtrlRead($Edit1, 1)
Local $sEncrypted = StringEncrypt(True, $var, $Val1)
$hfile = FileOpen($FIHCHIER, 2)
FileWrite($hfile, $sEncrypted)
FileClose($hfile)
EndFunc ;==>save