Remplacement dans une chaîne

Discutez d'informatique ici !
Avatar de l’utilisateur
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..... à+.

Avatar de l’utilisateur
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.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 10 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite