Remplacement dans une chaîne
Discutez d'informatique ici !
-
chombier
- Membre Irrationnel
- Messages: 1324
- Enregistré le: 19 Juil 2012, 18:35
-
par chombier » 14 Oct 2013, 15:05
Valentin03 a écrit:ça maaaarche ! Merci chombier.
Fallait déjà y penser d'analyser le remplaçant lettre par lettre, ça oblige juste à décortiquer le remplaçant, mais c'est nickel.
C'est un algo à l'arrache, très couteux parce que par exemple, si tu veux remplacer
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab" par "toto", toutes les séries de a plus ou moins longue vont te bouffer un maximum de temps, alors qu'un espèce d'algo qui "compte les a" en quelque sorte, s'en sortira beaucoup mieux.
Si ton texte fait N caractères et que la chaîne que tu recherches en fait p, l'algo prendre en moyenne N*p unités de temps. Un bon algo prendrait N unités de temps.
-
Valentin03
- Membre Relatif
- Messages: 429
- Enregistré le: 23 Déc 2012, 13:08
-
par Valentin03 » 14 Oct 2013, 15:41
chombier a écrit:C'est un algo à l'arrache, très couteux parce que par exemple, si tu veux remplacer
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab" par "toto", toutes les séries de a plus ou moins longue vont te bouffer un maximum de temps, alors qu'un espèce d'algo qui "compte les a" en quelque sorte, s'en sortira beaucoup mieux.
Si ton texte fait N caractères et que la chaîne que tu recherches en fait p, l'algo prendre en moyenne N*p unités de temps. Un bon algo prendrait N unités de temps.
Ton algo 'sec" dans la "do/loop" marche bien, mais maintenant j'ai le soucis pour l'analyse du remplacé.
j'ai fait ça:
- Code: Tout sélectionner
#w.c, "!contents? orig$":lonor=len(orig$) '-- mot d'origine et sa longueur
#w.d, "!contents? rempl$":lonremp=len(rempl$) '--le remplaçant
#w.tx, "!contents? a$":lon=len(a$) '--la chaîne
for x=1 to lonor '--je mets les lettres du remplacé dans un tableau
letrr$(x)=mid$(orig$,x,1)
next x
i = 1 '---algo de substitution
b$ = ""
do
print i '---renvoi en console (pour voir)
scan
if sto=1 then wait '--arrêt d'urgence
yes=0
for h=i to lonor 'i--boucle de comparaison
if mid$(a$,h,1)=letrr$(h) then yes=yes+1 '--nombre de lettres bonnes
if yes=lonor then exit for '--exit for obligatoire pour sortir
next h
if yes=lonor then '--reprise du cours de l'algo "chombier"
b$ = b$ + rempl$
i = i + lonor
else
b$ = b$ +mid$(a$,i,1)
i=i+1
end if
if i>=lon then sortir=1 '----fin de la chaine
loop until sortir
-
Valentin03
- Membre Relatif
- Messages: 429
- Enregistré le: 23 Déc 2012, 13:08
-
par Valentin03 » 14 Oct 2013, 16:07
je viens d'enlever le test et la sortie dans la "for h..."
ça déroule bien ,mais ça remplace pas.
Les américains viennent de m'envoyer une fonction dans le langage (Just Basic: version light de Liberty Basic).
ça a l'air "velu" faut que je la teste..... à+.
-
chombier
- Membre Irrationnel
- Messages: 1324
- Enregistré le: 19 Juil 2012, 18:35
-
par chombier » 14 Oct 2013, 16:27
Valentin03 a écrit:je viens d'enlever le test et la sortie dans la "for h..."
ça déroule bien ,mais ça remplace pas.
Les américains viennent de m'envoyer une fonction dans le langage (Just Basic: version light de Liberty Basic).
ça a l'air "velu" faut que je la teste..... à+.
T'as pas du chercher bien longtemps...
- Code: Tout sélectionner
Original$ = "The quick brown fox jumps over the lazy dog"
print Original$
print ReplaceString$(Original$, "fox", "chicken")
print
-
Valentin03
- Membre Relatif
- Messages: 429
- Enregistré le: 23 Déc 2012, 13:08
-
par Valentin03 » 14 Oct 2013, 20:59
chombier a écrit:T'as pas du chercher bien longtemps...
- Code: Tout sélectionner
Original$ = "The quick brown fox jumps over the lazy dog"
print Original$
print ReplaceString$(Original$, "fox", "chicken")
print
Que si que j'ai cherché.
Voila la forme qui marche avec ton algo:
- Code: Tout sélectionner
i = 1
b$ = ""
do
if mid$(a$,i,lonor)=orig$ then
b$ = b$ + rempl$
i = i + lonor
else
b$ = b$ +mid$(a$,i,1)
i=i+1
end if
if i>=lon then sortir=1
loop until sortir
Conclusion plus c'est court, mieux ça marche
Je te renouvelle mes remerciements pour ton algo. Il fait mieux que la fonction des anglophones.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités