trie et affichage d'un fichier

Le
Rosalie Mignon
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les
lignes contenant des informations utiles soit une dizaine de lignes.
De plus, je prevois une zone de saisie ou l'utiisateur pourra indiquer les
informations qu'il souhaite voire afficher et donc je devrais mettre a jour
l'affichage en consequence.

Pensez-vous que je doive afficher ces lignes dans une List, un textbox ou un
richbox sachant que je n'ai pas de mise en forme particuliere a faire.

Merci d'avance.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LE TROLL
Le #21248371
Bonjour,

Les afficher dans une TextBox multilines car ceci permet de faire un
copier/coller, ce que ne permet pas directement la liste, par contre,
employer un RTF pour quelques lignes sans besoin de mise en page semble
luxueux

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Rosalie Mignon" news:4b82c1c1$0$18390$
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les
lignes contenant des informations utiles soit une dizaine de lignes.
De plus, je prevois une zone de saisie ou l'utiisateur pourra indiquer les
informations qu'il souhaite voire afficher et donc je devrais mettre a
jour l'affichage en consequence.

Pensez-vous que je doive afficher ces lignes dans une List, un textbox ou
un richbox sachant que je n'ai pas de mise en forme particuliere a faire.

Merci d'avance.



at
Le #21248511
Rosalie Mignon avait prétendu :
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les lignes
contenant des informations utiles soit une dizaine de lignes.
De plus, je prevois une zone de saisie ou l'utiisateur pourra indiquer les
informations qu'il souhaite voire afficher et donc je devrais mettre a jour
l'affichage en consequence.

Pensez-vous que je doive afficher ces lignes dans une List, un textbox ou un
richbox sachant que je n'ai pas de mise en forme particuliere a faire.

Merci d'avance.



Tu dois bien avoir des critères qui te permettent d'orienter ton choix,
sinon pourquoi poser la question :)

Tu fais le tri au chargement ? Pour l'affichage en retour, c'est entre
l'esthétique, la facilité de lecture et la nécessité de fournir des
dépendances (DLL & cie) en fonction du composant choisi.

Tu peux aussi afficher en HTML dans une page WEB avec webbroswer...
comme quoi les choix ne manquent pas.

A+
Jean-marc
Le #21249351
Rosalie Mignon wrote:
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les
lignes contenant des informations utiles soit une dizaine de lignes.



Pour ce genre de choses, le plus simple est une lecture ligne à ligne
avec Line Ipnut. C'est compatible avec un fichier de 5 Mo, encore
assez petit.

De plus, je prevois une zone de saisie ou l'utiisateur pourra
indiquer les informations qu'il souhaite voire afficher et donc je
devrais mettre a jour l'affichage en consequence.



Je suppose que tu parles de l'affichage de la dizaine de lignes
choisies, pas des x milliers de lignes du fichier entier ?

Pensez-vous que je doive afficher ces lignes dans une List, un
textbox ou un richbox sachant que je n'ai pas de mise en forme
particuliere a faire.



En supposant que l'affichage est bien celui du résultat filtré
(qq dizaines de lignes) :

Le plus simple : un textbox multiligne
Alternative :un control WebBrowser, en fonction des besoins

Je déconseille la liste, peu pratique pour tout ce qui est
copier/coller

Ca dépend un peu de ce que tu veux faire et tout ça.

Merci d'avance.



De rien :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Rosalie Mignon
Le #21250421
Bonjour

Merci pour cet avis, je vais donc m'orienter vers le Textbox.

"LE TROLL" ejd%23Ru%
Bonjour,

Les afficher dans une TextBox multilines car ceci permet de faire un
copier/coller, ce que ne permet pas directement la liste, par contre,
employer un RTF pour quelques lignes sans besoin de mise en page semble
luxueux

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Rosalie Mignon" news:4b82c1c1$0$18390$
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les
lignes contenant des informations utiles soit une dizaine de lignes.
De plus, je prevois une zone de saisie ou l'utiisateur pourra indiquer
les informations qu'il souhaite voire afficher et donc je devrais mettre
a jour l'affichage en consequence.

Pensez-vous que je doive afficher ces lignes dans une List, un textbox ou
un richbox sachant que je n'ai pas de mise en forme particuliere a faire.

Merci d'avance.






Rosalie Mignon
Le #21250411
Bonjour

Merci pour cet avis, je vais donc m'orienter vers le Textbox.

"at" 4b82ce79$0$15831$
Rosalie Mignon avait prétendu :
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les
lignes contenant des informations utiles soit une dizaine de lignes.
De plus, je prevois une zone de saisie ou l'utiisateur pourra indiquer
les informations qu'il souhaite voire afficher et donc je devrais mettre
a jour l'affichage en consequence.

Pensez-vous que je doive afficher ces lignes dans une List, un textbox ou
un richbox sachant que je n'ai pas de mise en forme particuliere a faire.

Merci d'avance.



Tu dois bien avoir des critères qui te permettent d'orienter ton choix,
sinon pourquoi poser la question :)

Tu fais le tri au chargement ? Pour l'affichage en retour, c'est entre
l'esthétique, la facilité de lecture et la nécessité de fournir des
dépendances (DLL & cie) en fonction du composant choisi.

Tu peux aussi afficher en HTML dans une page WEB avec webbroswer... comme
quoi les choix ne manquent pas.

A+




Rosalie Mignon
Le #21250431
Bonjour

Je vais donc m'orienter vers le Textbox.
En fait, j'ai deux fichiers de 5 Mo environ a traiter en meme temps.
Pour chacun des fichiers, je dois realiser un affichage simultane a l'ecran
suivant un filtre predetermine
puis, suivant la saisie eventuelle de l'utilisateur, refiltrer a nouveau ces
fichiers a la recherche des nouvelles infos
et les afficher.
Sauriez vous m'indiquer un moyen plus rapide que le classique mais efficace
Pour un fichier
lire la ligne (line input)
recherche des occurrences (instr)
affichage de la ligne eventuel (gestion de la textbox)
Fichier suivant

Merci d'avance.


"Jean-marc" 4b82e490$0$2855$
Rosalie Mignon wrote:
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les
lignes contenant des informations utiles soit une dizaine de lignes.



Pour ce genre de choses, le plus simple est une lecture ligne à ligne
avec Line Ipnut. C'est compatible avec un fichier de 5 Mo, encore
assez petit.

De plus, je prevois une zone de saisie ou l'utiisateur pourra
indiquer les informations qu'il souhaite voire afficher et donc je
devrais mettre a jour l'affichage en consequence.



Je suppose que tu parles de l'affichage de la dizaine de lignes
choisies, pas des x milliers de lignes du fichier entier ?

Pensez-vous que je doive afficher ces lignes dans une List, un
textbox ou un richbox sachant que je n'ai pas de mise en forme
particuliere a faire.



En supposant que l'affichage est bien celui du résultat filtré
(qq dizaines de lignes) :

Le plus simple : un textbox multiligne
Alternative :un control WebBrowser, en fonction des besoins

Je déconseille la liste, peu pratique pour tout ce qui est
copier/coller

Ca dépend un peu de ce que tu veux faire et tout ça.

Merci d'avance.



De rien :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Jean-marc
Le #21250451
Rosalie Mignon wrote:
Bonjour



Bonjour,

Je vais donc m'orienter vers le Textbox.
En fait, j'ai deux fichiers de 5 Mo environ a traiter en meme temps.
Pour chacun des fichiers, je dois realiser un affichage simultane a
l'ecran suivant un filtre predetermine



OK.

puis, suivant la saisie eventuelle de l'utilisateur, refiltrer a
nouveau ces fichiers a la recherche des nouvelles infos
et les afficher.



OK

Sauriez vous m'indiquer un moyen plus rapide que le classique mais
efficace Pour un fichier
lire la ligne (line input)
recherche des occurrences (instr)
affichage de la ligne eventuel (gestion de la textbox)
Fichier suivant



Il y a effectivement un moyen plus "rapide". Ce moyen est décrit ici
dans cet article de la FAQ:
http://faq.vb.free.fr/index.php?question5

Le principe est de tout lire dans un buffer puis d'utiliser Split()
pour faire un tableau de lignes. On parcourt ensuie ce tableau
et on filtre avec Instr().

Le gain en temps devrait déjà être substantiel.

Pour des fichiers de l'ordre de 5 Mo, cette méthode est applicable et
tout à fait suffisante.

Pour de plus gros fichiers ou pour gagner encore en vitesse et en fluidité
(partage du boulot entre le controlleur de disque et le processeur), il
existe
encore d'autres techniques, un peu plus compliquées à mettre en oeuvre.
Sans doute pas nécessaire ici.


--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
LE TROLL
Le #21251101
Bonjour,

Suite à ce qui a été dit ensuite, en effet, par habitude des logiciels
je me suis aperçu qu'il fallait généralement toujours mettre le résultat
final dans un objet qui permettait le copier/coller, afin que l'utilisateur
ait le meilleur confort.

Concernant les fichier et en sus de ce qui a été indiqué, en fait ça
dépend de plusieurs critères.
Déjà, et a contrario, moi je trouve qu'un fichier texte de 5 Mo c'est
énorme, car ça fait environ la taille de 15 romans de 500 pages, alors s'il
faut lire les lignes une par une et les tester, ben...

Si tu trouves que c'est trop long pour être acceptable, tu peux
l'indexer avec un pré-fichier (l'index), mais ceci à condition que les
données ne soient pas changées trop souvent, voir aussi si tu peux mettre
rationnellement des données de taille fixe dans le fichier, chaque ligne
ayant la même taille tu peux ensuite y aller au pointeur, ce qui est plus
rapide.
dim maligne as string * 50 ' octets
maligne = "...." & vbcrlf

Ça dépend aussi de ce qui est recherché, comment c'est organisé dans le
fichier, le choix de recherche se fait en fonction de tous ces éléments.
Identiquement, si tu passes par des listes pour faire des tris, il faut les
rendre invisible durant leur chargement ça va plus vite.

Par exemple ici :
http://irolog.free.fr/irolog_vente/rimes_v/index.htm
J'ai fait des rimes graphiques et phonétiques, sur 250.000 lignes d'un mot
(10 octets environ), ben ça met quand même 8 secondes environ, de facto,
après il aufait fallu trouver d'autre méthodes de recherche...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Rosalie Mignon" news:4b836798$0$21303$
Bonjour

Merci pour cet avis, je vais donc m'orienter vers le Textbox.

"LE TROLL" ejd%23Ru%
Bonjour,

Les afficher dans une TextBox multilines car ceci permet de faire un
copier/coller, ce que ne permet pas directement la liste, par contre,
employer un RTF pour quelques lignes sans besoin de mise en page semble
luxueux

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Rosalie Mignon" news:4b82c1c1$0$18390$
Bonjour

Je dois filtrer un fichier .TXT (5Mo environ), pour n'afficher que les
lignes contenant des informations utiles soit une dizaine de lignes.
De plus, je prevois une zone de saisie ou l'utiisateur pourra indiquer
les informations qu'il souhaite voire afficher et donc je devrais mettre
a jour l'affichage en consequence.

Pensez-vous que je doive afficher ces lignes dans une List, un textbox
ou un richbox sachant que je n'ai pas de mise en forme particuliere a
faire.

Merci d'avance.










Jean-Marc
Le #21252291
On Feb 23, 10:34 am, "LE TROLL"
        Bonjour,



Hello !

Déjà, et a contrario, moi je trouve qu'un fichier texte de 5 Mo c'est
énorme,



Non, 5 Mo c'est un petit fichier. Disons 50000 lignes de 100
caractères, c'est très petit.

Pour info: lecture naïve ligne à ligne avec Line Input : 300
milisecondes, (1/3 de seconde).

car ça fait environ la taille de 15 romans de 500 pages, alors s'il
faut lire les lignes une par une et les tester, ben...



Pour les tester en plus (avec un simple Instr) : 500 milisecondes en
tout (1/2 seconde).

    Si tu trouves que c'est trop long pour être acceptable



(il faudrait être difficile : 500 milisecondes, c'est juste un peu au
dessus de ce qui est perceptible par l'oeil humain...)

tu peux
l'indexer avec un pré-fichier (l'index), mais ceci à condition que le s
données ne soient pas changées trop souvent



Valable uniquement pour des données statiques - Comme il faut de toute
façon vérifier si le fichier a changé depuis le dernier index,
l'indexation sera plus couteuse qu'une lecture bête et méchante.

voir aussi si tu peux mettre
rationnellement des données de taille fixe dans le fichier, chaque lign e
ayant la même taille tu peux ensuite y aller au pointeur, ce qui est pl us
rapide.
dim maligne as string * 50 ' octets
maligne = "...." & vbcrlf



Certainement pas plus rapide. Et de toute façon complètement inutile
ici.

    Ça dépend aussi de ce qui est recherché, comment c'est orga nisé dans le
fichier, le choix de recherche se fait en fonction de tous ces élémen ts.



Oui mais ici c'est trivial.

Identiquement, si tu passes par des listes pour faire des tris, il faut l es
rendre invisible durant leur chargement ça va plus vite.



C'est vrai et faux en même temps: Rendre invisible une ListeBox
pendant son chargement accélère en effet les choses. MAIS 1) utiliser
une ListBox pour trier est un non-sens, voire une hérésie et 2)
charger plus d'une cinquantaine de lignes dans une ListeBox est une
faute grave de conception d'interface (et de conception tout court
probablement).


    Par exemple ici :http://irolog.free.fr/irolog_vente/rimes_v/index .htm
J'ai fait des rimes graphiques et phonétiques, sur 250.000 lignes d'un mot
(10 octets environ), ben ça met quand même 8 secondes environ, de fac to,
après il aufait fallu trouver d'autre méthodes de recherche...



Je me demande ce qui prend 8 secondes :-) La lecture de 2,5 Mo ne
prend pas plus de un dixieme de seconde. C'est donc ton traitement qui
est over-couteux, pas le traitement du fichier...

Cordialement;

JM
LE TROLL
Le #21254601
Cher Jean-Marc,

Oui chef, tu dois parler de split, d'une lecture RAM, moi je te parle
d'une lecture séquentielle sur disque avec plusieurs tests (une dizaine par
ligne) afin de chercher les rimes, puis chargement en liste, ce qui explique
le temps.

Il est certain qu'en RAM ça va plus vite, puisque sur disque nous sommes
à 7 ms environ, alors qu'en RAM davantage à 70ns, ce qui est loin d'être
pareil, toutefois et pour l'exemple, j'ai un vieux notebook PC de 400 Mo de
RAM avec XPsp2Pro; ben je peux te dire que si tu lui réquisition 50 mo sur
ses 400, il risque de ne pas aimer, car il ne faut point oublier que l'OS en
prend déjà une grande partie (de la RAM), ainsi, la mémoire c'est plus
rapide, à condition de s'assurer que ça tient, à défaut de se retrouver avec
de la pseudo-mémoire sur disque...

Si à l'origine des fichiers on a fait des constructions à deux fichier
pour indexer les datas, voire trois fichiers afin de faire un multicritère
(qui devient de facto quasiment un BDD), c'est peut être qu'il y avait une
raison, la raison est celle que si tu mets en RAM comme tu veux le faire,
500 Mo, et que tous tes programmes sont ainsi, si jamais plusieurs tournent
en même temps, tu risques de te retrouver en pseudo-mémoire sur disque (qui
naguère faisait un dépassement de capacité de la RAM).

Je crois que comme je dis "il faut voir", l'indexé et le multicritères
est une excellente solution avec des datas fixes, car au pointeur ça va
quand même vite sur le disque, toutefois, comme tu le remarques, c'est
davantage pour les fichiers qu'on a pas trop souvent à réindexer, voire
jamais, sinon on perd le bénéfice de la structure. Et la mémoire, c'est en
fonction des sa taille et des programme qui y accèdent, ou alors on fait le
fichier en RAM par morceaux.

Pour l'anecdote, quand j'étais sous Prologue-Bull France en OS BAL, il y
avait des truc merveilleux, que Microsoft n'a même pas pompé, s'ajustant
simplement au CPM (8.3), en effet :
- La lettre "M" était une lettre de disque réservée pour la mémoire, qui se
lisait comme un disque, il suffisait de faire:
M = copie > fichier.txt
Et ensuite tu allais via M travailler ton fichier comme s'il était sur le
disque dur, l'avantage était que tu n'avais pas à jongler avec deux
syntaxes, celles de Split et celle du fichier sur disque. Bien évidemment,
en fin d'opération in recopiait M sur C.
- Tu avais une directive "Modif" qui manque tant au fichier DOS.
- Tu avais directement la possibilité de faire un fichier séquentiel indexé,
ou un fichier multicritères (indexé).
Et bien, tout ça pour dire que c'est dommage que ce ne soit pas aussi
simple, c'était, c'est Français, mais on ne sait pas vendre, alors MS a
réussi lui, à vendre un système de gestion des fichiers quatre fois moins
performant, lamentable !

Pour ma part, in fine, je dirais que le choix doit s'opérer en fonction
des critères sus-cités, et non pas être systématique.

Je rends désormais ma copie au chef, qui va se faire une joie de
l'annoter.

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Jean-Marc" news:
On Feb 23, 10:34 am, "LE TROLL"
Bonjour,



Hello !

Déjà, et a contrario, moi je trouve qu'un fichier texte de 5 Mo c'est
énorme,



Non, 5 Mo c'est un petit fichier. Disons 50000 lignes de 100
caractères, c'est très petit.

Pour info: lecture naïve ligne à ligne avec Line Input : 300
milisecondes, (1/3 de seconde).

car ça fait environ la taille de 15 romans de 500 pages, alors s'il
faut lire les lignes une par une et les tester, ben...



Pour les tester en plus (avec un simple Instr) : 500 milisecondes en
tout (1/2 seconde).

Si tu trouves que c'est trop long pour être acceptable



(il faudrait être difficile : 500 milisecondes, c'est juste un peu au
dessus de ce qui est perceptible par l'oeil humain...)

tu peux
l'indexer avec un pré-fichier (l'index), mais ceci à condition que les
données ne soient pas changées trop souvent



Valable uniquement pour des données statiques - Comme il faut de toute
façon vérifier si le fichier a changé depuis le dernier index,
l'indexation sera plus couteuse qu'une lecture bête et méchante.

voir aussi si tu peux mettre
rationnellement des données de taille fixe dans le fichier, chaque ligne
ayant la même taille tu peux ensuite y aller au pointeur, ce qui est plus
rapide.
dim maligne as string * 50 ' octets
maligne = "...." & vbcrlf



Certainement pas plus rapide. Et de toute façon complètement inutile
ici.

Ça dépend aussi de ce qui est recherché, comment c'est organisé dans le
fichier, le choix de recherche se fait en fonction de tous ces éléments.



Oui mais ici c'est trivial.

Identiquement, si tu passes par des listes pour faire des tris, il faut
les
rendre invisible durant leur chargement ça va plus vite.



C'est vrai et faux en même temps: Rendre invisible une ListeBox
pendant son chargement accélère en effet les choses. MAIS 1) utiliser
une ListBox pour trier est un non-sens, voire une hérésie et 2)
charger plus d'une cinquantaine de lignes dans une ListeBox est une
faute grave de conception d'interface (et de conception tout court
probablement).


Par exemple ici :http://irolog.free.fr/irolog_vente/rimes_v/index.htm
J'ai fait des rimes graphiques et phonétiques, sur 250.000 lignes d'un mot
(10 octets environ), ben ça met quand même 8 secondes environ, de facto,
après il aufait fallu trouver d'autre méthodes de recherche...



Je me demande ce qui prend 8 secondes :-) La lecture de 2,5 Mo ne
prend pas plus de un dixieme de seconde. C'est donc ton traitement qui
est over-couteux, pas le traitement du fichier...

Cordialement;

JM
Publicité
Poster une réponse
Anonyme