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 |
|
|
| Demande divers à Klaus | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Demande divers à Klaus Sam 15 Fév 2014 - 2:25 | |
| fonction d'un INSTR( avec différents séparateurs)titre changé, généraliste.Au départ je pensais juste répondre à tes questions pour un super_instr avec le nom que tu veux). J'ai fais un code rapide. Celui-ci regarde une chaine de caractères, qui est une ligne de code. En basic, il m'a semblé plus simple d'avoir un retour sous forme d'une chaine, avec un repère de position avec un caractère particulier à la place du symbole recherché. Il suffit avec INSTR() de regarder cette chaine en retour, pour prendre les positions à la suite. Cela évite un tas de teste, et on peut lire le caractère en rapport au repère. En lançant le programme on comprend mieux. -ici j'ai repris la copie que je pensais mettre sur un autre post, mais c'était pas raisonnable - Maintenant le retour, peut être aussi une liste de nombre de la position de chaque repère. Si tu es partant, tu fais comme tu veux. Si on lance le programme, on voit que c'est long. Telque je le pense pour maintenant, je vois une instruction qui a la chaine en paramètre, suivi d'un séparateur spécifique, pour séparer les différents caractères, car ils peuvent parfois être associés, puis la liste des séparateurs. J'ai pas de nom à proposer, mais voila un exemple: - Code:
-
separe$ = " |,|:|<|>|<>|><|=|>=|=>|=<|<=|'|/|*|+|-|" + g$ + "|" a$ = " For a% = 1 to 10:print " + g$ + "for de toute expérience" + g$ + ": next a%:if a%>=10 then a%=10: ' fin de la ligne" separe(a$ , "|" ,separe$) g$ est ici un guillemet. - hors sujet:
Je n'ouvre pas un sujet, c'est selon tes envies. J'ai fais un teste (semblable à ce que j'avais commencé, mais je ne l'ai pas encore repris) Je mets ce post en arrière plan, je n'aime pas ouvrir un sujet. Je ne pensais pas aller plus loin sur ta proposition, car c'était en rapport avec le RichEdit, et je ne suis pas dessus. Mais la même idée, pour une autre exploitation avec le HTML m'a paru d'un coup aussi constructive, car c'est le même pricipe au départ. J'ai fait un teste, et j'ai mis des repères pour les parenthèses, mais c'est juste par contrôle. - Code:
-
dim g$ , t$ g$ = chr$(34) : t$ = chr$(13) width 0,screen_x : font_name 0,"Consolas" : font_size 0,10 : font_bold 0 edit 1 : width 1,width(0)-30 : height 1,30 edit 2 : width 2,width(1) : height 2,30 : top 2,30 memo 3 : top 3,70: width 3,width(1) : height 3,400 : print_target_is 3 teste() end ' ==================== sub teste() dim_local a$,separe$ separe$ = " |,|:|<|>|<>|><|=|>=|=>|=<|<=|'|/|*|+|-|" + g$ + "|" a$ = " For a% = 1 to 10:print " + g$ + "for de toute expérience" + g$ + ": next a%:if a%>=10 then a%=10: ' fin de la ligne" text 1,a$ separe(a$ , "|" ,separe$) end_sub
' le 2ème paramètre est le choix d'un séparateur. On pourrait aussi l'intégrer dans les séparateurs en 1ère position sub separe(a$ , mur$ , separe$) dim_local a%,b$,c$ , point$ , b% , trait$ , carac$ , tr% , s$ point$ = string$(len(a$),"=") : ' chaine de x trait à la place des caractères. On remplace la position d'un repère par '*' for a% = 1 to len(a$) s$ = separe$ repeat tr% = instr(s$, mur$) if tr% > 0 trait$ = left$(s$,tr%-1) : s$ = right_pos$(s$,tr%+1) end_if
if mid$(a$,a%,len(trait$)) = trait$ if tr% = 1 point$ = "*"+ right_pos$(point$,2) else if trait$ = g$ point$ = left$(point$,a%-1) + "{" + right_pos$(point$,a%+len(trait$)) else point$ = left$(point$,a%-1) + "*" + right_pos$(point$,a%+len(trait$)) end_if end_if if trait$ = g$ b% = instr_pos( a$,g$ , a%+1) point$ = left$(point$,b%-1) + "}" + right_pos$(point$,b%+1) a% = a% + b% -a% end_if exit_repeat end_if until tr% => len(separe$) or tr% = 0 or scancode = 27 if len(trait$) =2 then a% = a%+1 next a% text 2 , point$ ' end_sub
Si tu le fais , tu le fais quand tu veux.
Dernière édition par cosmos70 le Dim 16 Fév 2014 - 1:33, édité 2 fois |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande divers à Klaus Sam 15 Fév 2014 - 10:52 | |
| Regarde la nouvelle fonction CreateMask dans le groupe des fonctions de traitement des chaînes de caractères. Et voici ton code modifié pour gérer, à la fois ta procédure separe(...), et ma fonction CreateMask. si tu désactives ta procédure separe(...) en mettant la ligne en commentaire, tu pourras apprécier la vitesse d'exécution de la fonction CreateMask. Voici le source: - Code:
-
dim g$ , t$ g$ = chr$(34) : t$ = chr$(13) width 0,screen_x : font_name 0,"Consolas" : font_size 0,10 : font_bold 0 edit 1 : width 1,width(0)-30 : height 1,30 edit 2 : width 2,width(1) : height 2,30 : top 2,30 edit 4 : width 4,width(1) : height 4,30 : top 4,60 memo 3 : top 3,90: width 3,width(1) : height 3,400 : print_target_is 3 dll_on "KGF.dll" teste() end ' ==================== sub teste() dim_local a$,separe$, separe2$ dim_local msk1$, msk2$, b$, res% msk1$ = "*" : msk2$ = "=" separe$ = " |,|:|<|>|<>|><|=|>=|=>|=<|<=|'|/|*|+|-|" + g$ + "|" separe2$ = " ,:<>='/*+-" a$ = " For a% = 1 to 10:print " + g$ + "fort de toute expérience" + g$ + ": next a%:if a%>=10 then a%=10: ' fin de la ligne" text 1,a$ separe(a$ , "|" ,separe$) b$ = string$(len(a$)," ") res% = dll_call5("GenerateMask",adr(a$),adr(separe2$),adr(msk1$),adr(msk2$),adr(b$)) text 4,b$ end_sub
' le 2ème paramètre est le choix d'un séparateur. On pourrait aussi l'intégrer dans les séparateurs en 1ère position sub separe(a$ , mur$ , separe$) dim_local a%,b$,c$ , point$ , b% , trait$ , carac$ , tr% , s$ point$ = string$(len(a$),"=") : ' chaine de x trait à la place des caractères. On remplace la position d'un repère par '*' for a% = 1 to len(a$) s$ = separe$ repeat tr% = instr(s$, mur$) if tr% > 0 trait$ = left$(s$,tr%-1) : s$ = right_pos$(s$,tr%+1) end_if
if mid$(a$,a%,len(trait$)) = trait$
if tr% = 1 point$ = "*"+ right_pos$(point$,2) else if trait$ = g$ point$ = left$(point$,a%-1) + "{" + right_pos$(point$,a%+len(trait$)) else point$ = left$(point$,a%-1) + "*" + right_pos$(point$,a%+len(trait$)) end_if end_if
if trait$ = g$ b% = instr_pos( a$,g$ , a%+1) point$ = left$(point$,b%-1) + "}" + right_pos$(point$,b%+1) a% = a% + b% -a% end_if exit_repeat end_if until tr% => len(separe$) or tr% = 0 or scancode = 27
if len(trait$) =2 then a% = a%+1 next a% text 2 , point$ ' end_sub
| |
| | | Invité Invité
| Sujet: Re: Demande divers à Klaus Sam 15 Fév 2014 - 15:58 | |
| Merci Klaus pour ta réponse. Effectivement c'était déjà prévu. Mais tu vas tellement vite, qu'il est difficile de se rendre compte de ce que tu fais.
Que penses-tu de renommer le titre par "Demandes diverses à Klaus" Ma demande étant en faite inutile, on pourrait se servir de ce sujet pour juste faire des propositions, sans encombrer inutilement d'un tas de sujets. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande divers à Klaus Sam 15 Fév 2014 - 21:50 | |
| comme tu veux, Cosmos70. C'est ton fil de discussion, et j'y interviens avec plaisir ! | |
| | | Invité Invité
| Sujet: Re: Demande divers à Klaus Dim 16 Fév 2014 - 1:30 | |
| Oui quand j'ai vu ta réponse au départ, je n'étais pas allé assez loin, et j'ai cru que c'était une ancienne fonction, certain que j'avais déjà vu passé quelque chose sur les masques.
Je vais modifier le titre, car bien souvent on demande des choses qui sont déjà faite, et cela devient un post inutile. |
| | | Contenu sponsorisé
| Sujet: Re: Demande divers à Klaus | |
| |
| | | | Demande divers à Klaus | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |