Page 1 sur 1
[R] Suppression de ligne dans un TXT
Posté : mer. 15 avr. 2015 11:25
par EspriTT
Bonjour à tous,
Mon programme crée un GUI qui liste le contenu d'un .txt avec une casse Input que me permet d'y ajouter une ligne ou d'en supprimer une. Mon problème et que je n'arrive pas à faire fonctionner la fonction Supprime.
Tous Les conseils sont les bienvenus même sur les autre partie du programme. Je débute dans la programmation donc beaucoup de subtilité me sont encore inconnue
► Afficher le texte
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <ButtonConstants.au3>
#Region GUI
Global $Form1 = GUICreate("Form1", 615, 438, 192, 124)
Global $Edit1 = GUICtrlCreateList("", 80, 88, 193, 297)
Global $Input1 = GUICtrlCreateInput("", 424, 80, 137, 21)
Global $Button1 = GUICtrlCreateButton("ajout", 424, 120, 65, 25)
Global $Button2 = GUICtrlCreateButton("Supp", 504, 120, 65, 25)
GUISetState(@SW_SHOW)
#EndRegion
Local Const $sFilePath = "C:\Chemin\de\votre\.txt"
Func ajoute ()
$Cible = GUICtrlRead($input1)
Local $hFileOpen = FileOpen($sFilePath, $FO_READ)
FileWriteLine ( $sFilePath, $Cible )
FileClose($hFileOpen)
EndFunc
Func supprime ()
$Cible = GUICtrlRead($input1)
Local $hFileOpen = FileOpen($sFilePath, $FO_READ)
For $i = 1 To _FileCountLines($sFilePath)
Local $sFileRead = FileReadLine($hFileOpen)
if $Cible = $sfileread Then
;MsgBox (0,"", $sfileread); test pour verifier le contenue de $sfileread
StringReplace ( $sfileread , $sfileread, "")
EndIf
Next
FileWriteLine ( $sFilePath, $Cible )
FileClose($hFileOpen)
EndFunc
Func Lire ()
Local $hFileOpen = FileOpen($sFilePath, $FO_READ)
For $i = 1 To _FileCountLines($sFilePath)
Local $sFileRead = FileReadLine($hFileOpen)
GUICtrlSetData($Edit1, $sFileRead)
Next
FileClose($hFileOpen)
EndFunc
Lire ()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Ajoute ()
Lire ()
Case $Button2
Supprime ()
Lire ()
EndSwitch
WEnd
Merci d'avance de votre aide
Re: [..] Suppression de ligne dans un TXT
Posté : mer. 15 avr. 2015 14:26
par jbnh
Salut,
Je te propose une solution, j'ai corrigé la méthode supprimer et lire
► Afficher le texte
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <ButtonConstants.au3>
#Region GUI
Global $Form1 = GUICreate("Form1", 615, 438, 192, 124)
Global $Edit1 = GUICtrlCreateList("", 80, 88, 193, 297)
Global $Input1 = GUICtrlCreateInput("", 424, 80, 137, 21)
Global $Button1 = GUICtrlCreateButton("ajout", 424, 120, 65, 25)
Global $Button2 = GUICtrlCreateButton("Supp", 504, 120, 65, 25)
GUISetState(@SW_SHOW)
#EndRegion
Local Const $sFilePath = "a.txt"
Func ajoute ()
$Cible = GUICtrlRead($input1)
Local $hFileOpen = FileOpen($sFilePath, $FO_READ)
FileWriteLine ( $sFilePath, $Cible )
FileClose($hFileOpen)
EndFunc
Func supprime ()
$Cible = GUICtrlRead($input1)
;lecture
Local $hFileOpen = FileOpen($sFilePath, $FO_READ)
Local $sFileRead = FileRead($hFileOpen)
FileClose($hFileOpen)
;ecriture
$sFileRead = StringReplace ($sfileread , $Cible&@CRLF, "")
$hFileOpen = FileOpen($sFilePath, $FO_OVERWRITE)
FileWrite($hFileOpen, $sFileRead)
FileClose($hFileOpen)
EndFunc
Func Lire ()
GUICtrlSetData($Edit1, "")
Local $hFileOpen = FileOpen($sFilePath, $FO_READ)
Local $sFileRead
For $i = 1 To _FileCountLines($sFilePath)
$sFileRead = FileReadLine($hFileOpen,$i)
GUICtrlSetData($Edit1, $sFileRead)
Next
GUICtrlSetData($Edit1, $sFileRead)
FileClose($hFileOpen)
EndFunc
Lire ()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Ajoute ()
Lire ()
Case $Button2
Supprime ()
Lire ()
EndSwitch
WEnd
Note que la liste n'affiche pas les doublons
Re: [..] Suppression de ligne dans un TXT
Posté : mer. 15 avr. 2015 17:09
par EspriTT
Merci tous fonctionne
je n'ai pas tous compris sur les changements effectué mais en cherchant bien ...
Re: [R] Suppression de ligne dans un TXT
Posté : mer. 15 avr. 2015 17:24
par jbnh
Pour ajouter une ligne , tu faisais dans ta boucle
CAD selon la doc la ligne 1 par défaut :
FileReadLine ( "filehandle/filename" [, line = 1] )
J'ai donc rajouté l'argument $i
Pour supprimer je lis d'abord tout le contenu du fichier pour remplacer la ligne de l'input ($cible) avec StringReplace.
Je met
Car dans ta fonction ajoute tu utilises FileWriteLine qui stipule
The line of text to write to the text file. If the line does NOT end in @CR or @LF then a DOS linefeed (@CRLF) will be automatically added.
Donc je supprime la ligne avec également son retour à la ligne.
J'écris ensuite le résultat du StringReplace dans le fichier texte en l'ouvrant avec $FO_OVERWRITE (cf doc) pour remplacer le contenu