OVH Cloud OVH Cloud

Nombre de lignes d'un fichier texte

6 réponses
Avatar
Nicolas
Bonjour,

Je cherche =E0 r=E9cup=E9rer le nombre de lignes d'un fichier=20
texte sans avoir =E0 le balayer avec un code du genre :

Dim Ligne as String
Dim i as Integer
Open "fichier.txt" For Input As #1
Do Until EOF(1)
i =3D i + 1
Line Input #1, Ligne
Loop
Close #1
MsgBox i & " lignes"

Merci d'avance et bonne prog

Nicolas

6 réponses

Avatar
EddiGordo
"Nicolas" avait énoncé :
Bonjour,

Je cherche à récupérer le nombre de lignes d'un fichier
texte sans avoir à le balayer avec un code du genre :

Dim Ligne as String
Dim i as Integer
Open "fichier.txt" For Input As #1
Do Until EOF(1)
i = i + 1
Line Input #1, Ligne
Loop
Close #1
MsgBox i & " lignes"

Merci d'avance et bonne prog

Nicolas


Bonjour

Tu peux peut-être compter le nombre de retour chariot du fichier, cela
devrait fonctionner pour la plupart des cas...

Dim Ff As Long, Str As String, MonFichier As String,
NombreDeLigne As Long
MonFichier = "C:Toto.Txt"
Ff = FreeFile
Open MonFichier For Binary As Ff
Str = String$(LOF(Ff), Chr$(0))
Get #Ff, , Str
Close #Ff
NombreDeLigne = UBound(Split(Str, vbCrLf))


--
Enjoy !
Avatar
EddiGordo
"Nicolas" a exprimé avec précision :
Ca ne fonctionne que pour des tres petits fichiers, le
mien fait 30000 lignes et 2000 colonnes, que faire ?

Nicolas



Heu...

Je ne comprends pas...
Je viens d'essayer avec un fichier texte de 27 Mégas, 67559 lignes de
415 caractères...
Ca fonctionne nickel chez moi
Si ce n'est qu'il mets à peu près 3 ou 4 secondes à me répondre...


--
Enjoy !
Avatar
Nicolas
Ca ne fonctionne que pour des tres petits fichiers, le
mien fait 30000 lignes et 2000 colonnes, que faire ?

Nicolas

-----Message d'origine-----
"Nicolas" avait énoncé :
Bonjour,

Je cherche à récupérer le nombre de lignes d'un fichier
texte sans avoir à le balayer avec un code du genre :

Dim Ligne as String
Dim i as Integer
Open "fichier.txt" For Input As #1
Do Until EOF(1)
i = i + 1
Line Input #1, Ligne
Loop
Close #1
MsgBox i & " lignes"

Merci d'avance et bonne prog

Nicolas


Bonjour

Tu peux peut-être compter le nombre de retour chariot du


fichier, cela
devrait fonctionner pour la plupart des cas...

Dim Ff As Long, Str As String, MonFichier As


String,
NombreDeLigne As Long
MonFichier = "C:Toto.Txt"
Ff = FreeFile
Open MonFichier For Binary As Ff
Str = String$(LOF(Ff), Chr$(0))
Get #Ff, , Str
Close #Ff
NombreDeLigne = UBound(Split(Str, vbCrLf))


--
Enjoy !

.



Avatar
EddiGordo
"Zoury" a pensé très fort :
Salut à vous! :O)

Tu peux peut-être compter le nombre de retour chariot du fichier, cela
devrait fonctionner pour la plupart des cas...
NombreDeLigne = UBound(Split(Str, vbCrLf))




tu dois ajouter 1 car UBound() te renvoit le dernier index du tableau et non
le nombre d'éléments que contient celui-ci..

'***
NombreDeLigne = UBound(Split(Str, vbNewLine)) + 1
'***


Bonjour

Effectivement... Mea culpa

et merci


--
Enjoy !
Avatar
Zoury
Salut à vous! :O)

Tu peux peut-être compter le nombre de retour chariot du fichier, cela
devrait fonctionner pour la plupart des cas...
NombreDeLigne = UBound(Split(Str, vbCrLf))




tu dois ajouter 1 car UBound() te renvoit le dernier index du tableau et non
le nombre d'éléments que contient celui-ci..

'***
NombreDeLigne = UBound(Split(Str, vbNewLine)) + 1
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Patrice Henrio
Parce que dans le cas de Split, le tableau renvoyé commence à 0, même avec
option base = 1. Sinon avec Option base = 1, l'indice le plus haut
correspond bien au nombre d'éléments
Plus généralement le nombre d'élément d'un tableau vaut
Ubound(T)-Lbound(T)+ 1


"EddiGordo" a écrit dans le message de
news:
"Zoury" a pensé très fort :
> Salut à vous! :O)
>
>> Tu peux peut-être compter le nombre de retour chariot du fichier, cela
>> devrait fonctionner pour la plupart des cas...
>> NombreDeLigne = UBound(Split(Str, vbCrLf))
>
>
> tu dois ajouter 1 car UBound() te renvoit le dernier index du tableau et


non
> le nombre d'éléments que contient celui-ci..
>
> '***
> NombreDeLigne = UBound(Split(Str, vbNewLine)) + 1
> '***
Bonjour

Effectivement... Mea culpa

et merci


--
Enjoy !