Ouvrir un fichier text de grande capacité dans un textbox

cs_BadNews Messages postés 98 Date d'inscription samedi 30 novembre 2002 Statut Membre Dernière intervention 10 septembre 2007 - 6 juin 2004 à 21:08
cs_BadNews Messages postés 98 Date d'inscription samedi 30 novembre 2002 Statut Membre Dernière intervention 10 septembre 2007 - 7 juin 2004 à 01:06
Je sais qu'il y a environ 500 sources qui explique comment ouvrir un fichier texte mais ça fait 2 jours que je cherche et que je teste des bouts de code et c'est toujours pareil, je n'ai jamais trouvé une façon de lire un fichier texte de grande capacité. J'ai trouvé plusieurs façons d'ouvrir un fichier texte mais aucune d'elle ne semble fonctionner pour ce qui est des fichiers à grande capacité.

Exemple 1:

Open MonFichier For Input As #1
While Not EOF(1)
Input #1, a$
Text1 = Text1 + a$ + Chr$(13) + Chr$(10)
Wend
Close #1

Exemple 2

Dim a As Integer
a = FreeFile
Open MonFichier For Input As #a
Text1.Text = Input(LOF(a), a)
Close #a

Voici les problèmes que je rencontre. Dans l'exemple 1, une boucle est créé pour récupérer chaque lignes du fichier texte. Si le fichier est moindrement lour, ça prend une éternité avant de s'ouvrir. Dans l'exemple 2, on place le fichier texte en mémoire avant de l'affichier. Corrigez moi si je me trompe, mais FreeFile ne peut valoir plus de 32767, donc si le fichier texte à lire est plus grand que la valeur de FreeFile, le texte ne seras q'afficher à moitié (ou moin). Du moin c'est ce qui arrive lors que je test cette fonction.

Je cherche donc un moyen d'ouvrir les fichiers textes de grande capacité et de les afficher dans un textbox le plus rapidement possible, comme le notepad.
Ah oui! Pour ceux qui me donnerais comme réponce d'utiliser un RichTextBox et bien sachez que j'éprouve un problème l'à aussi. Lorsque je "load" le fichier en question, et que je met préalablement la propriété ScroolBars 3 (both), et bien sûr Miltilines True (par défaut), le text qui est "loadé" n'apparait pas comme il doit. C'est à dire que le RichTextBox génère des retours à la ligne (celon la largeur de mon rtb) et que le text n'est pas affiché comme l'original. Bref, le ScroolBar horizontal ne fonctionne pas étant donné que la propriété Multilines = True. Comme dois-je faire pour qu'il n'y ait pas de retour à la ligne, pour avoir les 2 ScroolBars fonctionnelles, propriété Multilines = True et pour que le texte s'affiche comme l'original?

Merci de bien vouloir aider un pauvre débutant. =)

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juin 2004 à 23:41
Salut BadNews
Ne confonds pas tout : FreeFile est simplement là pour numéroter les fichiers que l'on ouvre, cela veut dire que l'on pourrait en ouvrir 32767 en même temps, ce n'est pas ça taille !
Pour lire un fichier d'une seule traite, il faut préalablement dimensionner la variable qui va recevoir le contenu à la taille du fichier :
Dim a As String, ff As FreeFile
ff = FreeFile
Open "C:\MonFichier.txt" For Binary As #ff
  a = String(FileLen("C:\MonFichier.txt", " ") ' espaces
  Get #ff, , a
Close #ff

Peut-être cette méthode sera t-elle plus rapide ... A tester

En ce qui concernent les TextBox, l'aide dit : "La valeur de la propriété Text d'un contrôle TextBox est limitée à 2 048 caractères, sauf si la propriété MultiLine est True, auquel cas cette limite est fixée aux environs de 32 Ko." --> 32767 caractères maximum !!

La solution est bien sûr dans le RichTextBox.
Malheuresement, j'ai remarqué ce que tu dis (ligne sont swappée) et n'ai pas trouvé d'autre solution que de jouer avec la taille/style de la police pour que le texte s'affiche correctement.

Vala
Jack
0
cs_BadNews Messages postés 98 Date d'inscription samedi 30 novembre 2002 Statut Membre Dernière intervention 10 septembre 2007 1
7 juin 2004 à 00:52
Merci pour ta rapidité à répondre à ma question et pour m'avoir éclairé au sujet du FreeFile. Tu as glissé 2 erreurs d'inattention =) dans ton code mais je les ai arrangé et il fonctionne. C'est ulttra rapide, comme une des versions que je connaissais déja:

Dim a As Integer
a = FreeFile
Open MonFichier For Input As #a
Text1.Text = Input(LOF(a), a)
Close #a

Mais mon problème n'est pas résolu. En effet, mon fichier text peut varier de taille allant de 1ko à 250ko et plus. Je n'étais pas sur si il y avais un maximum de caractères pour les textbox (je m'en doutais mais je pensais qu'il étais immensément haut) et maintenant, grâce à toi et ton aide, j'ai vite comprit qu'il y en avait un. Il est en fait de 65535 (je crois) et mes fichiers peuvent le dépasser largement. Je vais donc trouver une façon d'ouvrir mes fichier autrement qu'avec un textbox ou un richtextbox (car j'ai toujours le même problème du retour à la ligne), comme par exemple avec leur application par défault ou encore, avec explorer, je ne penserais pas avoir de problèmes pour ce qui est du nombre de caractères de ces façons l'à. =)

Merci encore de ton aide, si tu as d'autre idée pour m'aider, tu es le bienvenu. =)

@+
0
cs_BadNews Messages postés 98 Date d'inscription samedi 30 novembre 2002 Statut Membre Dernière intervention 10 septembre 2007 1
7 juin 2004 à 01:06
J'ai pensé à ça pis dans fond, le "best" serais que j'ouvre le fichier dans le notepad (ou autre editeur de texte). Jai cependant besoin de savoir comment changé la police\taille du notepad (ou autre editeur de texte) lors de son ouverture.

Merci de bien vouloir m'aider .=)
0
Rejoignez-nous