OVH Cloud OVH Cloud

Lecture d'un fichier texte

14 réponses
Avatar
Alain Ménard
Bonjour,

j'utilise la méthode Scripting.FileSystemObject pour écrire ou lire dans un
fichier texte.

Les données de mon fichier texte se présentent de la manière suivante :

Açores
- Poste -

24/01/1996

12/02/1997

Comme vous le voyez, certaines informations peuvent ne pas exister donc la
ligne est vide.

Si j'écris pour la lecture :

!DateEmission = a.ReadLine

Je peux avoir une erreur si la ligne est vide

Donc j'écris :

If Len(a.ReadLine) > 0 Then !DateEmission = a.ReadLine

et là bizarrement ça plante si la donnée existe.

Une idée ?

Alain Ménard

10 réponses

1 2
Avatar
Fred
Dans le message:429edd6d$0$22612$,
Alain Ménard écrit :
Bonjour,

j'utilise la méthode Scripting.FileSystemObject pour écrire ou lire
dans un fichier texte.

Les données de mon fichier texte se présentent de la manière suivante
:

Açores
- Poste -

24/01/1996

12/02/1997

Comme vous le voyez, certaines informations peuvent ne pas exister
donc la ligne est vide.

Si j'écris pour la lecture :

!DateEmission = a.ReadLine

Je peux avoir une erreur si la ligne est vide

Donc j'écris :

If Len(a.ReadLine) > 0 Then !DateEmission = a.ReadLine

et là bizarrement ça plante si la donnée existe.

Une idée ?



Oui, tu fais deux readline !
une pour le test qui lit une ligne et l'autre pour l'affectation qui lit
donc la ligne suivante ;-)

--
Fred
Avatar
ng
Salut,

Bonjour,

j'utilise la méthode Scripting.FileSystemObject pour écrire ou lire dans
un fichier texte.



Ah non, pas de FSO !
L'instruction open de VB gère très bien les fichiers, et certainement plus
rapidement que FSO.


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
Alain Ménard
Merci Fred,

J'ai modifié et avec ca, ca marche :

vTemp = a.ReadLine
If Len(vTemp) > 0 Then !AnneeEmission = vTemp
vTemp = a.ReadLine
If Len(vTemp) > 0 Then !DateEmission = vTemp
vTemp = a.ReadLine
If Len(vTemp) > 0 Then !DateRetrait = vTemp


Alain

"Fred" a écrit dans le message de
news:
Avatar
Alain Ménard
Bonjour ng,

Oups. Je ne savais pas.

Cependant, l'import/export concerne si peu de données que c'est immédiat.

Alain

"ng" a écrit dans le message de
news:
Avatar
Zoury
Salut Alain ! :O)

La vitesse n'est pas le seul problème d'FSO...
http://faq.vb.free.fr/index.php?question6

Si tu souhaites une alternative simple, jète un oeil sur ma classe CFile
dont la dernière version traine ici :
http://groups.google.com/groups?hl=fr&lr=&th 48186e3a3b78f0&rnum=1

Voici comment lire un fichier ligne par ligne avec la classe :
'***
Dim sFileName As String
Dim file As CFile
Dim i As Long

Set file = New CFile
Call file.OpenFile(sFileName)
For i = 0 To file.LineCount
Debug.Print file.Lines(i)
Next i
***


Si tu ne veux pas d'une classe supplémentaire, voici comment lire un fichier
texte ligne par ligne avec l'instruction Open :
'***
Dim sFileName As String
Dim hFile As Long
Dim sLine As String

sFileName = "c:mon_fichier.txt"

hFile = FreeFile
Open sFileName For Input As #hFile
Do Until EOF(hFile)
Line Input #hFile, sLine
Debug.Print sLine
Loop
Close #hFile
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Alain Ménard" a écrit dans le message de
news:429efe05$0$22624$
Bonjour ng,

Oups. Je ne savais pas.

Cependant, l'import/export concerne si peu de données que c'est immédiat.

Alain

"ng" a écrit dans le message de
news:




Avatar
Alain Ménard
Salut Zoury ! :O) <== ça c du plagia


1000 mercis. Je modifie mon appli.


--
Cordialement

Alain Ménard
Avatar
Guy DETIENNE
Salut ;O)

Je suis d'accord avec toi sur les problèmes potentiels liès à FSO, mais il
ne faut pour autant le bânir. Dans le cadre de développements marginaux et
impactant une population restreinte, pourquoi s'en passer ? Les problèmes
connus pourraient être facilement récupérables.

Ceci dit, je ne l'utilise jamais vu que mes développements impactent une
grande population et, comme le stipule ton lien, autant s'en passer si l'on
peut refaire à l'identique via VB et/ou API (sans parler du gain de
vitesse). Mais implémenter une récursivité dans la notion de fichiers n'est
pas pour le premier venu. Un simple copier-coller de code pourrait suffir
mais sans rien comprendre à ce que l'on fait...

Guy

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Alain ! :O)

La vitesse n'est pas le seul problème d'FSO...
http://faq.vb.free.fr/index.php?question6

Si tu souhaites une alternative simple, jète un oeil sur ma classe CFile
dont la dernière version traine ici :
http://groups.google.com/groups?hl=fr&lr=&th 48186e3a3b78f0&rnum=1

Voici comment lire un fichier ligne par ligne avec la classe :
'***
Dim sFileName As String
Dim file As CFile
Dim i As Long

Set file = New CFile
Call file.OpenFile(sFileName)
For i = 0 To file.LineCount
Debug.Print file.Lines(i)
Next i
***


Si tu ne veux pas d'une classe supplémentaire, voici comment lire un


fichier
texte ligne par ligne avec l'instruction Open :
'***
Dim sFileName As String
Dim hFile As Long
Dim sLine As String

sFileName = "c:mon_fichier.txt"

hFile = FreeFile
Open sFileName For Input As #hFile
Do Until EOF(hFile)
Line Input #hFile, sLine
Debug.Print sLine
Loop
Close #hFile
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Alain Ménard" a écrit dans le message de
news:429efe05$0$22624$
> Bonjour ng,
>
> Oups. Je ne savais pas.
>
> Cependant, l'import/export concerne si peu de données que c'est


immédiat.
>
> Alain
>
> "ng" a écrit dans le message de
> news:
>
>




Avatar
Zoury
> Je suis d'accord avec toi sur les problèmes potentiels liès à FSO, mais il
ne faut pour autant le bânir. Dans le cadre de développements marginaux


et
impactant une population restreinte, pourquoi s'en passer ?



Je sais que je l'air insistant. :O)

Personnellement, je ne connais même pas (ou plus) les objets/fonctions du
FSO... me renseigner à ce sujet serait plus long dans mon cas que de codé
directement en VB.

En fait je ne souhaite qu'aviser les gens afin de leur permettre faire un
choix éclairer selon leur besoin. Personnellement, les problèmes de versions
(déploiement) et le fait que que le Scripting Runtime peut être désactivé
par la sécurité sont les deux causes principales qui m'ont fait abandonner
cette librairie (car elle n'offre pas que le FSO). Pourquoi courrir le
risque, si on peut le prévénir des mois à l'avance ?

Pour ce qui est du reste.. si le programmeur souhaite tout de même
l'employer ce sont de ses affaires. Mais qu'il ne vienne pas dire "je ne
savais pas" ! ;O)

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Alain Ménard
Moi maintenant je sais ;)

--
Cordialement

Alain Ménard


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> Je suis d'accord avec toi sur les problèmes potentiels liès à FSO, mais


il
> ne faut pour autant le bânir. Dans le cadre de développements marginaux
et
> impactant une population restreinte, pourquoi s'en passer ?

Je sais que je l'air insistant. :O)

Personnellement, je ne connais même pas (ou plus) les objets/fonctions du
FSO... me renseigner à ce sujet serait plus long dans mon cas que de codé
directement en VB.

En fait je ne souhaite qu'aviser les gens afin de leur permettre faire un
choix éclairer selon leur besoin. Personnellement, les problèmes de


versions
(déploiement) et le fait que que le Scripting Runtime peut être désactivé
par la sécurité sont les deux causes principales qui m'ont fait abandonner
cette librairie (car elle n'offre pas que le FSO). Pourquoi courrir le
risque, si on peut le prévénir des mois à l'avance ?

Pour ce qui est du reste.. si le programmeur souhaite tout de même
l'employer ce sont de ses affaires. Mais qu'il ne vienne pas dire "je ne
savais pas" ! ;O)

--
Cordialement
Yanick
MVP pour Visual Basic




Avatar
Alain Ménard
Re,

Pourrais tu me dire par quoi remplacer le fso pour écrire les lignes dans le
txt ?

Merci beaucoup

Alain

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Alain ! :O)

La vitesse n'est pas le seul problème d'FSO...
http://faq.vb.free.fr/index.php?question6

Si tu souhaites une alternative simple, jète un oeil sur ma classe CFile
dont la dernière version traine ici :
http://groups.google.com/groups?hl=fr&lr=&th 48186e3a3b78f0&rnum=1

Voici comment lire un fichier ligne par ligne avec la classe :
'***
Dim sFileName As String
Dim file As CFile
Dim i As Long

Set file = New CFile
Call file.OpenFile(sFileName)
For i = 0 To file.LineCount
Debug.Print file.Lines(i)
Next i
***


Si tu ne veux pas d'une classe supplémentaire, voici comment lire un


fichier
texte ligne par ligne avec l'instruction Open :
'***
Dim sFileName As String
Dim hFile As Long
Dim sLine As String

sFileName = "c:mon_fichier.txt"

hFile = FreeFile
Open sFileName For Input As #hFile
Do Until EOF(hFile)
Line Input #hFile, sLine
Debug.Print sLine
Loop
Close #hFile
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Alain Ménard" a écrit dans le message de
news:429efe05$0$22624$
> Bonjour ng,
>
> Oups. Je ne savais pas.
>
> Cependant, l'import/export concerne si peu de données que c'est


immédiat.
>
> Alain
>
> "ng" a écrit dans le message de
> news:
>
>




1 2