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 |
|
|
| Pour mon éditeur | |
|
+3papydall Jean Claude Yannick 7 participants | |
Auteur | Message |
---|
Invité Invité
| Sujet: Re: Pour mon éditeur Mer 3 Juil 2013 - 23:46 | |
| |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Ven 5 Juil 2013 - 1:51 | |
| J'ai trouvé une solution. Pour l'instant c'est avec Panoramic que je fais les essais pour trouver une méthode. Voila le principe en exemple: for a = 1 to 10:print "salut":while a = 10:repeat select a case 1 print case 2 end_select until a = a end_while repeat:until scancode =0 next acela donne: 123456789'123456789'123456789'123456789'123456789'123456789'12345678 for a = 1 to 10:print "salut":while a = 10:repeat select a case 1 print case 2 end_select until a = a end_while repeat:until scancode =0 next aC'est pas évident de faire une représentation maintenant avec les espaces. La 1ère ligne: for a = 1 to 10:print "salut":while a = 10:repeat :j'ai 3 départ de boucle:for,while et repeat, ce qui donne pour la ligne suivante, un décalage de 3 instructions, et ainsi de suite. Au lieu de faire une indentation, je fais x fois les débuts de boucle - les retours de boucle. Maintenant tout n'est pas résolu, comme if then qui peut-être if then :else, ou if :else:end_if, ou sur plusieurs lignes. Sans compter les portions qui sont en commentaire ou dans des guillemets. C'était fait sur l'ancienne méthode, mais tout est à revoir. Maintenant |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Pour mon éditeur Ven 5 Juil 2013 - 9:31 | |
| Cosmos, t'es pas sorti de l'auberge si tu veux prendre en compte tous les cas les plus tordus possibles de mise en forme ! Ton exemple (entre autres): for a = 1 to 10:print "salut":while a = 10:repeat pour moi (mais ce n'est que mon avis personnel) je plains celui qui code comme ça, avec les fins de structure n'importe où après, je le plains (enfin, pas trop !) s'il a à revenir dessus quelques années après pour modifier son code, et si tout le reste est de la même farine. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour mon éditeur Ven 5 Juil 2013 - 10:03 | |
| D'accord avec toi, JL35.
Dans l'absolu, il faudrait que Cosmos70 refasse l'analyseur syntaxique de Panoramic pour pouvoir traiter tous les cas que Panoramic sait gérer.
A mon sens, il est parfaitement défendable de définir certaines règles d'écriture qui doivent être respectées pour l'application de cet outil. Et à l'évidence, il serait logique d'imposer que des débuts de boucle soient sur une ligne seule, suivies du corps de la boucle, puis la fin de boucle à nouveau sur une ligne séparée. Cela paraît une bonne pratique d'écriture, de toutes façons. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pour mon éditeur Ven 5 Juil 2013 - 11:15 | |
| Je mettrais un bémol, les 2 seuls cas pour moi qui seraient à autorisé sont: Une seule boucle par ligne avec la fin de boucle sur une autre ligne ou sur la même ligne que le début de boucle (donc 2 cas) Interdiction de commencer une autre boucle sur la même ligne qu'une autre boucle si elle ne se termine pas sur la même ligne Donc grammaire ok:
For i% = 1 to 5 For j%= 1 to 5 <traitement> Next j% Nexit i%
grammaire ok:
For i%=1 to 5: For j%= 1 to 5: <traitement>: Next j%: Nexit i%
Grammaire pas correcte (pour l'éditeur de Cosmos, pas selon Panoramic)
For i% = 1 to 5 : For j%= 1 to 5 <traitement> Next j%: Nexit i%
et autres combinaisons de boucles
Qu'en pensez vous ? L'idée, c'est d'avoir une orthographe compacte pour les traitement simple (par exemple la création d'une matrice de boutons créés par appel d'une procédure) et une orthographe plus lisible pour les traitements plus complexes.
De toute façon, l'orthographe et la grammaire ça s'apprend, les écoliers y arrivent bien et ce qui est pratique c'est que qu'en on fait des fautes que l'ordinateur nous le signale pour que l'on puisse corriger. Donc pour moi, une grammaire plus stricte n'est pas un handicape si l'éditeur nous signale tout de suite notre erreur.
| |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Ven 5 Juil 2013 - 13:19 | |
| Bien, merci pour vos interventions. Je suis d'accord pour une bonne logique de programmation, mais je dois faire en sorte que le programme ne se bloque pas, si on fait une erreur de structure. Parce que si une erreur intervient avec AutoIt dans le RichEdit, celui-ci se ferme. Donc je traite le cas. La méthode que j'ai trouvé est finalement toute simple, mais il m'a fallu 2 jours (pas plein évidemment, j'ai une autre vie plus fatigante), pour la mettre au point, et elle est infaillible. Je dois même pouvoir mettre des messages d'erreur, lorsqu'il y a une inversion de fin de boucle. Ainsi si j'ai:
for a = 1 to 10:print "salut":repeat:while a = 10 select a case 1 print case 2 end_select until a = a end_while repeat:until scancode =0 next a
j'obtiens:
123456789'123456789'123456789'123456789'123456789'123456789'12345678 for a = 1 to 10:print "salut":repeat:while a = 10 select a case 1 print case 2 end_select until a = a end_while :' est en 3ème position, donc décalé en 3ème repeat:until scancode =0:' end_while étant traité, repeat se retrouve ne 3ème position next a
Donc on voit si des boucles qui se termine se trouve à la même position, c'est qu'il y a un problème de structure.
Quand à IF ..., et les commentaires ainsi que ce que des mots de condition se trouvent entre guillemets, j'y ai pensé ce matin en faisant mes stères de bois, cela devraient être réglé facilement. En fait finalement mon programme est plus simple que le précédent que j'ai montré dans la vidéo. Restera à retranscrire en AutoIt.
Une simple question, il me semble que des boucles "select" ne s'imbriquent pas entre-elles, car le cas de "case" est particulier, il n'a pas de retour. End_select est le retour de select, et non de case. |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 5 Juil 2013 - 13:28 | |
| Pour le reste, je suis un peu dépassé... mais pour le cas de Select.....End_Select, je te confirme que pour l' heure on ne peut pas en imbriquer deux (voir plus) l'un dans l'autre. | |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Ven 5 Juil 2013 - 13:34 | |
| Bien merci. Par contre dans les commentaires que j'ai mis, until et end_while se retrouvent en 2ème position (après FOR), et non troisième comme j'ai mis. |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Ven 5 Juil 2013 - 23:26 | |
| Je viens de terminer en teste le programme d'indentation fait avec Panoramic. Si certains veulent essayer de le mettre en défaut, en testant des lignes basics avec entre autre des instructions de conditions en commentaire ou dans des chaines. J'ai mis des pauses pour voir la méthode. - Code:
-
' teste d'indentation width 0,1400:height 0,600 label teste dim loop$(50),loop(50) , a% , a$ ,space% dim boucle_open$ , boucle_close$ , close% , open% , compt% , debut%, select%,case%, open$ boucle_open$ = " FOR WHILE REPEAT IF ELSE SELECT CASE " boucle_close$ = " NEXT END_WHILE UNTIL END_IF END_SELECT THEN " dim tex$ , l%(50) , flag%
for a% = 0 to 20:l%(a%) = a%*4+2 : next a%
' tex$="for a = 1 to 10:print "+chr$(34)+"salut"+chr$(34)+":repeat:until scancode =0"
memo 1:width 1,900:height 1,250:font_size 1,10:font_bold 1:font_name 1,"Courier New" :bar_both 1
memo 3:top 3,260 :width 3,900:height 3,280 :font_size 3,10:font_bold 3:font_name 3,"Courier New" :hint 3,3 button 4:left 4,910:caption 4,"indentation":on_click 4,teste :width 4,55 :bar_both 3
memo 8 :left 8,1190:height 8,400:font_size 8,10:font_bold 8:font_name 8,"Courier New" :top 8,20 :hint 8,8 memo 9 :left 9,910:width 9,200:height 9,290:font_size 9,10:font_bold 9:font_name 9,"Courier New" :top 9,250 :hint 9,9
' item_add 1,tex$ end ' ============================================================================== teste: space%=2 clear 3 :clear 8 : clear 9 :debut%=2 :flag% = 0 :compt%=-1 :select%=0:case%=0 :space%=0 :close%=0:open%=0 item_add 3,"123456789'123456789'123456789'123456789'123456789'123456789'12345678" if count(1) > 0
for a%= 1 to count(1) a$ = item_read$(1,a%) explode_boucle(a$, a%)
if compt% > 0 else debut% = 2 end_if
item_add 3,string$(debut%+open% ," ") + trim$(a$) open% = space% flag%=0 next a% end_if
return ' ============================================================================== sub explode_boucle(a$, ligne%) a$ = trim$(upper$(a$))+":" dim_local b$,c$,a%,b% , g% if a$ <> "" c$ = "" for a%=1 to len(a$) b$ = mid$(a$,a%,1) ' ................................................................. if b$ = chr$(34) g% = bin_and( g%+1 , 1) :' simulation de ODD() pour AutoIt (pas trouvé l'instruction) ' donc au départ g%=0 et +1 pour le premier guillemet trouvé, pour le 2ème, g% redevient 0
c$ = c$+"@":' pour surmonter le fait que les guillemets sont supprimés dans une chaine. else if b$ = "'" and g% = 0 a% = len(a$) else if c$ = "REM" and g% = 0 then a% = len(a$) if instr(" :,/*-.<>",b$) > 0 ' if b$ = chr$(34) then :item_add 9,"*"+b$+"#"+c$ :message b$+chr$(13)+c$ item_add 9,c$ ' ....................................................... if g% = 0 :' or (g% = 1 and mid$(a$,a%+1,1) = chr$(34) ) ' on regarde si début de boucle if instr(boucle_open$," "+c$+" ") > 0 if c$ = "CASE" or c$ = "ELSE" else item_add 8,c$ end_if
if flag%=0 compt% = count(8)-1 :' pour commencer à 0 car 0*4 = 0 & +2 pour une marge de 2 caractères, if c$ <> "CASE" :' position 0 est pour procédure, return et end_sub, non traité ici. debut% = l%(compt%) :flag%=1 else debut% = case%:flag%=1 end_if space% = 4 :open%=0 if c$ = "SELECT" then case% = debut%+4 end_if
c$="" end_if
' .................................................. ' on regarde si fin de boucle if instr(boucle_close$," "+c$+" ") > 0 ' là il faut retrouver le pendant if c$="NEXT" then open$="FOR" if c$="UNTIL" then open$ = "REPEAT" if c$ = "END_WHILE" then open$ = "WHILE" if c$ = "END_SELECT" then open$ = "SELECT" if c$ = "END_IF" then open$ = "IF" if c$ = "THEN" then open$ = "IF"
if count(8) > 0 for b%= count(8) to 1 step -1
if open$ = item_read$(8,b%) if flag% = 0 then compt%=b%-1 : debut% = l%(compt%):flag%=1 : space% = 0 :open% = 0
if c$ <> "ELSE" then pause 200:item_delete 8,b% exit_for end_if next b% end_if c$="" end_if ' .................................................. end_if :' g%=0 ' ......... c$ = "" else c$ = c$ + b$ end_if end_if ' ............................................................
end_if ' ------------------------------------------------------------------------------------------
pause 10 next a%
end_if
end_sub
- si problème du forum un décodeur, et le programme codé:
' programme décodage pour forum - Code:
-
LABEL() variables() GUI() END ' ------- début des procédures diverses ------
decode: if count(7) > 0 l%=0 for a% = 1 to count(7) a$ = item_read$(7,a%) : c$ = "" for b%= 1 to len(a$) b$ = mid$(a$,b%,1) : bb%= asc(b$) select bb% case 161 : b$ = chr$(32) case 162 :b$ = chr$(40) case 163 :b$ = chr$(41) case 164 : b$ = chr$(92) case 165 : b$ = chr$(47) case 166 : b$ = chr$(60) case 167 : b$ = chr$(62) end_select c$ = c$ + b$ next b% item_delete 7,a% : item_insert 7,a%,c$ l%=l%+len(c$)+2 next a% end_if return ' ===================================== coller: clipboard_paste 7 return ' ----------------------------------------
copie: select_text 7,1,l% copie$ = select_read$(7) clipboard_string_copy copie$ print "salut" return
sub LABEL() LABEL copie ,coller,decode END_SUB
sub variables() DIM f$ , a% , a$ , b$ , b% , bb% , c$ , l% DIM copie$ END_SUB
SUB GUI() caption 0,"choisir un programme à coder ou bien à décoder" open_dialog 1
button 3:left 3,10:caption 3,"copier":width 3,120:on_click 3,copie:top 3,30
button 5:left 5,140:caption 5,"decodage":width 5,120:on_click 5,decode:top 5,30
button 6:left 6,280:caption 6,"coller":width 6,120:on_click 6,coller
memo 7:top 7,70:width 7,width(0) - 50 : height 7,height(0)-130 : font_size 7,10 :bar_both 7 END_SUB le programme codé: - Code:
-
¡'¡teste¡d'indentation ¡width¡0,1400:height¡0,600 ¡label¡teste ¡dim¡loop$¢50£,loop¢50£¡¡,¡a%¡,¡a$¡,space% ¡dim¡boucle_open$¡,¡boucle_close$¡¡,¡close%¡,¡open%¡,¡compt%¡,¡debut%,¡select%,case%,¡open$ ¡boucle_open$¡¡=¡"¡FOR¡WHILE¡REPEAT¡IF¡ELSE¡SELECT¡CASE¡" ¡boucle_close$¡=¡"¡NEXT¡END_WHILE¡UNTIL¡END_IF¡END_SELECT¡" ¡dim¡tex$¡,¡l%¢50£¡¡,¡flag%
¡for¡a%¡=¡0¡to¡20:l%¢a%£¡=¡a%*4+2¡:¡next¡a%
¡tex$="for¡a¡=¡1¡to¡10:print¡"+chr$¢34£+"salut"+chr$¢34£+":repeat:until¡scancode¡=0"
¡memo¡1:width¡1,900:height¡1,250:font_size¡1,10:font_bold¡1:font_name¡1,"Courier¡New"
¡memo¡3:top¡3,260¡:width¡3,900:height¡3,280¡:font_size¡3,10:font_bold¡3:font_name¡3,"Courier¡New"¡:hint¡3,3 ¡button¡4:left¡4,910:caption¡4,"indentation":on_click¡4,teste¡:width¡4,55
¡memo¡8¡:left¡8,1190:height¡8,200:font_size¡8,10:font_bold¡8:font_name¡8,"Courier¡New"¡:top¡8,20¡:hint¡8,8 ¡memo¡9¡:left¡9,910:width¡9,450:height¡9,290:font_size¡9,10:font_bold¡9:font_name¡9,"Courier¡New"¡:top¡9,250¡:hint¡9,9
¡item_add¡1,tex$ ¡end ¡'¡============================================================================== ¡teste: ¡¡¡space%=2 ¡¡¡clear¡3¡:clear¡8¡:¡clear¡9¡:debut%=2¡¡:flag%¡=¡0¡:compt%=-1¡:select%=0:case%=0¡¡:space%=0¡:close%=0:open%=0 ¡¡¡item_add¡3,"123456789'123456789'123456789'123456789'123456789'123456789'12345678" ¡¡¡if¡count¢1£¡§¡0
¡¡¡¡¡¡¡¡for¡a%=¡1¡to¡count¢1£ ¡¡¡¡¡¡¡¡¡¡¡¡¡a$¡=¡item_read$¢1,a%£ ¡¡¡¡¡¡¡¡¡¡¡¡¡explode_boucle¢a$,¡a%£
¡¡¡¡¡¡¡¡¡¡¡¡¡if¡compt%¡§¡0 ¡¡¡¡¡¡¡¡¡¡¡¡¡else ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡debut%¡=¡2 ¡¡¡¡¡¡¡¡¡¡¡¡¡end_if
¡¡¡¡¡¡¡¡¡¡¡¡¡item_add¡3,string$¢debut%+open%¡,"¡"£¡+¡trim$¢a$£ ¡¡¡¡¡¡¡¡¡¡¡¡¡open%¡=¡space% ¡¡¡¡¡¡¡¡¡¡¡¡¡flag%=0 ¡¡¡¡¡¡¡¡next¡a% ¡¡¡end_if
return '¡============================================================================== sub¡explode_boucle¢a$,¡ligne%£ ¡¡¡a$¡=¡trim$¢upper$¢a$££+":" ¡¡¡dim_local¡b$,c$,a%,b%¡,¡g% ¡¡¡if¡a$¡¦§¡"" ¡¡¡¡¡¡¡¡c$¡=¡"" ¡¡¡¡¡¡¡¡for¡a%=1¡to¡len¢a$£ ¡¡¡¡¡¡¡¡¡¡¡¡¡b$¡=¡mid$¢a$,a%,1£ ¡¡¡¡¡¡¡¡¡¡¡¡¡'¡................................................................. ¡¡¡¡¡¡¡¡¡¡¡¡¡if¡b$¡=¡chr$¢34£ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡g%¡=¡¡bin_and¢¡g%+1¡¡,¡1£¡:'¡simulation¡de¡ODD¢£¡pour¡AutoIt¡¢pas¡trouvé¡l'instruction£ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡donc¡au¡départ¡g%=0¡et¡+1¡pour¡le¡premier¡guillemet¡trouvé,¡pour¡le¡2ème,¡g%¡redevient¡0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡c$¡=¡c$+"@":'¡pour¡surmonter¡le¡fait¡que¡les¡guillemets¡sont¡supprimés¡dans¡une¡chaine. ¡¡¡¡¡¡¡¡¡¡¡¡¡else ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡b$¡=¡"'"¡and¡g%¡=¡0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡a%¡=¡len¢a$£ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡else ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡=¡"REM"¡and¡g%¡=¡0¡then¡a%¡=¡len¢a$£ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡instr¢"¡:,¥*-.¦§",b$£¡§¡0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡if¡¡b$¡=¡chr$¢34£¡then¡¡:item_add¡9,"*"+b$+"#"+c$¡:message¡b$+chr$¢13£+c$ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡item_add¡9,c$ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡....................................................... ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡g%¡=¡0¡¡:'¡or¡¢g%¡=¡1¡and¡mid$¢a$,a%+1,1£¡=¡chr$¢34£¡£ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡on¡regarde¡si¡début¡de¡boucle ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡instr¢boucle_open$,"¡"+c$+"¡"£¡§¡0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡=¡"CASE"¡or¡c$¡=¡"ELSE" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡else ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡item_add¡8,c$ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡flag%=0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡compt%¡=¡count¢8£-1¡¡¡¡¡¡¡¡¡¡¡¡¡¡:'¡pour¡commencer¡à¡0¡car¡0*4¡=¡0¡&¡+2¡pour¡une¡marge¡de¡2¡caractères, ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡¦§¡"CASE"¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡:'¡position¡0¡est¡pour¡procédure,¡return¡et¡end_sub,¡non¡traité¡ici. ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡debut%¡=¡l%¢compt%£¡:flag%=1 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡else ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡debut%¡=¡case%:flag%=1 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡space%¡=¡4¡:open%=0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡=¡"SELECT"¡then¡case%¡=¡debut%+4 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡c$="" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡.................................................. ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡on¡regarde¡si¡fin¡de¡boucle ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡instr¢boucle_close$,"¡"+c$+"¡"£¡§¡0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡là¡il¡faut¡retrouver¡le¡pendant ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$="NEXT"¡then¡open$="FOR" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$="UNTIL"¡then¡open$¡=¡"REPEAT" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡=¡"END_WHILE"¡then¡open$¡=¡"WHILE" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡=¡"END_SELECT"¡then¡open$¡=¡"SELECT" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡=¡"END_IF"¡then¡open$¡=¡"IF" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡=¡"THEN"¡then¡open$¡=¡"IF"
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡count¢8£¡§¡0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡for¡b%=¡count¢8£¡to¡1¡step¡-1 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡open$¡=¡item_read$¢8,b%£ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡flag%¡=¡0¡then¡compt%=b%-1¡:¡debut%¡=¡l%¢compt%£:flag%=1¡:¡space%¡=¡0¡:open%¡=¡0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if¡c$¡¦§¡"ELSE"¡then¡pause¡500:item_delete¡8,b% ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡exit_for ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡next¡b% ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡c$="" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡.................................................. ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if¡:'¡g%=0 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡......... ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡c$¡=¡"" ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡else ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡c$¡=¡c$¡+¡b$ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end_if ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡............................................................
¡¡¡¡¡¡¡¡¡¡¡¡¡end_if ¡¡¡¡¡¡¡¡¡¡¡¡¡'¡g%¡et¡le¡fait¡que¡si¡il¡y¡a¡juste¡derrière¡un¡guillemet,¡celui-là¡n'est¡pas¡pris¡en¡compte ¡¡¡¡¡¡¡¡¡¡¡¡¡'¡------------------------------------------------------------------------------------------
¡¡¡¡¡¡¡¡¡¡¡¡¡pause¡10 ¡¡¡¡¡¡¡¡next¡a%
¡¡¡end_if
end_sub
A essayer de maltraiter les boucles diverses J'ai oublié: on copie les codes dans le memo du haut à gauche, puis on clique sur indentation.
Dernière édition par cosmos70 le Sam 6 Juil 2013 - 10:59, édité 1 fois |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour mon éditeur Sam 6 Juil 2013 - 2:05 | |
| Voilà mon programme de gestion d'un site FTP. Le programme d'indentation ne semble pas l'aimer beaucoup... - Code:
-
' teste d'indentation width 0,1400:height 0,600 label teste dim loop$(50),loop(50) , a% , a$ ,space% dim boucle_open$ , boucle_close$ , close% , open% , compt% , debut%, select%,case%, open$ boucle_open$ = " FOR WHILE REPEAT IF ELSE SELECT CASE " boucle_close$ = " NEXT END_WHILE UNTIL END_IF END_SELECT " dim tex$ , l%(50) , flag%
for a% = 0 to 20:l%(a%) = a%*4+2 : next a%
tex$="for a = 1 to 10:print "+chr$(34)+"salut"+chr$(34)+":repeat:until scancode =0"
memo 1:width 1,900:height 1,250:font_size 1,10:font_bold 1:font_name 1,"Courier New"
memo 3:top 3,260 :width 3,900:height 3,280 :font_size 3,10:font_bold 3:font_name 3,"Courier New" :hint 3,3 button 4:left 4,910:caption 4,"indentation":on_click 4,teste :width 4,55
memo 8 :left 8,1190:height 8,200:font_size 8,10:font_bold 8:font_name 8,"Courier New" :top 8,20 :hint 8,8 memo 9 :left 9,910:width 9,450:height 9,290:font_size 9,10:font_bold 9:font_name 9,"Courier New" :top 9,250 :hint 9,9
item_add 1,tex$ end ' ============================================================================== teste: space%=2 clear 3 :clear 8 : clear 9 :debut%=2 :flag% = 0 :compt%=-1 :select%=0:case%=0 :space%=0 :close%=0:open%=0 item_add 3,"123456789'123456789'123456789'123456789'123456789'123456789'12345678" if count(1) > 0
for a%= 1 to count(1) a$ = item_read$(1,a%) explode_boucle(a$, a%)
if compt% > 0 else debut% = 2 end_if
item_add 3,string$(debut%+open% ," ") + trim$(a$) open% = space% flag%=0 next a% end_if
return ' ============================================================================== sub explode_boucle(a$, ligne%) a$ = trim$(upper$(a$))+":" dim_local b$,c$,a%,b% , g% if a$ <> "" c$ = "" for a%=1 to len(a$) b$ = mid$(a$,a%,1) ' ................................................................. if b$ = chr$(34) g% = bin_and( g%+1 , 1) :' simulation de ODD() pour AutoIt (pas trouvé l'instruction) ' donc au départ g%=0 et +1 pour le premier guillemet trouvé, pour le 2ème, g% redevient 0
c$ = c$+"@":' pour surmonter le fait que les guillemets sont supprimés dans une chaine. else if b$ = "'" and g% = 0 a% = len(a$) else if c$ = "REM" and g% = 0 then a% = len(a$) if instr(" :,/*-.<>",b$) > 0 ' if b$ = chr$(34) then :item_add 9,"*"+b$+"#"+c$ :message b$+chr$(13)+c$ item_add 9,c$ ' ....................................................... if g% = 0 :' or (g% = 1 and mid$(a$,a%+1,1) = chr$(34) ) ' on regarde si début de boucle if instr(boucle_open$," "+c$+" ") > 0 if c$ = "CASE" or c$ = "ELSE" else item_add 8,c$ end_if
if flag%=0 compt% = count(8)-1 :' pour commencer à 0 car 0*4 = 0 & +2 pour une marge de 2 caractères, if c$ <> "CASE" :' position 0 est pour procédure, return et end_sub, non traité ici. debut% = l%(compt%) :flag%=1 else debut% = case%:flag%=1 end_if space% = 4 :open%=0 if c$ = "SELECT" then case% = debut%+4 end_if
c$="" end_if
' .................................................. ' on regarde si fin de boucle if instr(boucle_close$," "+c$+" ") > 0 ' là il faut retrouver le pendant if c$="NEXT" then open$="FOR" if c$="UNTIL" then open$ = "REPEAT" if c$ = "END_WHILE" then open$ = "WHILE" if c$ = "END_SELECT" then open$ = "SELECT" if c$ = "END_IF" then open$ = "IF" if c$ = "THEN" then open$ = "IF"
if count(8) > 0 for b%= count(8) to 1 step -1 if open$ = item_read$(8,b%) if flag% = 0 then compt%=b%-1 : debut% = l%(compt%):flag%=1 : space% = 0 :open% = 0 if c$ <> "ELSE" then pause 500:item_delete 8,b% exit_for end_if next b% end_if c$="" end_if ' .................................................. end_if :' g%=0 ' ......... c$ = "" else c$ = c$ + b$ end_if end_if ' ............................................................
end_if ' g% et le fait que si il y a juste derrière un guillemet, celui-là n'est pas pris en compte ' ------------------------------------------------------------------------------------------
pause 10 next a%
end_if
end_sub
| |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Sam 6 Juil 2013 - 7:05 | |
| Ok je vais regarder., et merci pour avoir testé. ??? Pourquoi c'est mon programme que tu mets? Plusieurs choses au départ. J'ai mis des memos pour faire des teste, mais comme on y met un programme complet, il faut aussi rajouter bar_both pour que les lignes se trouvent dans la même ligne du memo. Ensuite je n'ai pas traité le cas des procédures, des subs, de return et end_sub qui remettent à zéro les marges. Ca n'a pas de sens des faire des boucles avec des subs à l'intérieur.
Apparemment il y a quelque chose qui ne va pas avec les IF ELSE END_IF THEN
Maintenant la réponse n'est pas pour tout de suite. J'ai trop d'occupations |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Sam 6 Juil 2013 - 11:02 | |
| Bien j'ai trouvé: Il manquait "THEN " dans: boucle_close$ = " NEXT END_WHILE UNTIL END_IF END_SELECT THEN " Si vous voulez refaire des essais. Le source a été modifier plus haut, je n'ai rien modidier dans le code encodé. EDIT J'ai vu un autre problème avec les retours sur une même ligne. Il faut modifier ainsi: - Code:
-
if open$ = item_read$(8,b%) if flag% = 0 compt%=b%-1 : debut% = l%(compt%):flag%=1 : space% = 0 :open% = 0 else space%=0 end_if if c$ <> "ELSE" then item_delete 8,b% exit_for end_if Je ne vais pas vous ennuyer plus. Vous modifiez si vous le voulez. Le code n'est plus à jour. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour mon éditeur Dim 7 Juil 2013 - 8:59 | |
| Désolé pour l'erreur de copie. Voici le code en question: - Citation :
- ' update_site_FTP.bas
labels() constantes() variables() environnement() form0() ecran()
end
sub labels() label close0, connecter, deconnecter, sortir label sel_server, mod_server, del_server, new_server label sel_dir, upload, add_file, rem_file label all_FTP_files, add_FTP_file, rem_FTP_file label download, changer_dest end_sub
sub constantes() dim KGF$ : KGF$ = "KGF.dll" dim ini$ : ini$ = "update_site_FTP.ini" end_sub
sub variables() dim dossier$, connecte%, home% dim no%, no1%, no2%, s$, i%, s1$, idx%, f%, n% dim no_server%, no_dir%, no_files%, no_FTP%, no_dest% end_sub
sub form0() full_space 0 caption 0,"Update site FTP" on_close 0,close0 no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% caption no%,"Fichier" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Connecter" : on_click no%,connecter no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Déconnecter" : on_click no%,deconnecter no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Sortir" : on_click no%,sortir
end_sub
sub ecran() no% = no% + 1 : container no% : no_server% = no% top no%,10 : left no%,10 : width no%,400 : height no%,180 caption no%,"Site FTP" no% = no% + 1 : combo no% : parent no%,no_server% : ' +1 top no%,20 : left no%,100 : width no%, 200 : on_click no%,sel_server no% = no% + 1 : dlist no% : ' +2 no% = no% + 1 : alpha no% : parent no%,no_server% top no%,50 : left no%,10 : caption no%,"Site FTP:" no% = no% + 1 : edit no% : parent no%,no_server% : ' +4 top no%,50 : left no%,100 : width no%,200 no% = no% + 1 : alpha no% : parent no%,no_server% top no%,80 : left no%,10 : caption no%,"Identifiant:" no% = no% + 1 : edit no% : parent no%,no_server% : ' +6 top no%,80 : left no%,100 : width no%,200 no% = no% + 1 : alpha no% : parent no%,no_server% top no%,110 : left no%,10 : caption no%,"Mot de passe:" no% = no% + 1 : edit no% : parent no%,no_server% : ' +8 top no%,110 : left no%,100 : width no%,200 no% = no% + 1 : button no% : parent no%,no_server% top no%,140 : left no%,100 : width no%,60 caption no%,"MàJ" : on_click no%,mod_server no% = no% + 1 : button no% : parent no%,no_server% top no%,140 : left no%,230 : width no%,30 caption no%,"-" : on_click no%,del_server no% = no% + 1 : button no% : parent no%,no_server% top no%,140 : left no%,270 : width no%,30 caption no%,"+" : on_click no%,new_server load_server() no% = no% + 1 : container no% : no_dir% = no% top no%,200 : left no%,10 : width no%,400 : height no%,180 caption no%,"Dossiers:" no% = no% + 1 : list no% : parent no%,no_dir% : ' +1 top no%,20 : left no%,10 : width no%,380 : height no%,150 on_click no%,sel_dir no% = no% + 1 : memo no% : hide no% : ' +2
no% = no% + 1 : container no% : no_files% = no% top no%,200 : left no%,510 : width no%,660 : height no%,180 caption no%,"Fichiers locaux:" no% = no% + 1 : list no% : parent no%,no_files% : ' +1 top no%,20 : left no%,10 : width no%,600 : height no%,150 no% = no% + 1 : open_dialog no% : ' +2 no% = no% + 1 : memo no% : hide no% : width no%,1000 : ' +3 no% = no% + 1 : button no% : parent no%,no_files% top no%,20 : left no%,620 : width no%,30 caption no%,"+" : on_click no%,add_file no% = no% + 1 : button no% : parent no%,no_files% top no%,60 : left no%,620 : width no%,30 caption no%,"-" : on_click no%,rem_file
no% = no% + 1 : button no% : top no%,230 : left no%,420 caption no%,"<<<<<" : on_click no%,upload
no% = no% + 1 : container no% : no_FTP% = no% top no%,390 : left no%,10 : width no%,660 : height no%,180 caption no%,"Fichiers FTP:" no% = no% + 1 : list no% : parent no%,no_FTP% : ' +1 top no%,20 : left no%,10 : width no%,600 : height no%,150 font_name no%,"Courier" no% = no% + 1 : button no% : parent no%,no_FTP% top no%,20 : left no%,620 : width no%,30 caption no%,"*" : on_click no%,all_FTP_files no% = no% + 1 : button no% : parent no%,no_FTP% top no%,60 : left no%,620 : width no%,30 caption no%,"+" : on_click no%,add_FTP_file no% = no% + 1 : button no% : parent no%,no_FTP% top no%,100 : left no%,620 : width no%,30 caption no%,"-" : on_click no%,rem_FTP_file
no% = no% + 1 : button no% : top no%,430 : left no%,680 caption no%,">>>>>" : on_click no%,download
no% = no% + 1 : container no% : no_dest% = no% top no%,390 : left no%,770 : width no%,400 : height no%,180 caption no%,"Dossier local:" no% = no% + 1 : list no% : parent no%,no_dest% : ' +1 top no%,40 : left no%,10 : width no%,380 : height no%,25 no% = no% + 1 : button no% : parent no%,no_dest% top no%,70 : left no%,150 caption no%,"Changer" : on_click no%,changer_dest
end_sub
sub environnement() KGF_initialize(KGF$) dossier$ = dir_current$ + "\" if file_exists(dossier$+ini$)=0 file_open_write 1,dossier$+ini$ file_writeln 1,"MonSite,MonServeur,MonID,MonMotDePasse" file_close 1 end_if end_sub
sub load_server() file_open_read 1,dossier$+ini$ while file_eof(1)=0 file_readln 1,s$ item_add no_server%+2,s$ KGFDelimitedTextExtract(s$,",",1) item_add no_server%+1,KGFDelimitedTextExtract$ end_while file_close 1 idx% = 1 SelectComboBoxItem(handle(no_server%+1),1) aff_server(item_read$(no_server%+2,item_index(no_server%+1))) end_sub
sub aff_server(s$) KGFDelimitedTextExtract(s$,",",2) text no_server%+4,KGFDelimitedTextExtract$ KGFDelimitedTextExtract(s$,",",3) text no_server%+6,KGFDelimitedTextExtract$ KGFDelimitedTextExtract(s$,",",4) text no_server%+8,KGFDelimitedTextExtract$ end_sub
close0: if variable("KGF_res%")=1 then dll_off return sel_server: idx% = item_index(no_server%+1) aff_server(item_read$(no_server%+2,idx%)) return
mod_server: s$ = text$(no_server%+1)+","+text$(no_server%+4)+","+text$(no_server%+6)+","+text$(no_server%+ s1$ = text$(no_server%+1) item_delete no_server%+1,idx% item_delete no_server%+2,idx% item_insert no_server%+1,idx%,s1$ item_insert no_server%+2,idx%,s$ SelectComboBoxItem(handle(no_server%+1),idx%) aff_server(item_read$(no_server%+2,idx%)) file_save no_server%+2,dossier$+ini$ return
del_server: if message_confirmation_yes_no("Voulez-vous vraiment supprimer le serveur "+text$(no_server%+4)+" ?")=1 item_delete no_server%+1,idx% item_delete no_server%+2,idx% if count(no_server%+1)=0 item_add no_server%+1,"MonSite" item_add no_server%+2,"MonSite,MonServeur,MonID,MonMotDePasse" end_if if idx%>count(no_server%+1) then idx% = count(no_server%+1) SelectComboBoxItem(handle(no_server%+1),idx%) aff_server(item_read$(no_server%+2,idx%)) file_save no_server%+2,dossier$+ini$ end_if return
new_server: s$ = text$(no_server%+1)+","+text$(no_server%+4)+","+text$(no_server%+6)+","+text$(no_server%+ item_add no_server%+1,text$(no_server%+1) item_add no_server%+2,s$ idx% = count(no_server%+1) SelectComboBoxItem(handle(no_server%+1),idx%) aff_server(item_read$(no_server%+2,idx%)) file_save no_server%+2,dossier$+ini$ return
connecter: if connecte%=1 then CloseFTP() IdentifyMyFTP(text$(no_server%+4),text$(no_server%+6),text$(no_server%+) OpenFTP(0) load_folders() connecte% = 1 return
sub load_folders() GetCurrentFolderFilesOnFTP(no_dir%+2) clear no_dir%+1 clear no_FTP%+1 home% = 0 item_add no_dir%+1,".." for i%=1 to count(no_dir%+2) s$ = item_read$(no_dir%+2,i%) f% = 1 if left$(s$,1)="." f% = 0 else if len(s$)>4 if mid$(s$,len(s$)-4,1)="." then f% = 0 end_if if len(s$)>3 if mid$(s$,len(s$)-3,1)="." then f% = 0 end_if if len(s$)>2 if mid$(s$,len(s$)-2,1)="." then f% = 0 end_if end_if if f%=1 item_add no_dir%+1,s$ else if left$(s$,1)<>"." then item_add no_FTP%+1,"[ ] "+s$ end_if if s$="index.html" then home% = 1 next i% if home%=1 then item_delete no_dir%+1,1 end_sub
sel_dir: s1$ = item_index$(no_dir%+1) ChangeFTPFolder(s1$) load_folders() GetActiveFTPDirectory() if home%=1 caption no_dir%,"Dossiers:" else caption no_dir%,"Dossiers: "+GetActiveFTPDirectory$ end_if return
deconnecter: if connecte%=1 CloseFTP() connecte% = 0 clear no_dir%+1 clear no_FTP%+1 caption no_dir%,"Dossiers:" end_if return sortir: if connecte%=1 message "Attention ! Vous êtes encore connecté !" return end_if terminate return upload: if connecte%=1 if count(no_files%+1)>0 n% = count(no_files%+1) for i%=1 to n% s$ = item_read$(no_files%+1,1) item_delete no_files%+1,1 display UploadFileToFTP(s$,1) next i% message "fini." end_if end_if return add_file: SelectFileToOpen("","",no_files%+3) if SelectFileToOpen=1 for i%=1 to count(no_files%+3) item_add no_files%+1,item_read$(no_files%+3,i%) next i% end_if return rem_file: if item_index(no_files%+1)>0 then item_delete no_files%+1,item_index(no_files%+1) return
all_FTP_files: if count(no_FTP%+1)=0 then return for i%=1 to count(no_FTP%+1) s$ = item_read$(no_FTP%+1,i%) if mid$(s$,5,2)<>".." item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[*] "+mid$(s$,5,len(s$)) end_if next i% return
add_FTP_file: if count(no_FTP%+1)=0 then return i% = item_index(no_FTP%+1) if i%=0 then return s$ = item_read$(no_FTP%+1,i%) if mid$(s$,5,2)<>".." item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[*] "+mid$(s$,5,len(s$)) end_if return
rem_FTP_file: if count(no_FTP%+1)=0 then return i% = item_index(no_FTP%+1) if i%=0 then return s$ = item_read$(no_FTP%+1,i%) if mid$(s$,5,2)<>".." item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[ ] "+mid$(s$,5,len(s$)) end_if return
download: if count(no_FTP%+1)=0 then return s1$ = item_read$(no_dest%+1,1) if s1$="" then return s1$ = s1$ + "\" for i%=1 to count(no_FTP%+1) s$ = item_read$(no_FTP%+1,i%) if left$(s$,3)="[*]" s$ = mid$(s$,5,len(s$)) if s$<>".." DownloadFileFromFTP(s$,s1$+s$,1) item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[ ] "+s$ end_if end_if next i% message "fini" return
changer_dest: FolderSelect(dossier$,1) if FolderSelect=1 clear no_dest%+1 item_add no_dest%+1,FolderSelect$ end_if return
#INCLUDE "KGF_SUB.bas"
| |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Dim 7 Juil 2013 - 10:36 | |
| Ok j'ai compris. Les modifications que j'ai apportées depuis fonctionnennt (en tenant compte que les lignes sub, sous-programme, return et end_sub ne sont pas traités ici, vu que dans mon programme (Editor), il y a un rapport avec la liste des labels. Voici le résultat: - Code:
-
' update_site_FTP.bas labels() constantes() variables() environnement() form0() ecran() end sub labels() label close0, connecter, deconnecter, sortir label sel_server, mod_server, del_server, new_server label sel_dir, upload, add_file, rem_file label all_FTP_files, add_FTP_file, rem_FTP_file label download, changer_dest end_sub sub constantes() dim KGF$ : KGF$ = "KGF.dll" dim ini$ : ini$ = "update_site_FTP.ini" end_sub sub variables() dim dossier$, connecte%, home% dim no%, no1%, no2%, s$, i%, s1$, idx%, f%, n% dim no_server%, no_dir%, no_files%, no_FTP%, no_dest% end_sub sub form0() full_space 0 caption 0,"Update site FTP" on_close 0,close0 no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% caption no%,"Fichier" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Connecter" : on_click no%,connecter no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Déconnecter" : on_click no%,deconnecter no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% caption no%,"Sortir" : on_click no%,sortir end_sub sub ecran() no% = no% + 1 : container no% : no_server% = no% top no%,10 : left no%,10 : width no%,400 : height no%,180 caption no%,"Site FTP" no% = no% + 1 : combo no% : parent no%,no_server% : ' +1 top no%,20 : left no%,100 : width no%, 200 : on_click no%,sel_server no% = no% + 1 : dlist no% : ' +2 no% = no% + 1 : alpha no% : parent no%,no_server% top no%,50 : left no%,10 : caption no%,"Site FTP:" no% = no% + 1 : edit no% : parent no%,no_server% : ' +4 top no%,50 : left no%,100 : width no%,200 no% = no% + 1 : alpha no% : parent no%,no_server% top no%,80 : left no%,10 : caption no%,"Identifiant:" no% = no% + 1 : edit no% : parent no%,no_server% : ' +6 top no%,80 : left no%,100 : width no%,200 no% = no% + 1 : alpha no% : parent no%,no_server% top no%,110 : left no%,10 : caption no%,"Mot de passe:" no% = no% + 1 : edit no% : parent no%,no_server% : ' +8 top no%,110 : left no%,100 : width no%,200 no% = no% + 1 : button no% : parent no%,no_server% top no%,140 : left no%,100 : width no%,60 caption no%,"MàJ" : on_click no%,mod_server no% = no% + 1 : button no% : parent no%,no_server% top no%,140 : left no%,230 : width no%,30 caption no%,"-" : on_click no%,del_server no% = no% + 1 : button no% : parent no%,no_server% top no%,140 : left no%,270 : width no%,30 caption no%,"+" : on_click no%,new_server load_server() no% = no% + 1 : container no% : no_dir% = no% top no%,200 : left no%,10 : width no%,400 : height no%,180 caption no%,"Dossiers:" no% = no% + 1 : list no% : parent no%,no_dir% : ' +1 top no%,20 : left no%,10 : width no%,380 : height no%,150 on_click no%,sel_dir no% = no% + 1 : memo no% : hide no% : ' +2 no% = no% + 1 : container no% : no_files% = no% top no%,200 : left no%,510 : width no%,660 : height no%,180 caption no%,"Fichiers locaux:" no% = no% + 1 : list no% : parent no%,no_files% : ' +1 top no%,20 : left no%,10 : width no%,600 : height no%,150 no% = no% + 1 : open_dialog no% : ' +2 no% = no% + 1 : memo no% : hide no% : width no%,1000 : ' +3 no% = no% + 1 : button no% : parent no%,no_files% top no%,20 : left no%,620 : width no%,30 caption no%,"+" : on_click no%,add_file no% = no% + 1 : button no% : parent no%,no_files% top no%,60 : left no%,620 : width no%,30 caption no%,"-" : on_click no%,rem_file no% = no% + 1 : button no% : top no%,230 : left no%,420 caption no%,"<<<<<" : on_click no%,upload no% = no% + 1 : container no% : no_FTP% = no% top no%,390 : left no%,10 : width no%,660 : height no%,180 caption no%,"Fichiers FTP:" no% = no% + 1 : list no% : parent no%,no_FTP% : ' +1 top no%,20 : left no%,10 : width no%,600 : height no%,150 font_name no%,"Courier" no% = no% + 1 : button no% : parent no%,no_FTP% top no%,20 : left no%,620 : width no%,30 caption no%,"*" : on_click no%,all_FTP_files no% = no% + 1 : button no% : parent no%,no_FTP% top no%,60 : left no%,620 : width no%,30 caption no%,"+" : on_click no%,add_FTP_file no% = no% + 1 : button no% : parent no%,no_FTP% top no%,100 : left no%,620 : width no%,30 caption no%,"-" : on_click no%,rem_FTP_file no% = no% + 1 : button no% : top no%,430 : left no%,680 caption no%,">>>>>" : on_click no%,download no% = no% + 1 : container no% : no_dest% = no% top no%,390 : left no%,770 : width no%,400 : height no%,180 caption no%,"Dossier local:" no% = no% + 1 : list no% : parent no%,no_dest% : ' +1 top no%,40 : left no%,10 : width no%,380 : height no%,25 no% = no% + 1 : button no% : parent no%,no_dest% top no%,70 : left no%,150 caption no%,"Changer" : on_click no%,changer_dest end_sub sub environnement() KGF_initialize(KGF$) dossier$ = dir_current$ + "\" if file_exists(dossier$+ini$)=0 file_open_write 1,dossier$+ini$ file_writeln 1,"MonSite,MonServeur,MonID,MonMotDePasse" file_close 1 end_if end_sub sub load_server() file_open_read 1,dossier$+ini$ while file_eof(1)=0 file_readln 1,s$ item_add no_server%+2,s$ KGFDelimitedTextExtract(s$,",",1) item_add no_server%+1,KGFDelimitedTextExtract$ end_while file_close 1 idx% = 1 SelectComboBoxItem(handle(no_server%+1),1) aff_server(item_read$(no_server%+2,item_index(no_server%+1))) end_sub sub aff_server(s$) KGFDelimitedTextExtract(s$,",",2) text no_server%+4,KGFDelimitedTextExtract$ KGFDelimitedTextExtract(s$,",",3) text no_server%+6,KGFDelimitedTextExtract$ KGFDelimitedTextExtract(s$,",",4) text no_server%+8,KGFDelimitedTextExtract$ end_sub close0: if variable("KGF_res%")=1 then dll_off return sel_server: idx% = item_index(no_server%+1) aff_server(item_read$(no_server%+2,idx%)) return mod_server: s$ = text$(no_server%+1)+","+text$(no_server%+4)+","+text$(no_server%+6)+","+text$(no_server%+ s1$ = text$(no_server%+1) item_delete no_server%+1,idx% item_delete no_server%+2,idx% item_insert no_server%+1,idx%,s1$ item_insert no_server%+2,idx%,s$ SelectComboBoxItem(handle(no_server%+1),idx%) aff_server(item_read$(no_server%+2,idx%)) file_save no_server%+2,dossier$+ini$ return del_server: if message_confirmation_yes_no("Voulez-vous vraiment supprimer le serveur "+text$(no_server%+4)+" ?")=1 item_delete no_server%+1,idx% item_delete no_server%+2,idx% if count(no_server%+1)=0 item_add no_server%+1,"MonSite" item_add no_server%+2,"MonSite,MonServeur,MonID,MonMotDePasse" end_if if idx%>count(no_server%+1) then idx% = count(no_server%+1) SelectComboBoxItem(handle(no_server%+1),idx%) aff_server(item_read$(no_server%+2,idx%)) file_save no_server%+2,dossier$+ini$ end_if return new_server: s$ = text$(no_server%+1)+","+text$(no_server%+4)+","+text$(no_server%+6)+","+text$(no_server%+ item_add no_server%+1,text$(no_server%+1) item_add no_server%+2,s$ idx% = count(no_server%+1) SelectComboBoxItem(handle(no_server%+1),idx%) aff_server(item_read$(no_server%+2,idx%)) file_save no_server%+2,dossier$+ini$ return connecter: if connecte%=1 then CloseFTP() IdentifyMyFTP(text$(no_server%+4),text$(no_server%+6),text$(no_server%+) OpenFTP(0) load_folders() connecte% = 1 return sub load_folders() GetCurrentFolderFilesOnFTP(no_dir%+2) clear no_dir%+1 clear no_FTP%+1 home% = 0 item_add no_dir%+1,".." for i%=1 to count(no_dir%+2) s$ = item_read$(no_dir%+2,i%) f% = 1 if left$(s$,1)="." f% = 0 else if len(s$)>4 if mid$(s$,len(s$)-4,1)="." then f% = 0 end_if if len(s$)>3 if mid$(s$,len(s$)-3,1)="." then f% = 0 end_if if len(s$)>2 if mid$(s$,len(s$)-2,1)="." then f% = 0 end_if end_if if f%=1 item_add no_dir%+1,s$ else if left$(s$,1)<>"." then item_add no_FTP%+1,"[ ] "+s$ end_if if s$="index.html" then home% = 1 next i% if home%=1 then item_delete no_dir%+1,1 end_sub sel_dir: s1$ = item_index$(no_dir%+1) ChangeFTPFolder(s1$) load_folders() GetActiveFTPDirectory() if home%=1 caption no_dir%,"Dossiers:" else caption no_dir%,"Dossiers: "+GetActiveFTPDirectory$ end_if return deconnecter: if connecte%=1 CloseFTP() connecte% = 0 clear no_dir%+1 clear no_FTP%+1 caption no_dir%,"Dossiers:" end_if return sortir: if connecte%=1 message "Attention ! Vous êtes encore connecté !" return end_if terminate return upload: if connecte%=1 if count(no_files%+1)>0 n% = count(no_files%+1) for i%=1 to n% s$ = item_read$(no_files%+1,1) item_delete no_files%+1,1 display UploadFileToFTP(s$,1) next i% message "fini." end_if end_if return add_file: SelectFileToOpen("","",no_files%+3) if SelectFileToOpen=1 for i%=1 to count(no_files%+3) item_add no_files%+1,item_read$(no_files%+3,i%) next i% end_if return rem_file: if item_index(no_files%+1)>0 then item_delete no_files%+1,item_index(no_files%+1) return all_FTP_files: if count(no_FTP%+1)=0 then return for i%=1 to count(no_FTP%+1) s$ = item_read$(no_FTP%+1,i%) if mid$(s$,5,2)<>".." item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[*] "+mid$(s$,5,len(s$)) end_if next i% return add_FTP_file: if count(no_FTP%+1)=0 then return i% = item_index(no_FTP%+1) if i%=0 then return s$ = item_read$(no_FTP%+1,i%) if mid$(s$,5,2)<>".." item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[*] "+mid$(s$,5,len(s$)) end_if return rem_FTP_file: if count(no_FTP%+1)=0 then return i% = item_index(no_FTP%+1) if i%=0 then return s$ = item_read$(no_FTP%+1,i%) if mid$(s$,5,2)<>".." item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[ ] "+mid$(s$,5,len(s$)) end_if return download: if count(no_FTP%+1)=0 then return s1$ = item_read$(no_dest%+1,1) if s1$="" then return s1$ = s1$ + "\" for i%=1 to count(no_FTP%+1) s$ = item_read$(no_FTP%+1,i%) if left$(s$,3)="[*]" s$ = mid$(s$,5,len(s$)) if s$<>".." DownloadFileFromFTP(s$,s1$+s$,1) item_delete no_FTP%+1,i% item_insert no_FTP%+1,i%,"[ ] "+s$ end_if end_if next i% message "fini" return changer_dest: FolderSelect(dossier$,1) if FolderSelect=1 clear no_dest%+1 item_add no_dest%+1,FolderSelect$ end_if return #INCLUDE "KGF_SUB.bas"
Je remets le code revu de mon programme: - Code:
-
' teste d'indentation width 0,1400:height 0,600 label teste dim loop$(50),loop(50) , a% , a$ ,space% dim boucle_open$ , boucle_close$ , close% , open% , compt% , debut% dim open$ , for%,next% , select%,case% boucle_open$ = " FOR WHILE REPEAT IF ELSE SELECT CASE " boucle_close$ = " NEXT END_WHILE UNTIL END_IF END_SELECT THEN " dim tex$ , l%(50) , flag%
for a% = 0 to 20:l%(a%) = a%*4+2 : next a%
memo 1:width 1,900:height 1,250:font_size 1,10:font_bold 1 bar_both 1:font_name 1,"Courier New" memo 3:top 3,260 :width 3,900:height 3,280 :font_size 3,10:font_bold 3 font_name 3,"Courier New" :hint 3,3 button 4:left 4,910:caption 4,"indentation":on_click 4,teste :width 4,55 bar_both 3 memo 8 :left 8,1190:height 8,400:font_size 8,10:font_bold 8 font_name 8,"Courier New" : top 8,20 :hint 8,8
end ' ============================================================================= teste: space%=2 clear 3 :clear 8 :debut%=2 :flag% = 0 :compt%=-1 :select%=0:case%=0 space%=0 :close%=0:open%=0 if count(1) > 0
for a%= 1 to count(1) a$ = item_read$(1,a%) :for%=0:next%=0 explode_boucle(a$, a%)
if compt% > 0 else debut% = 2 end_if
item_add 3,string$(debut%+open% ," ") + trim$(a$) open% = space% flag%=0 next a% end_if return ' ============================================================================== sub explode_boucle(a$, ligne%) a$ = trim$(upper$(a$))+":" dim_local b$,c$,a%,b% , g% if a$ <> "" c$ = "" for a%=1 to len(a$) b$ = mid$(a$,a%,1) ' ................................................................. if b$ = chr$(34) g% = bin_and( g%+1 , 1) ' simulation de ODD() pour AutoIt (pas trouvé l'instruction) ' donc au départ g%=0 et +1 pour le premier guillemet trouvé, ' pour le 2ème, g% redevient 0
c$ = c$+"@" ' pour surmonter le fait que les guillemets sont supprimés ' dans une chaine. l'ajout permet d'éviter le mot comme boucle else if b$ = "'" and g% = 0 a% = len(a$) else if c$ = "REM" and g% = 0 then a% = len(a$) if instr(" :,/*-.<>=",b$) > 0 ' .................................................. if g% = 0 ' on regarde si début de boucle if instr(boucle_open$," "+c$+" ") > 0 if c$ = "CASE" or c$ = "ELSE" else item_add 8,c$ end_if
if flag%=0 ' pour commencer à 0 car 0*4 = 0 & +2 ' pour 1 marge de 2 caractères, ' position 0 est: procédure, return et ' end_sub, non traité ici. compt% = count(8)-1 if c$ <> "CASE" debut% = l%(compt%) :flag%=1 else debut% = case%:flag%=1 end_if space% = 4 :open%=0 if c$ = "SELECT" then case% = debut%+4 end_if c$="" end_if
' .............................................. ' on regarde si fin de boucle if instr(boucle_close$," "+c$+" ") > 0 ' là il faut retrouver le pendant if c$="NEXT" then open$="FOR" if c$="UNTIL" then open$ = "REPEAT" if c$ = "END_WHILE" then open$ = "WHILE" if c$ = "END_SELECT" then open$ = "SELECT" if c$ = "END_IF" then open$ = "IF" if c$ = "THEN" then open$ = "IF"
if count(8) > 0 for b%= count(8) to 1 step -1
if open$ = item_read$(8,b%) if flag% = 0 compt%=b%-1 :flag%=1 debut% = l%(compt%) space% = 0 :open% = 0 else space%=0 end_if if c$ <> "ELSE" item_delete 8,b% end_if exit_for end_if next b% end_if c$="" end_if ' ................................. end_if ' ......... c$ = "" else c$ = c$ + b$ end_if end_if ' ...............................................
end_if ' ----------------------------------------------------- next a%
end_if
end_sub
|
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour mon éditeur Dim 7 Juil 2013 - 11:02 | |
| C'est bien !
Cela ne correspond pas exactement à ma façon de structurer, mais c'est parfaitement clair et lisible. On voit immédiatement les anomalies de structure.
Bravo ! | |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Dim 7 Juil 2013 - 11:57 | |
| Merci. La différence par rapport au code final, est que ce qui n'est pas traité comme return, end_sub, sub et label, se retrouve à la position 0, et non 2 comme ici. C'était pas la finalité de la recherche, qui était celui de l'indentation dans les cas pas très correct. Dans mes propres essais, cela fonctionne. Dommage que personne est voulu chercher des cas semblent t-ils bizarre, comme j'ai pu en montrer quelque uns. Mais je pense qu'il ne doit pas y avoir de problème, vu que la position se fait par la recherche dans l'item de la condition d'ouverture.. Je suis donc partant pour établir le code AutoIt par rapport à celui-ci. |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Lun 15 Juil 2013 - 16:14 | |
| Bon voila. Je vais stopper l'évolution de cet éditeur. C'est opérationnel. Maintenant les lignes s'indentent en plus ou en moins à chaque saisie de ligne. J'ai ajouté un bouton pour indenter toutes les lignes en une fois. Mais celui-ci a le désagrément de retirer la coloration de tous le programme. Je le laisse, je n'ai pas réussi à éviter cela, et il est temps pour moi de faire autre chose, loin de ce programme. J'ai essayé d'inclure en même temps la colorisation au fur et à mesure de l'indentation des lignes, mais il y a des variables qui sont doublées, et franchement ce ne sera pas pour maintenant. J'ai déjà du reprendre toute une partie du programme en essayant d'adapter le programme Panoramic pour l'indentation des lignes, et ça ne s'adaptait pas. J'ai donc du tout reprendre, et le programme AutoIt maintenant à maigri de plus de 400 lignes, ce qui montre qu'il y a bien des différences.
Donc dès que je peux, je vais d'abord faire une vidéo pour expliquer le fonctionnement de ce programme, car la prise ne main n'est pas évidente au début, même si au final ça ne pose pas de problème. Donc ces jours-ci je vais enfin pouvoir mettre une première mouture de celui-ci, en ne pensant pas faire de gros changements par la suite. Je rappelle que ce programme je l'avais commencé pour mon propre besoin pour un autre langage, je l'ai essayé avec Panoramic car c'était l'idéal pour voir comment prendre les choses. Je me suis pris au jeu, et ma fois, vous verrez bien si il vous semble utile ou non.
Par contre j'ai trouvé un bug important avec l'instruction INSTR, c'est à dire StringInstr() pour AutoIt, où les mot qui ont au moins deux traits "_" cette instruction ne marche pas. Je pense à des mots comme 2D_PEN_COLOR, il y a des mots en Panoramic qui en ont trois. Je n'ai pas trouvé de solution actuellement, et il faut que je fasse le vide de ce programme, pour passer à autre chose de beaucoup plus urgent. Donc à bientôt! |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Pour mon éditeur Lun 15 Juil 2013 - 16:30 | |
| Cool, on va pouvoir tester ton bébé (Enfin si tu traînes trop, pour moi, ça attendra mon retour de vacances en Août et peut être que Klaus en fera une version DLL sans Auto-It d'ici là qui sait ) Donc attendons jusqu'à ton prochain post sur ce sujet avec la vidéo de démo. | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Pour mon éditeur Lun 15 Juil 2013 - 19:19 | |
| - Citation :
- Par contre j'ai trouvé un bug important avec l'instruction INSTR, ... , où les mot qui ont au moins deux traits "_" cette instruction ne marche pas. Je pense à des mots comme 2D_PEN_COLOR
As-tu décrit ce problème quelque part, pour que je puisse le corriger ? | |
| | | Invité Invité
| Sujet: Re: Pour mon éditeur Lun 15 Juil 2013 - 19:48 | |
| Bonjour Jack Je suis désolé, je me suis mal exprimé. C'est avec le langage Auto-It qu'il y a ce problème, et non avec Panoramic.
En regardant mon programme, car il y a déjà un moment que je l'ai commencé, j'ai vu que j'avais traité une liste spéciale, et je ne m'en souvenais plus, pour avoir une coloration qui sorte de la coloration des erreurs. |
| | | Contenu sponsorisé
| Sujet: Re: Pour mon éditeur | |
| |
| | | | Pour mon éditeur | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |