Lecture fichier texte - Open contre

Le
teddy
Bonjour,

Pour lire un fichier texte avec séparateur de colonnes (fichier de 100 000
lignes environ), j'ai testé 2 méthodes :

1ère méthode avec :

Dim s As String
Open Tfile For Input As #1
Do While Not EOF(1)
Input #1, s
' Traitement
Loop
Close #1

2ème méthode avec le FSO :

Dim s As String
Dim fso As Object, f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(Tfile, 1) ' reading mode
Do While Not f.AtEndOfStream
' Lecture ligne dans Tfile
s = f.ReadLine
' Traitement
Loop
f.Close

La Ière méthode détecte un retour de ligne dans mon fichier texte qui
n'apparait pas avec la 2ème méthode et n'est pas visible avec un éditeur
hexa genre UltraEdit.
Pourtant, mon fichier texte d'origine "Business Objects" semble bien avoir
un problème de formatage (encodage ASCII ou UTF truc ?) quand on l'importe
dans une base de données avec une commande SQL = "SELECT * INTO [" & Ttable
& "] FROM [Text;Database=" & Tpath & ";HDR=YES;FMTÞlimited].[" & Tfile &
"]"
Celà me crée une seule colonne avec toutes les valeurs dedans.

Avez-vous remarqué des comportements différents avec ces 2 méthodes de
lecture de fichier texte ?
Enfin, contrairement à ce que l'on dit souvent, j'ai trouvé FSO très rapide
sous XP PRO SP2.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-marc
Le #15391531
teddy wrote:
Bonjour,

Pour lire un fichier texte avec séparateur de colonnes (fichier de
100 000 lignes environ), j'ai testé 2 méthodes :

1ère méthode avec :

Dim s As String
Open Tfile For Input As #1
Do While Not EOF(1)
Input #1, s
' Traitement ...
Loop
Close #1

2ème méthode avec le FSO :

Dim s As String
Dim fso As Object, f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(Tfile, 1) ' reading mode
Do While Not f.AtEndOfStream
' Lecture ligne dans Tfile
s = f.ReadLine
' Traitement...
Loop
f.Close

La Ière méthode détecte un retour de ligne dans mon fichier texte qui
n'apparait pas avec la 2ème méthode et n'est pas visible avec un
éditeur hexa genre UltraEdit.
Pourtant, mon fichier texte d'origine "Business Objects" semble bien
avoir un problème de formatage (encodage ASCII ou UTF truc ?) quand
on l'importe dans une base de données avec une commande SQL = "SELECT
* INTO [" & Ttable & "] FROM [Text;Database=" & Tpath &
";HDR=YES;FMTÞlimited].[" & Tfile & "]"
Celà me crée une seule colonne avec toutes les valeurs dedans.

Avez-vous remarqué des comportements différents avec ces 2 méthodes
de lecture de fichier texte ?
Enfin, contrairement à ce que l'on dit souvent, j'ai trouvé FSO très
rapide sous XP PRO SP2.



Hello,

Tu trouveras dans la FAQ un article consacré au sujet de la
lecture rapide de fichiers texte:
http://faq.vb.free.fr/index.php?question5

qq remarques sur ton code:

Il faut écrire:
Line Input #f, s au lieu de Input #f,s

D'autre part il faut écrire :

Dim f as Integer

f = Freefile
Open fichier For Input As #f
etc.

La méthode exposée dans la FAQ est très très rapide, incomparablement
plus rapide que la méthode FSO.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
teddy
Le #15390271
OK, je vais voir cette méthode rapide !
Pour ma part, je lis (et copie dans une table SQL Server) un fichier CSV de
77000 lignes avec 10 Colonnes de 50 caractères environ en une vingtaine de
secondes via FSO, je trouvais donc FSO + rapide qu'on ne le dit sur les
forums.
Merci encore.

"Jean-marc" de news: 4727a529$0$29260$
teddy wrote:
Bonjour,

Pour lire un fichier texte avec séparateur de colonnes (fichier de
100 000 lignes environ), j'ai testé 2 méthodes :

1ère méthode avec :

Dim s As String
Open Tfile For Input As #1
Do While Not EOF(1)
Input #1, s
' Traitement ...
Loop
Close #1

2ème méthode avec le FSO :

Dim s As String
Dim fso As Object, f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(Tfile, 1) ' reading mode
Do While Not f.AtEndOfStream
' Lecture ligne dans Tfile
s = f.ReadLine
' Traitement...
Loop
f.Close

La Ière méthode détecte un retour de ligne dans mon fichier texte qui
n'apparait pas avec la 2ème méthode et n'est pas visible avec un
éditeur hexa genre UltraEdit.
Pourtant, mon fichier texte d'origine "Business Objects" semble bien
avoir un problème de formatage (encodage ASCII ou UTF truc ?) quand
on l'importe dans une base de données avec une commande SQL = "SELECT
* INTO [" & Ttable & "] FROM [Text;Database=" & Tpath &
";HDR=YES;FMTÞlimited].[" & Tfile & "]"
Celà me crée une seule colonne avec toutes les valeurs dedans.

Avez-vous remarqué des comportements différents avec ces 2 méthodes
de lecture de fichier texte ?
Enfin, contrairement à ce que l'on dit souvent, j'ai trouvé FSO très
rapide sous XP PRO SP2.



Hello,

Tu trouveras dans la FAQ un article consacré au sujet de la
lecture rapide de fichiers texte:
http://faq.vb.free.fr/index.php?question5

qq remarques sur ton code:

Il faut écrire:
Line Input #f, s au lieu de Input #f,s

D'autre part il faut écrire :

Dim f as Integer

f = Freefile
Open fichier For Input As #f
etc.

La méthode exposée dans la FAQ est très très rapide, incomparablement
plus rapide que la méthode FSO.

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






Publicité
Poster une réponse
Anonyme