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 3
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 7666 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 7666 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 3
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 3
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 3
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
Rejoignez-nous