Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Réduire un fichier texte de X caractères

6 réponses
Avatar
Tschuß
Bonjour,

J'ai un fichier texte des plus simple et je veux retirer
syst=E8matiquement la derni=E8re ligne.
Bon, je pourrais faire une boucle pour r=E9soudre le pb mais j'ai
souvenir qu'en ouvrant le fichier en binaire il est possible de
r=E9duire directement le fichier au moyen d'une soustraction sur sa
taille.
L'op=E9ration est un poil compliqu=E9, je l'admets, mais elle a le m=E9rite
d'=EAtre extr=EAment rapide.

J'ai cherch=E9 l'info sur de nombreux forum mais sans succ=E8s

Merci de m'apporter vos r=E9ponses ou vos pistes.

6 réponses

Avatar
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)
Avatar
tking
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.
Avatar
Patrice Henrio
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" a écrit dans le message de news:
%
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)


Avatar
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$()
Avatar
Tschuß
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" wrote:
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$()


Avatar
Aski
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" wrote:
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$()