Ignorer des lignes a la lecture d'un fichier text [Résolu]

Signaler
Messages postés
138
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Messages postés
138
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
138
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
16 juillet 2009

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
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]
Messages postés
138
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
16 juillet 2009

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
Messages postés
138
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
16 juillet 2009

Une remarque qui peut avoir son importance, je suis sous VB 6 pas sous VB.NET

Ca changerait la donne ?


ZeGuizmo