Lire et remplacer une chaine dans un fichier [Résolu]

Signaler
Messages postés
30
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
16 juillet 2007
-
Messages postés
30
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
16 juillet 2007
-
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

Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1
Ligne = replace(Ligne, " 00000000" & VbCr, " " & vbCr")

Hvb a.k.a Batto
http://batto.info/ ^^x
bato.ltd .at. gmail.com
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
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 !)
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
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..
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

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...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Correction (ma pensée est plus rapide que mes doigts) :
Print  #num est de surcroît une instruction d'écriture dans le fichier
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1
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
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1
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
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

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...
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1
on me relance... je relance... =)

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

merci de votre aide, j'ai enfin reussi :)