TUTO VB6 : SUPPRIMER UNE LIGNE DANS UN FICHIER

Messages postés
77
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
19 septembre 2009
- - Dernière réponse : jihednond
Messages postés
144
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2011
- 10 déc. 2008 à 15:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22826-tuto-vb6-supprimer-une-ligne-dans-un-fichier

Afficher la suite 
jihednond
Messages postés
144
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2011
-
lol source pro
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Le Split va engager quasi 2,5 fois en mémoire la taille du fichier, ne passera pas si le fichier est gros, manque de mémoire assuré. Niveau temps de traitement c'est aussi la cata.
Il y a des cas (très souvent en VB) où il convient de se faire une vraie dll qui traitera cela en qlqs millisecondes.
- buffer de 4 Ko (suffisant pour 2 lignes) => VirtuallAlloc.
- Ouverture fichier => CreateFile.
- Taille fichier => GetFileSizeEx.
- Si taille > 4 Ko, aller au bout - 4 Ko => SetFilePointer.
- Remplir buffer => ReadFile (qui dira taille lue).
- Repositionner même place que avant lecture => SetFilePointer.
- Pointeur au bout du buffer, remonter tant que (Ptr > buffer) ET (2 sauts ligne non rencontrés).
- Si Ptr > buffer alors tamponner (Ptr - buffer) octets => WriteFile.
- Tronquer à la position actuelle du ptr de fichier => SetEndOfFile.
- Fermer fichier => CloseHandle.

Voila les 2 dernières lignes enlevées en un temps difficilement mesurable et sur nimporte quelle taille de fichier.
cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61 -
John7 disait :
Bonjour jack, voilà,je me sert de votre source pour supprimer 2 lignes dans un fichier texte. La première(là il n'y a pas de problème) et la dernière. Pour l'instant je passe par le texte de la dernière ligne car j'ai un fichier test mais sinon c'est jamais le même texte de fin et bien entendu c'est jamais la même longueur de texte !! Faut-il passer le fichier par une nouvelle boucle et s'arréter à la fin du fichier-1 pour avoir la dernière ligne ou une autre solution plus en rapport avec votre source ? J'espère que vous me répondrez, en attendant...Trés bonne journée à vous .

Je réponds ... euh
Dans ton cas, tu ne connais pas le contenu de la ligne ni son numéro.
Il faut alors charger tout le fichier :
Open "monFichier.txt" For Binary As #1
Temp$ = Space(FileLen("monFichier.txt"))
Get #1, , Temp$ ' On lit tout le fichier d'un coup -> Temp
Close #1
Dim Tableau() As String
Tableau = Split(Temp$, vbCrLf) ' Mets toutes les lignes dans un tableau
' La dernière ligne est dans Tableau(UBound(Tableau))
' Il suffit donc de réécrire le fichier, ligne par ligne, sans aller jusqu'au bout :
Open "monFichier.txt" For Output As #1
For r = 0 To (UBound(Tableau) - 1)
Print #1, Tableau(r)
Next r
Close #1
evilmajestik
Messages postés
38
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
5 juillet 2005
-
et pour supprimer juste un caractère donné faut faire comment ?
J'ai une ligne avec des " et je voudrais les supprimer dans le fichier texte avant des les importer dans ACCESS.

Merci.
cs_Alain Proviste
Messages postés
910
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
1 -