Invité Invité
| Sujet: indentation de lignes. Jeu 17 Mai 2012 - 18:17 | |
| J'ai remis une version, où j'ai mis des variables à la place des mots-clésMais cela ne suffit pas, il faut aussi contrôler les chaines avec les mots-clés. Je crois que cela a déjà était fait. Peut-être par JL35 ou Nardo. Si c'est vrai, c'est ma version. Vu que c'est devant moi. On copie le code où on veut mettre de l'ordre dans l'indentation dans son écran. On lance le programme, on met l'indentation qu'on veut dans l'edit. On colle et go on lance. On peut récupérer ensuite dans le presse papier. - Code:
-
' modifier l'incrémentation des lignes dim a%,b%,a$,b$ , x% , a1$ ,flag% ,d% dim fo%(20),wh%(20),re%(20),se%(20),ca%(20), if%(20) ,th$ ,n% ,g% dim for%,whi%,rep%,sel%,cas%,fi% th$="THEN " : d%=2 ' le mieux est de remplacer les mots clés par des variables, car la lecture du programme, le texte est pris en compte dim for$,while$,repeat$,select$,case$,if$,then$,end_if$,end_while$,until$,end_select$,next$ ,else$ ,return$ for$="FOR " while$ = "WHILE " repeat$="REPEAT" select$="SELECT " case$="CASE " if$="IF " then$="THEN " end_if$="END_IF" next$="NEXT " end_while$="END_WHILE" until$="UNTIL " end_select$="END_SELECT" else$="ELSE" return$="RETURN"
label traitement , marque , next1 ,copie , coller full_space 0 memo 1:bar_both 1 :width 1,width(0)-30:height 1,height(0)-80:top 1,20:left 1,5 :font_name 1,"Courier New" button 2:width 2,70:height 2,20:caption 2,"coller" : on_click 2,copie button 3:width 3,70:height 3,20:caption 3,"go":left 3,100: on_click 3,traitement edit 4:width 4,70:height 4,20:text 4,4 :left 4,200 button 5:width 5,70:height 5,20:caption 5,"copier":left 5,300:on_click 5,coller end ' =================================== copie: clipboard_paste 1 return
coller: if count(1)>0 b%=0 for a%=1 to count(1): b%=b%+len(item_read$(1,a%))+2 : next a% select_text 1,1,b% a$=select_read$(1) clipboard_string_copy a$ end_if return
traitement: d%=text$(4) x%=1 for a%=1 to count(1) caption 0,a% a$=trim$(item_read$(1,a%)) : a1$=upper$(a$) ' ----------------------------------------- if left$(a1$,3)= if$ if%(fi%) = x% :fi%=fi%+1:gosub marque :n%=instr(a1$,then$):g%=instr(a1$,chr$(34)+then$) if n% > 0 and g% =0 then fi%=fi%-1:x% = if%(fi%) :else : x%=x%+d% goto next1 end_if if left$(a1$,4)= for$ fo%(for%) = x% :for%=for%+1 :gosub marque if instr(a1$,next$) > 0 then for%=for%-1: x%=fo%(for%) :else:x%=x%+d% goto next1 end_if if left$(a1$,6)= while$ wh%(whi%) = x% : whi%=whi%+1 :gosub marque if instr(a1$,END_WHILE$) > 0 then whi%=whi%-1 : x%=wh%(whi%) :else :x%=x%+d% goto next1 end_if
if left$(a1$,6)= REPEAT$ re%(rep%) = x% :rep%=rep%+1 :gosub marque if instr(a1$,UNTIL$) > 0 then rep%=rep%-1 : x%=re%(rep%):else :x%=x%+d% goto next1 end_if
if left$(a1$,7)= SELECT$ se%(sel%) =x% : sel%=sel%+1:gosub marque if instr(a1$,END_SELECT$) > 0 then sel%=sel%-1: x%=se%(sel%) :else:x%=x%+d% goto next1 end_if
if left$(a1$,5)=CASE$ gosub marque : goto next1 end_if if left$(a1$,6)= END_IF$ then fi%=fi%-1:x%=if%(fi%):gosub marque:goto next1 if left$(a1$,4)=ELSE$ then x%=if%(fi%-1):gosub marque: x%=x%+d% :goto next1 if left$(a1$,9)=END_WHILE$ then whi%=whi%-1: x%=wh%(whi%):gosub marque:goto next1 if left$(a1$,6)=UNTIL$ then rep%=rep%-1: x%=re%(rep%):gosub marque:goto next1 if left$(a1$,5)=NEXT$ then for%=for%-1: x%=fo%(for%):gosub marque:goto next1 if left$(a1$,10)=END_SELECT$ then sel%=sel%-1:gosub marque:goto next1 if left$(a1$,6)=RETURN$ then x%=0:gosub marque:goto next1 if right$(a$,1)=":" gosub marque if x%=0 then x%=3 goto next1 end_if if x%>0 item_delete 1,a%:item_insert 1,a%,string$(x%," ")+a$ else item_delete 1,a%:item_insert 1,a%,a$ end_if next1: next a% return
marque: if x%>0 item_delete 1,a%:item_insert 1,a%,string$(x%," ")+a$ else item_delete 1,a%:item_insert 1,a%,a$ end_if return
Je viens d'essayer avec un autre programme, et j'ai un problème avec next. Malheureusement, je ne peux pas supprimer. Pourtant les essais étaient concluant.
Dernière édition par cosmos70 le Ven 18 Mai 2012 - 15:50, édité 1 fois |
|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: indentation de lignes. Ven 18 Mai 2012 - 13:26 | |
| bonjour cosmos70
Je pense avoir resolu ton probleme en remplacant la variable next1 part nxt1 car elle interfere dans l'indentation.
dis-moi ce que tu en pense. | |
|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: indentation de lignes. Ven 18 Mai 2012 - 15:09 | |
| En fait le problème vient d'une double déclaration de LABEL ligne 6 et 88.
A+ | |
|
Invité Invité
| Sujet: Re: indentation de lignes. Ven 18 Mai 2012 - 15:24 | |
| Bonjour; C'est plus compliqué que cela, et franchement je n'ai pas le temps de m'en occupé. Le programme fonctionne puisque j'ai essayé plusieurs programmes avec succès. Seul le programme que je propose, il ne marche pas car les mots-clés sont entre-guillemets, et j'ai utilisé l'instruction "INST()". Ce qui fait qu'il ne distingue pas la différence entre une chaine et un mot-clé. Ayant fait ce programme rapidement pour mieux présenter et le déboguer, un programme en cours. il n'était pas prévu que je m'attarde dessus. Vu qu'il fonctionnait pour ce que je faisais, je me suis dit que je pouvais le mettre sur le forum. Dès que je l'ai mis, j'ai voulu m'en servir pour la présentation de celui-ci, et là, j'ai vu le problème. J'aurais voulu le retiter, mais impossible, car ce programme n'est pas ma préoccupation, je suis sur autre chose. Si l'un d'entre vous veut le reprendre, pas de problème. J'ai trop de choses à faire ailleurs. Il faut faire le teste des mots-clés dans une chaine.
Je viens de mettre une version avec les mots-clés dans des variables, que j'avais fait ausitôt après. |
|
Invité Invité
| Sujet: Re: indentation de lignes. Ven 18 Mai 2012 - 16:02 | |
| Dès que je m'envais, je constate quel con je suis. J'ai mis des mot-clés en variables, et INSTR(), ne s'occupera pas de "$" à la fin. Il faut faire une faute dans chacune des variables mots-clés, en mettant par exemple un trait de soulignement entre la première et la seconde lettre de chacun des mots-clés. Tout cela pour aller vite!! |
|