Supprimer un enregistrement d'un fichier texte sans créer un temporérement
EMSIEN
Messages postés194Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention11 juin 2009
-
6 mai 2005 à 17:53
EMSIEN
Messages postés194Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention11 juin 2009
-
8 mai 2005 à 01:57
salut à tous les codeurs,
voila je cherche une méthode pour pouvoir supprimer un enregistrement sans avoir recours à la création d'un fichier temporaire puis copié tous les enregistrements sauf celui que je veux supprimer,puis renomer le temporaire et effacer l'original.
j'ai effectué un décalage en écrasant l'enregistrement à effacer mais le dernier enregistrement contient encore le vide " " je veux asvoir est ce qu'il ya moyen de tronquer le fichier par exemple comme le pascal avec trancate(file) ou à l'aide d'API (pas setendoffile qui déplace slmnt le end of file sans tronquer) ou avec n'importe quelle méthode.
merci encore pour vos remarques et réponses.
je ss connecté sur [mailto:shkaff@hotmail.com shkaff@hotmail.com]
A voir également:
Supprimer un enregistrement d'un fichier texte sans créer un temporérement
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 6 mai 2005 à 20:00
Salut,
Je crains que la meilleure solution soit de réécrire le fichier. Soit par la méthode que tu as décrite en 1er lieu soit par celle-ci, si ton fichier n'est pas trop énorme :
Dim nf1 As Integer, nf2 As Integer
Dim str As String
'tu récupères ton fichier texte en entier dans str
nf1 = FreeFile
Open "c:\temp\essai.txt" For Input As #nf1
str = Input(LOF(nf1), #nf1)
Close #nf1
'si tes enregs sont séparés par des CrLf
'tu remplaces l'enreg à supprimer par un ""
str = Replace(str, TonEnreg & vbCrLf, "")
'tu réécris tout le fichier en l'écrasant
nf2 = FreeFile
Open "c:\temp\essai.txt" For Output As #nf2
Print #nf2, str
Close #nf2
Prend quand même la précaution de n'essayer ce code que sur une copie de ton fichier au cas où...
Pour le trancate de Pascal, je ne sais pas.
Le mieux serait quand même d'utiliser une base de données.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 6 mai 2005 à 20:54
si tu connais SetEndOfFile tu devrais connaître SetFilePointer
Private Const FILE_END = 2
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
' - 10 caractères à partir de la fin
SetFilePointer hFile, -10&, -1&, FILE_END
EMSIEN
Messages postés194Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention11 juin 2009 8 mai 2005 à 00:17
Gobillot j'avais essayer de travailler avec cet API mais je sais pas pas trop koi faire dans les paramètres (malgré tes explications et celles de win32.hlp) voici ce que j'ai écris pour pouvoir supprimer le dernier enregistrement mais ça me donne des erreurs de compilation
SetFilePointer #3, Len(Categorie),- 1&, ty_cat
avec #3: le numéro que j'ai donné au fichier
len(categorie) la taille de l'enregistrement à effacer
-1& : je sais pas pk
ty_cat: la taille du fichier car je n'utilise pas eof(#3) ( ça marche pas comme je le veux)
donc STP si tu pourras m'aider sur ce point je te serais reconnaissant
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 8 mai 2005 à 01:54
j'avais essayé ça marche.
comme j'ai plus l'exemple, j'ai recopié des bouts à droite à gauche, si j'ai oublié quelque chose tu me dis.
j'ai laissé Nbytes qui sert pas ici (c'est pour lire ou écrire) alors qu'il fallait mettre hFile (le handle du fichier)
EMSIEN
Messages postés194Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention11 juin 2009 8 mai 2005 à 01:57
je suis entrain de voir ta solution pour le moment merci infiniment encore
et si tu pourras me donner ton MSN comme ça on pourras parler sur la chose si j'arrive pas à comprendre quelques chose.
merci encore