Lire et remplacer une chaine dans un fichier

Résolu
horzy
Messages postés
30
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
16 juillet 2007
- 4 juin 2007 à 18:02
horzy
Messages postés
30
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
16 juillet 2007
- 5 juin 2007 à 15:18
Bonjour,

J'explique mon pb :
J'ai un fichier texte du type :

123434343 994384938 0000000298392 00000000
989485887 878437387 0000000298393 20050327
etc...

et je voudrais remplacer les fins de lignes par des blancs lorsqu'elle finissent par des 00000000

pour dans l'exemple donner ca :

123434343 994384938 0000000298392
989485887 878437387 0000000298393 20050327

voila le code que j'ai écris :
Open mon_fichier For Input As #num

Line Input #num, Ligne

While Not Eof(num)
replace(Ligne, " 00000000" & VbCr, " " & vbCr")
Print #num, Ligne
Wend

Close #num

mais ca marche pas !
Comment faire pour lui faire comprendre que ce sont les fins de lignes avec des zéro que je veux remplacer par des blancs et pas les milieux de lignes avec zeros? est-ce la bonne démarche ?
Merci de votre aide

10 réponses

hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
4 juin 2007 à 18:09
Ligne = replace(Ligne, " 00000000" & VbCr, " " & vbCr")

Hvb a.k.a Batto
http://batto.info/ ^^x
bato.ltd .at. gmail.com
3
jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
4 juin 2007 à 18:19
Bonjour,

Print #num est de surcroît une instruction dans le fichier, alors que tu l'as ouvert en lecture !
Il te faut :
1) ouvrir ton fochier en lecture
2) ouvrir un autre fichier temporaire en écriture
3) lire ligne par ligne et remplacer tes 0 finaux par rien et écrire chaque ligne par Print dans le fichier temporaire
4) détruire ton 1er fichier
5) renommer le second avec le nom qu'avait le 1er

Pour ce qui est maintenant de la suppression des 000 terminaux, le plus simple est encore d'utiliser instrev pour relever la position du dernier espace et de ne prendre que ce qui ce trouve jusqu'à cette position - 1 (avec Left, par exemple)

hvb : je ne suis pas d'accord avec de que tu as écrit. le line input exclut le saut de ligne !)
3
cs_Nicko11
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
5 juin 2007 à 09:19
Salut, pour moi je dirais qu'il suffit de changer le contenu de l'argument ligne en isolant le 4 ème élement de la ligne (sauf si le format de la ligne n'est pas constant.

ligne = mid(ligne, 34, 9 )   'j'ai du mal a compter donc je me suis peut etre trompé dans les chiffres mais le principe est la.
Ligne = replace(Ligne, " 00000000" & VbCr, " " & vbCr")

Ou sinon, la fonction Split pourrait aider aussi, ou Right enfin vous voyez le principe quoi..
3
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

4 juin 2007 à 18:12
tu lis ligne a ligne et sur chaque lignes tu fais:

Dim Pos as long
Dim LineLen as long

LineLen = len(MaLigne)
Pos = Instr(1, MaLigne, " 00000000")
If LineLen - Pos = 9 then Replace.....

enfin c'est une methode parmi des tas d'autres...

PS: pas testé donc peut y avoir une erreur de synthaxe ou autre...

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0

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

Posez votre question
jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
4 juin 2007 à 18:21
Correction (ma pensée est plus rapide que mes doigts) :
Print  #num est de surcroît une instruction d'écriture dans le fichier
0
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
4 juin 2007 à 18:45
jmfmarques : je ne fesait que corriger son replace "dans le vide", qui s'averait être le principal problème de son code.
j'avoue ne pas avoir reflechis à son algo ^^

Hvb a.k.a Batto
http://batto.info/ ^^x
bato.ltd .at. gmail.com
0
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
4 juin 2007 à 18:53
je vois meme que je n'avais meme pas lu son message en entier, desolé ^^
C'est pas hyper propre, mais il suffirait d'ajouter un detrompeur à la fin de chaque ligne lu, et de faire un replace en ajoutant le detrompeur à la chaine recherché.
Mais si supprimer les caractères suffit, alors effectue un TrimEnd avec en parametre le caractère 0 sur chaque ligne.
Cette fonction n'existe en native qu'en vb.net mais pas en VB6. Cependant, un type à posté l'equivalent sur codyx :
http://www.codyx.org/snippet_fonction-trim-permettant-choisir-texte-supprimer_103.aspx

Hvb a.k.a Batto
http://batto.info/ ^^x
bato.ltd .at. gmail.com
0
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

4 juin 2007 à 18:55
moi je propose qu'on debatte pendant 4 jours sur ce sujet! :p

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
4 juin 2007 à 19:18
on me relance... je relance... =)

Hvb a.k.a Batto
http://batto.info/ ^^x
bato.ltd .at. gmail.com
0
horzy
Messages postés
30
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
16 juillet 2007

5 juin 2007 à 15:18
merci de votre aide, j'ai enfin reussi :)
0