Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lecture fichier texte - Open contre

2 réponses
Avatar
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=Delimited].[" & 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.

2 réponses

Avatar
Jean-marc
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_' ;
Avatar
teddy
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" a écrit dans le message
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_' ;