FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Pour mon éditeur - Page 2 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Pour mon éditeur - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Pour mon éditeur - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Pour mon éditeur - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Pour mon éditeur - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Pour mon éditeur - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Pour mon éditeur - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Pour mon éditeur - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Pour mon éditeur - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Pour mon éditeur - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Pour mon éditeur - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Pour mon éditeur - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Pour mon éditeur - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Pour mon éditeur - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Pour mon éditeur - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
LEGO Icons 10331 – Le martin-pêcheur
35 €
Voir le deal

 

 Pour mon éditeur

Aller en bas 
+3
papydall
Jean Claude
Yannick
7 participants
Aller à la page : Précédent  1, 2
AuteurMessage
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyMer 3 Juil 2013 - 23:46

amusant. lol! Pour mon éditeur - Page 2 Diabol10  Pour mon éditeur - Page 2 Cool_s12
Revenir en haut Aller en bas
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyVen 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 a

cela 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 a



C'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
Pour mon éditeur - Page 2 Bonnen10
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyVen 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.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyVen 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyVen 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.

Revenir en haut Aller en bas
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyVen 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.
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Pour mon éditeur - Page 2 Empty
MessageSujet: re   Pour mon éditeur - Page 2 EmptyVen 5 Juil 2013 - 13:28

Pour le reste, je suis un peu dépassé...pale  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.
Revenir en haut Aller en bas
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyVen 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.
Revenir en haut Aller en bas
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyVen 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é:

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
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptySam 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


Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptySam 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
Revenir en haut Aller en bas
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptySam 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.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyDim 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%+Cool
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%+Cool
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%+Cool)
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"

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyDim 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
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyDim 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 !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyDim 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.
Revenir en haut Aller en bas
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyLun 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!
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyLun 15 Juil 2013 - 16:30

Cool, on va pouvoir tester ton bébé Wink (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 Wink ) Donc attendons jusqu'à ton prochain post sur ce sujet avec la vidéo de démo.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyLun 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 ?
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Invité
Invité




Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 EmptyLun 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.
Revenir en haut Aller en bas
Contenu sponsorisé





Pour mon éditeur - Page 2 Empty
MessageSujet: Re: Pour mon éditeur   Pour mon éditeur - Page 2 Empty

Revenir en haut Aller en bas
 
Pour mon éditeur
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» Un éditeur pour FBPano
» Supplique pour l'Éditeur Panoramic
» Script pour editeur PSPad
» Astuce pour préserver son éditeur
» EPP_V02 éditeur pour Panoramic

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Présentation et bavardage-
Sauter vers: