Ouverture d'un gros fichier .txt et l'afficher rapidement sur une 'form'

kinouseba Messages postés 34 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 8 juillet 2009 - 12 oct. 2005 à 18:39
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 13 oct. 2005 à 17:49
Bonjour à tous,
je souhaite ouvrir un fichier .txt (qui fait environ 18Mo) et afficher son contenu à l'écran (avec une scrollbar verticale !), le tout sur ma 'form' principale et en un temps record !!!!!!
J'ai essayé le TextBox avec un truc du style:

open fichier for input as #1
text1.text=""
do while not eof(1)
doevents
line input #1,data
text1.text=text1.text+data+chr$(13)+chr$(10)
loop
close #1

Mais c'est vraiment trop long, d'autant plus que visiblement, le TextBox a un nombre limité de ligne.

Ensuite, j'ai ouvert un fichier WORD:

Dim wordApp As Word.Application
Set wordApp = CreateObject("Word.application")
wordApp.Visible = True


wordApp.Documents.Open ("c:\fichier.txt")

Ca me convient, c'est assez rapide, mais le fichier s'ouvre sur une autre 'form'.

Comment faire pour qu'il apparaisse sur ma 'form' principale ?
Existe-t-il un composant WORD (ou equivalent) que je pourrais mattre sur ma 'form' ?

Merci de votre aide.

Sébastien

7 réponses

olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
12 oct. 2005 à 19:21
un premier indice est que ta boucle lit ligne à ligne, ce qui peut etre un peu long... esssaye de le lire en binaire en précisant une taille assez importante sur les paquets... t'auras moins de répétition et ca devrait etre plius rapide
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 oct. 2005 à 19:30
Le problème peut aussi venir de l'affichage.

Il ne faut pas que la form soit redessinée à chaque ajout de ligne.

Utilise la propriété autoredraw de la form (Je suis pas sûr que ça marche).

Supprime aussi le DoEvents si tu peux, pour voir si c'est plus rapide...

Ou fait ta chaîne avant de l'afficher.

open fichier for input as #1
chaîne=""
do while not eof(1)
doevents
line input #1,data
chaîne=chaîne+data+chr$(13)+chr$(10)
loop
close #1
text1.text=chaîne

Attention, les chaînes ont une taille maximale.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
12 oct. 2005 à 19:32
essaye cela ...

open fichier for input as #1
text1.text=input(lof(1),1)
close #1
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
12 oct. 2005 à 20:18
Salut, la méthode de crenaurd76 est de loin la plus rapide.
J'ajouterai simplement qu'il faut que tu la propriété multiline de la textbox soit tru et que la propriété scrollbar soit à both.
Ou alors tu utilises le composant "Microsoft Rich textbox" avec la propriété scrollbars = rtfboth.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 oct. 2005 à 20:35
Pas à dire, z'en save des choses les admins !
0
cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 2
12 oct. 2005 à 21:52
As tu essayés avec un richtextbox ?


Warning
Admin Codes-Sources.com
http://www.decompiler-vb.net/
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 oct. 2005 à 17:49
Avec un tichtextbox on ferait juste RichTextBox1.LoadFile("Fichier.txt"), mais suis pas sûr que cela soit plus rapide qu'avec la textbox toute simple. Autre truc pour accélérer le code ... masquer la textbox avant le remplissage et l'afficher juste après.

With Text1
.Visible = False
Open "fichier.text For Input As #1
.Text=Input(Lof(1),1)
.Visible = True
Close #1
End With

Pas sûr que cela fasse gagner bcp, mais dans l'absolu, on y gagne sur un très gros fichier.

Christophe
0
Rejoignez-nous