Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| instruction INSTR : InstrPlus() | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: instruction INSTR : InstrPlus() Sam 10 Aoû 2013 - 13:13 | |
| Bonjour. Pour mon éditeur, ayant besoin de faire une instruction de recherche/remplacement de mot en AutoIt, j'ai fait cet utilitaire en Panoramic qui facilite la conception d'un codage. réédité pour une légère erreur sur la ligne suivante:until v_explode% = 0 : Nb_coord% = explode% -1il faut -1 à la fin, pour lire dans l'autre sens (Rinstr() ) Avec cet utilitaire qui est une sub, nommée: InstPlus(), fait à partir d'une base personnelle d'une autre sub: explode(), on peut: -Trouver directement la nième occurrence d'un texte -une retour avec une nouvelle chaîne, composée de mots de remplacement à la place de celui recherché. Avoir directement la position du énième mot dans la chaine ou la énième position de la chaine de remplacement. - Spoiler:
- Code:
-
' SUB: instruction INSTR sophistiquée. width 0,screen_x dim a$ , a% dim nb_coord% , explode$(100) , coord%(100,1) , retour$ :' pour l'instruction InstPlus()
memo 1:full_space 1 :font_size 1,12: font_bold 1 :font_name 1,"Consolas"
a$ = "dans le cou, au bout du cou avec un beau cou" item_add 1,a$ item_add 1,"1234567890"+"1234567890"+"1234567890"+"1234567890"+"1234567890"+"1234567890"+"1234567890"+"1234567890" item_add 1," 10 20 30 40 50 60 70 80"
InstrPlus("cou",a$,"couloir")
item_add 1, retour$ :' chaine crée avec couloir en remplacement de cou item_add 1,"position dans la chaine a$ du 3ème élément : " + str$(coord%(3,0)) item_add 1,"position de la nouvelle chaine:3ème élément : " + str$(coord%(3,1))
for a% = 1 to Nb_coord% :item_add 1,mid$(a$, coord%(a%,0) ,10) : next a% item_add 1, "OU BIEN en pensant à Rinstr() qui donne les trouvailles depuis la droite: for a% = Nb_coord% to 1 step -1 :item_add 1,mid$(a$, coord%(a%,0) ,10) : next a%
end
' ======================================================================= ' separ$ est la chaine qu'on veut trouver ' chaine$ est la ligne dont est insérée separ$ ' nouveau$ est le mot de remplacement de separ$, et reconstitue une nouvelle chaine qu'on peut prendre en retour, soit: retour$
sub InstrPlus(separ$,chaine$,nouveau$) dim_local explode% , v_explode% , le% , c% , d% , l% , n% retour$ = "" : n% = len(nouveau$) : le% = len(separ$) for explode% = 1 to 100 : explode$(explode%) = "" :coord%(explode%,0)=0:coord%(explode%,1) = 0 : next explode% explode% = 1 repeat v_explode% = instr(chaine$,separ$) if v_explode% > 0 if v_explode% > 1 then explode$(explode%) = left$(chaine$,v_explode%-1) chaine$ = mid$(chaine$,v_explode% + le%,len(chaine$)) retour$ = retour$ + explode$(explode%) + nouveau$ c% = c% + len(explode$(explode%)) :' avec separ$ d% = d% + len(explode$(explode%)) :' avec nouveau$
coord%(explode%,0) = c% : c% = c% + le% coord%(explode%,1) = d% : d% = d% + n% explode% = explode% + 1 end_if until v_explode% = 0 : Nb_coord% = explode% -1 explode$(explode%) = chaine$ end_sub
l'instruction InstPlus fonctionne de cette façon: InstrPlus("recherche",la chaine,mot de remplacement) Si il n'y a pas de mot de remplacement, il suffit de recopier separt$: Instr(separ$,a$,separt$)
Dernière édition par cosmos70 le Dim 11 Aoû 2013 - 9:48, édité 2 fois |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: instruction INSTR : InstrPlus() Sam 10 Aoû 2013 - 13:47 | |
| Salut Cosmos, Celle là, je la met dans ma bibliothèque, tu aurais pus l'appeler Remplace_Chaine1_par_Chaine2_Dans_A(separ$,chaine$,nouveau$) ou Remplace_separ_par_nouveau_dans_chaine(separ$,chaine$,nouveau$)Oui, je sais c'est un peu long c'est juste pour résumer sa fonction. Voilà une procédure qui est très utile. Merci de nous l'avoir postée. A+ | |
| | | Invité Invité
| Sujet: Re: instruction INSTR : InstrPlus() Sam 10 Aoû 2013 - 16:41 | |
| Merci Jean-Claude. En faite, cette instruction ne sert pas seulement à remplacer un mot par un autre. Elle permet d'abord de trouver le énième élément d'une chaine, dans un sens ou dans l'autre. J'ai ajouté les lignes suivantes pour la démo: - Code:
-
dim a% for a% = 1 to Nb_coord% :item_add 1,mid$(a$, coord%(a%,0) ,10) : next a% item_add 1, "OU BIEN en pensant à Rinstr() qui donne les trouvailles depuis la droite: for a% = Nb_coord% to 1 step -1 :item_add 1,mid$(a$, coord%(a%,0) ,10) : next a% Qui montre une manière simple de remplacement de instr() dans les cas qui ne fonctionne pas, puisqu'il n'y a pas de paramètre suplémentaire. |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: instruction INSTR : InstrPlus() Sam 10 Aoû 2013 - 21:21 | |
| Oui, c'est ce que cherchais Pan59 il y a quelque mois.
A+ | |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Instruction INSTR. Dim 11 Aoû 2013 - 8:01 | |
| Bonjour à tous.
Oui, effectivement, il s'agit de la fonction que je recherchais depuis quelques mois.
Ajout d'un paramètre supplémentaire à la fonction INSTR.
D'autre part, il manque la possibilité de rechercher une occurence à, partir de la droite d'une chaîne. | |
| | | Invité Invité
| Sujet: Re: instruction INSTR : InstrPlus() Dim 11 Aoû 2013 - 8:24 | |
| Bonjour a tous. - pan59 a écrit:
- D'autre part, il manque la possibilité de rechercher une occurence à, partir de la droite d'une chaîne.
Non je ne suis pas d'accord. Dans l'exemple que j'ai mis: InstrPlus("cou",a$,"couloir") ou juste pour instr() ou Rinstr() sans penser au remplacement: InstrPlus("cou",a$,"cou") ou InstrPlus("cou",a$,"") ou InstrPlus("cou",a$,"autre chose") (on ne se prend pas la tête pour le 3ème paramètre): Nb_coord% est le nombre d'éléments, et la position de la recherche du premier élément à partir de la droite. Ce qui fait que: coord%(Nb_cood%,0) donne la position de l'élément recherché depuis la droite. Le 2ème depuis la droite est: coord%(Nb_cood%-1,0) Dans coord%(Nb_coord%, 0), le zéro indique l'élément de l’occurrence recherché. Si 1, c'est celui remplacé à la même place. Regarde l'exemple avec la boucle: for a% = Nb_coord% to 1 step -1 :item_add 1,mid$(a$, coord%(a%,0) ,10) : next a% |
| | | pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Instruction INSTR. Dim 11 Aoû 2013 - 17:14 | |
| Bonjour.
Désolé Cosmos70, je voulais simplement parler de la fonction INSTR de Panoramic.
Pour laquelle, il manque un 3è paramètre à mon sens. | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Mar 13 Aoû 2013 - 6:39 | |
| Moi j'applaudis ! jave vavais favaire davu javanavais plavus favaçavilavemavent ! Maverçavi !!! | |
| | | Invité Invité
| Sujet: Re: instruction INSTR : InstrPlus() Mar 13 Aoû 2013 - 12:08 | |
| - Citation :
- Moi j'applaudis ! jave vavais favaire davu javanavais plavus favaçavilavemavent ! Maverçavi !!!
Petit rigolo! Il ne te reste plus qu'à concevoir le décodeur de mon instruction, pour retrouver la phrase initiale. Je l'intégrerai dans mon instruction. |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 15 Aoû 2013 - 9:51 | |
| Qui ? Moi ? Ohlala ! Ça m'apprendra à faire des commentaires ! | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 15 Aoû 2013 - 10:48 | |
| Bon allez, un petit exo, on fait simple (car je ne sais pas encore faire plus complexe ) : - javenavais:
dim i,a$,jav$,t$ a$="jave savais lave favaire" :jav$="av" print a$ for i=1 to len(a$)-1 t$=mid$(a$,i,2) if t$="av" a$=left$(a$,i-1)+right$(a$,len(a$)-(i+1)) end_if next i print a$
Bonne journée !!! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: instruction INSTR : InstrPlus() Jeu 15 Aoû 2013 - 16:49 | |
| - cavompris:
J’avavais bavien cavompris cave quave tuav savavais favaire
| |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 15 Aoû 2013 - 18:29 | |
| Et ça ne s'arrange pas ! comme je ne comprends pas grand chose au code de cosmos70, j'ai essayé de le faire à ma sauce et je tombe sur une erreur list index out of bounds (13). Que se passe-t-il donc ? voici mon code : - code:
dim i,c$
InstrPlus("ram","Panoramic","x")
end
sub InstrPlus(serie$,chaine$,modif$)
print chaine$
for i=1 to 1+len(chaine$)-len(serie$) c$=mid$(chaine$,i,len(chaine$)) if c$=serie$ chaine$=left$(chaine$,i-1)+modif$+right$(chaine$,1+len(chaine$)-(i+len(serie$))) end_if next i
print chaine$
return
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: instruction INSTR : InstrPlus() Jeu 15 Aoû 2013 - 18:34 | |
| @Froggy One Tu as fait RETURN au lieu de END_SUB !!! | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 15 Aoû 2013 - 18:40 | |
| Et ce n'était pas ma seule bourde... pour mon premier SUB !!! Merci Papydall. Je crois que j'ai besoin d'une sieste... - mieux:
dim i,c$
InstrPlus("ram","Panoramic","x")
end
sub InstrPlus(serie$,chaine$,modif$)
print chaine$
for i=1 to 1+len(chaine$)-len(serie$) c$=mid$(chaine$,i,len(serie$)) if c$=serie$ chaine$=left$(chaine$,i-1)+modif$+right$(chaine$,1+len(chaine$)-(i+len(serie$))) end_if next i
print chaine$
end_sub
| |
| | | Contenu sponsorisé
| Sujet: Re: instruction INSTR : InstrPlus() | |
| |
| | | | instruction INSTR : InstrPlus() | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |