Ignorer des lignes a la lecture d'un fichier text

Résolu
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009 - 2 nov. 2005 à 16:40
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009 - 5 nov. 2005 à 19:07
Salut, je voudrais ignorer des lignes a la lecture d'un fichier text.

En réalité le fichier text est un fichier C# duquel je récupère des infos.

Les lignes a ignorer etant les commentaires ...

Jusque la c'est facile, mais le probleme c'est que je lis mes fichiers de la sorte



Private Function lire(fichier As String)



On Error Resume Next



Dim zone_text As String

Open fichier For Input As #1

DoEvents

zone_text = Input(LOF(1), #1)

Close #1

lire = zone_text



End Function



Et je ne peux pas lire ligne par ligne (les fichiers sont énormes et la
lecture ligne par ligne est bien trop longue) sinon le soft ne sert a
rien (sa rapidité est son atout)



Donc, est il possible en utilisant ma syntaxe d'ignorer certaines lignes rapidement ?



Merci

ZeGuizmo

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 nov. 2005 à 19:27
Salut
Comme le dit PCPT, tu lis la totalité du fichier dans "zonetext", donc tout.
A toi de dépouiller le résultat pour éliminer les lignes de commentaire.
- Soit tu changes la manière de lire les données en les lisant ligne par ligne
Open ...
Do While Not EOF(1)
Line Input #1, Chaine
If Left(Trim(Chaine, 1), 1) <> ";" Then zoneText = zoneText & Chaine
Loop
Close #1
- Soit tu travailles sur ta chaine globale :
Dim Lignes() As String
Lignes = Split(zoneText, vbCrLf) ' Transforme chaine en lignes
For r = 0 To Ubound(Lignes)
' Si chaine commence par ; --> vide la ligne If Left(Trim(Lignes(r)), 1) ";" Then Lignes(r) ""
Next r
' Recompose la chaine
zoneText = Join(Lignes, vbCrLf)
' Elimine les doubles vbCrLf qui sont là à cause des lignes vides
zoneText = Replace(zoneText, vbCrLf & vbCrLf, vbCrLf)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009
5 nov. 2005 à 19:07
Its works, je ne sais pas pourquoi mais avec vbcrlf ca marche pas, et avec chr(10) ca marche.



Merci beaucoup et a une prochaine fois :)

ZeGuizmo
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 nov. 2005 à 16:52
salut,
encore faut-il être certain de la syntaxe.
si le commentaire commence en début de ligne, tu peux alors chercher le VbCrLf & "//"
mais s'il y a un espace avant, etc.... tu ne pourras pas de cette manière.
dans la même idée, tu peux chercher sur tout le fichier (en variable) les "//" puis replace par rien du mid de cette position jusqu'au prochain VbCrLf.

et il faut penser aussi que si ces fichiers sont si ~énormes~, il te faut la RAM disponible au hauteur de la taille du fichier.

PCPT [AFCK]
0
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009
5 nov. 2005 à 18:02
Salut,

Merci jack c'est en fait ce qu'il me fallait, (le travail en lecture
ligne par ligne est trop long, mais c'est a cause du temps d'ouverture
du fichier texte) alors que le travail sur la variable est instantané



Je comprend bien la fonction mais celle ci ne marche pas.

En fait j'ai isolé le probleme, il vient du stockage dans la variable lignes

La fonction split(text, vbcrlf) n'a pas l'air de fonctionner.

Quand je lui demande de m'afficher ligne(r) par exemple, il m'affiche tout le texte.


Une solution ?

Merci encore.


ZeGuizmo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009
5 nov. 2005 à 18:28
Une remarque qui peut avoir son importance, je suis sous VB 6 pas sous VB.NET

Ca changerait la donne ?


ZeGuizmo
0
Rejoignez-nous