Réduire un fichier texte de X caractères

Le
Tschuß
Bonjour,

J'ai un fichier texte des plus simple et je veux retirer
systèmatiquement la dernière ligne.
Bon, je pourrais faire une boucle pour résoudre le pb mais j'ai
souvenir qu'en ouvrant le fichier en binaire il est possible de
réduire directement le fichier au moyen d'une soustraction sur sa
taille.
L'opération est un poil compliqué, je l'admets, mais elle a le mérite
d'être extrêment rapide.

J'ai cherché l'info sur de nombreux forum mais sans succès

Merci de m'apporter vos réponses ou vos pistes.
Vidéos High-Tech et Jeu Vidéo
  • Le smartphone Sony Xperia X voit sa résistance aux immersions testée durant deux ...
  • Présentation du Wendelstein 7-X le réacteur à fusion nucléaire le plus grand jamais ...
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred
Le #15353281
Dans : news:,
Tschuß disait :
Bonjour,



Bonjour,

J'ai un fichier texte des plus simple et je veux retirer
systèmatiquement la dernière ligne.
Bon, je pourrais faire une boucle pour résoudre le pb mais j'ai
souvenir qu'en ouvrant le fichier en binaire il est possible de
réduire directement le fichier au moyen d'une soustraction sur sa
taille.
L'opération est un poil compliqué, je l'admets, mais elle a le mérite
d'être extrêment rapide.

J'ai cherché l'info sur de nombreux forum mais sans succès



On peut utiliser l'API SetEndOfFile

http://allapi.mentalis.org/apilist/SetEndOfFile.shtml

Mais cela n'empêchera pas d'ouvrir tout d'abord le fichier (en binaire)
et de le parcourir à partir de la fin pour trouver le début de la
dernière ligne (sauf si elles sont toutes de même longueur).

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
tking
Le #15353271
Tschuß a exprimé avec précision :
Bonjour,

J'ai un fichier texte des plus simple et je veux retirer
systèmatiquement la dernière ligne.
Bon, je pourrais faire une boucle pour résoudre le pb mais j'ai
souvenir qu'en ouvrant le fichier en binaire il est possible de
réduire directement le fichier au moyen d'une soustraction sur sa
taille.
L'opération est un poil compliqué, je l'admets, mais elle a le mérite
d'être extrêment rapide.

J'ai cherché l'info sur de nombreux forum mais sans succès

Merci de m'apporter vos réponses ou vos pistes.



Questions: Ton fichier texte a-il systèmatiquement la même taille ?
Chaque retour à la ligne doit se faire par un caractère retour ?
Le nombre de lignes est-il identiques à chaque fois ?

Une des solutions serait de compter le nombre de retour à la ligne, au
total, de calculer la longueur jusqu'au dernier ou avant dernier et
ensuite tu peux determiner à quel endroit couper.

Bon courage.
Patrice Henrio
Le #15353261
Sans vérification voici mon idée
considérer le fichier comme un tableau dynamique de byte
la taille du tableau est la longueur du fichier
partir de la fin et rechercher le premier eol (end of line)
couper à cet endroit par un redimensionnement et enregistrer le tableau dans
un fichier (voire le même)

lire la faq : http://faq.vb.free.fr/index.php?question4
sur la lecture et l'enregistrement de tableau dynamique

Fred" %
Dans : news:,
Tschuß disait :
Bonjour,



Bonjour,

J'ai un fichier texte des plus simple et je veux retirer
systèmatiquement la dernière ligne.
Bon, je pourrais faire une boucle pour résoudre le pb mais j'ai
souvenir qu'en ouvrant le fichier en binaire il est possible de
réduire directement le fichier au moyen d'une soustraction sur sa
taille.
L'opération est un poil compliqué, je l'admets, mais elle a le mérite
d'être extrêment rapide.

J'ai cherché l'info sur de nombreux forum mais sans succès



On peut utiliser l'API SetEndOfFile

http://allapi.mentalis.org/apilist/SetEndOfFile.shtml

Mais cela n'empêchera pas d'ouvrir tout d'abord le fichier (en binaire) et
de le parcourir à partir de la fin pour trouver le début de la dernière
ligne (sauf si elles sont toutes de même longueur).

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Aski
Le #15353251
Hello Tschuß,

Tu as écrit :

Bonjour,

J'ai un fichier texte des plus simple et je veux retirer
systèmatiquement la dernière ligne.
Bon, je pourrais faire une boucle pour résoudre le pb mais j'ai
souvenir qu'en ouvrant le fichier en binaire il est possible de
réduire directement le fichier au moyen d'une soustraction sur sa
taille.
L'opération est un poil compliqué, je l'admets, mais elle a le mérite
d'être extrêment rapide.

J'ai cherché l'info sur de nombreux forum mais sans succès

Merci de m'apporter vos réponses ou vos pistes.



J'y vais de mon idée.
- Placer la totalité du fichier dans une chaîne par
dim l as long
l = FileLen(LeFichier)
Open LeFichier For Binary As #1
'Utiliser la fonction Input() ou Get et non Input# pour lire tous
les caractères
S = Space$(l)
Get #1, , S
Close 1
- Rechercher le dernier retour de chariot (VbCrLf) par InStrRev
- Réduire la chaîne S par Left$() ou Mid$()
Tschuß
Le #15353121
Merci à tous pour vos réponses
je vais essayer cette dernière solution car pour répondre à tking, mon
fichier n'a pas la même taille mais la largueur est toujours la même
(133 charactères avant le retour chariot)

Bon, je m'y mets demain (j'vais tout de même pas faire d'heure sup)

On 9 oct, 13:03, "Aski"
Hello Tschuß,

Tu as écrit :

> Bonjour,

> J'ai un fichier texte des plus simple et je veux retirer
> systèmatiquement la dernière ligne.
> Bon, je pourrais faire une boucle pour résoudre le pb mais j'ai
> souvenir qu'en ouvrant le fichier en binaire il est possible de
> réduire directement le fichier au moyen d'une soustraction sur sa
> taille.
> L'opération est un poil compliqué, je l'admets, mais elle a le mé rite
> d'être extrêment rapide.

> J'ai cherché l'info sur de nombreux forum mais sans succès

> Merci de m'apporter vos réponses ou vos pistes.

J'y vais de mon idée.
- Placer la totalité du fichier dans une chaîne par
dim l as long
l = FileLen(LeFichier)
Open LeFichier For Binary As #1
'Utiliser la fonction Input() ou Get et non Input# pour lire tous
les caractères
S = Space$(l)
Get #1, , S
Close 1
- Rechercher le dernier retour de chariot (VbCrLf) par InStrRev
- Réduire la chaîne S par Left$() ou Mid$()


Aski
Le #15353111
Hello Tschuß,

Merci du retour.
--
Aski

Merci à tous pour vos réponses
je vais essayer cette dernière solution car pour répondre à tking, mon
fichier n'a pas la même taille mais la largueur est toujours la même
(133 charactères avant le retour chariot)

Bon, je m'y mets demain (j'vais tout de même pas faire d'heure sup)

On 9 oct, 13:03, "Aski"
Hello Tschuß,

Tu as écrit :

Bonjour,



J'ai un fichier texte des plus simple et je veux retirer
systèmatiquement la dernière ligne.
Bon, je pourrais faire une boucle pour résoudre le pb mais j'ai
souvenir qu'en ouvrant le fichier en binaire il est possible de
réduire directement le fichier au moyen d'une soustraction sur sa
taille.
L'opération est un poil compliqué, je l'admets, mais elle a le
mérite d'être extrêment rapide.



J'ai cherché l'info sur de nombreux forum mais sans succès



Merci de m'apporter vos réponses ou vos pistes.



J'y vais de mon idée.
- Placer la totalité du fichier dans une chaîne par
dim l as long
l = FileLen(LeFichier)
Open LeFichier For Binary As #1
'Utiliser la fonction Input() ou Get et non Input# pour lire
tous les caractères
S = Space$(l)
Get #1, , S
Close 1
- Rechercher le dernier retour de chariot (VbCrLf) par InStrRev
- Réduire la chaîne S par Left$() ou Mid$()




Publicité
Poster une réponse
Anonyme