Charger des fichiers texte dans une variable

cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008 - 2 août 2002 à 16:37
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008 - 6 août 2002 à 00:24
Bonjour,

Pour l'instant j'utilise cette routine pour charger des fichier texte dans une variable (pour après faire une recherche):

Open strFileList(longE) For Input As #1
Do While Not EOF(1)
DoEvents 'Juste pour pouvoir faire un Cancel
Line Input #1, strA
strStoreInRam = strStoreInRam + strA Loop
Close #1

Ma question: Il y a moyen d'aller plus vite ?

Merci
Olivier

6 réponses

thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
2 août 2002 à 18:05
Peut être as tu essayé le FileSystemObject ?
L'avantage c'est que tu n'utiliseras pas de boucle pour lire le fichier.
0
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
2 août 2002 à 18:13
Ajout le référence Microsoft Scripting Runtime
puis

Public Sub test()
Debug.Print getFichier("c:\test.txt")
End Sub

Public Function getFichier(chemin As String) As String
Dim oFso As Scripting.FileSystemObject
Dim oFile As Scripting.File
Set oFso = New Scripting.FileSystemObject
Set oFile = oFso.GetFile(chemin)
getFichier = oFile.OpenAsTextStream(ForReading).ReadAll
End Function

:)
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
5 août 2002 à 09:16
Impecable, merci.

Mais, ma routine, certe beaucoup plus lente, avait un aventage, c'est que les lignes d'un texte était coller l'une a l'autre (pas de CR+LF).
De plus j'utilise une variante qui met a la place du CR+LF un caractère.

Il y a t'il moyen de faire la même chose ?

Merci
Olivier
Ps: Mon but est de faire des recherches dans le texte, pour extraire certaine information, je ne modifie en rien celui-ci. Je le vire quant j'ai fini.
0
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
5 août 2002 à 11:13
Tu peux remplacer tous les CRLF d'une chaine d'un coup avec :
chaine = Replace(chaine, VbCrLf, "")

Tu peux aussi lire le fichier ligne par ligne, mais ce sera plus lent :
Public Function getFichier(chemin As String) As String
Dim oFso As Scripting.FileSystemObject
Dim oFile As Scripting.File ' Fichier
Dim oTextStream As Scripting.TextStream ' Flux de texte
Dim sTemp As String
Set oFso = New Scripting.FileSystemObject
Set oFile = oFso.GetFile(chemin)
Set oTextStream = oFile.OpenAsTextStream(ForReading)
' Pour chaque ligne tant qu'on est pas à la fin du flux
Do While Not oTextStream.AtEndOfStream
sTemp = sTemp & oTextStream.ReadLine
Loop
getFichier = sTemp
End Function

Autre chose, pour optimiser encore plus la rapidité, lors de la recherche de chaine, tu peux utiliser les expressions régulières
(j'ai mis une source : http://www.vbfrance.com/article.aspx?Val=5318
et Nix aussi :
http://www.vbfrance.com/article.aspx?Val=3296
0

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

Posez votre question
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
6 août 2002 à 00:23
merci de ta patience.

>Tu peux remplacer tous les CRLF d'une chaine d'un coup avec :
>chaine = Replace(chaine, VbCrLf, "")

Je connaissais pas cette fonction...

Encore merci, cela va beaucoup m'aidé.
a+
Olivier

Tu peux aussi lire le fichier ligne par ligne, mais ce sera plus lent :
Public Function getFichier(chemin As String) As String
Dim oFso As Scripting.FileSystemObject
Dim oFile As Scripting.File ' Fichier
Dim oTextStream As Scripting.TextStream ' Flux de texte
Dim sTemp As String
Set oFso = New Scripting.FileSystemObject
Set oFile = oFso.GetFile(chemin)
Set oTextStream = oFile.OpenAsTextStream(ForReading)
' Pour chaque ligne tant qu'on est pas à la fin du flux
Do While Not oTextStream.AtEndOfStream
sTemp = sTemp & oTextStream.ReadLine
Loop
getFichier = sTemp
End Function

Autre chose, pour optimiser encore plus la rapidité, lors de la recherche de chaine, tu peux utiliser les expressions régulières
(j'ai mis une source : http://www.vbfrance.com/article.aspx?Val=5318
et Nix aussi :
http://www.vbfrance.com/article.aspx?Val=3296
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
6 août 2002 à 00:24
Merci de ta patience, cela va beaucoup m'aider.

a+
Olivier
0
Rejoignez-nous