Charger des fichiers texte dans une variable

Signaler
Messages postés
116
Date d'inscription
mercredi 5 juin 2002
Statut
Membre
Dernière intervention
17 septembre 2008
-
Messages postés
116
Date d'inscription
mercredi 5 juin 2002
Statut
Membre
Dernière intervention
17 septembre 2008
-
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

Messages postés
186
Date d'inscription
lundi 11 mars 2002
Statut
Membre
Dernière intervention
30 novembre 2010
3
Peut être as tu essayé le FileSystemObject ?
L'avantage c'est que tu n'utiliseras pas de boucle pour lire le fichier.
0
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Statut
Membre
Dernière intervention
30 novembre 2010
3
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
Messages postés
116
Date d'inscription
mercredi 5 juin 2002
Statut
Membre
Dernière intervention
17 septembre 2008

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
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Statut
Membre
Dernière intervention
30 novembre 2010
3
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
Messages postés
116
Date d'inscription
mercredi 5 juin 2002
Statut
Membre
Dernière intervention
17 septembre 2008

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
Messages postés
116
Date d'inscription
mercredi 5 juin 2002
Statut
Membre
Dernière intervention
17 septembre 2008

Merci de ta patience, cela va beaucoup m'aider.

a+
Olivier
0