cs_Napster
Messages postés76Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention19 septembre 2009
-
4 juin 2004 à 23:32
jihednond
Messages postés143Date d'inscriptionjeudi 27 mars 2008StatutMembreDerniè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.
jihednond
Messages postés143Date d'inscriptionjeudi 27 mars 2008StatutMembreDernière intervention 3 septembre 20111 10 déc. 2008 à 15:40
lol source pro
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 16 mars 2006 à 21:02
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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 mars 2006 à 20:08
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és38Date d'inscriptionlundi 13 janvier 2003StatutMembreDernière intervention 5 juillet 2005 1 déc. 2004 à 11:24
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és908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 22 août 2004 à 13:34
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 4 juin 2004 à 23:48
Napster : ici je parle de fichier texte, pas de programmes.
De plus, si tu regardes bien, tu peux aussi supprimer un ligne en entrant le texte à supprimer.
cs_Napster
Messages postés76Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention19 septembre 2009 4 juin 2004 à 23:32
ben pour supprimer une ligne il faut preciser le numero de la ligne , suposent que que je veu supprimer une ligne d'un autre programme , et comment je vais savoire le numero de la ligne si je suis pas le createur de ce programme ????
10 déc. 2008 à 15:40
16 mars 2006 à 21:02
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.
16 mars 2006 à 20:08
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
1 déc. 2004 à 11:24
J'ai une ligne avec des " et je voudrais les supprimer dans le fichier texte avant des les importer dans ACCESS.
Merci.
22 août 2004 à 13:34
Version dotnet
4 juin 2004 à 23:48
De plus, si tu regardes bien, tu peux aussi supprimer un ligne en entrant le texte à supprimer.
4 juin 2004 à 23:32