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
» item_index(résolu)
Arborescence des dossiers Emptypar leclode Aujourd'hui à 15:51

» Gestion d'un système client-serveur.
Arborescence des dossiers Emptypar Klaus Hier à 17:01

» Bataille terrestre
Arborescence des dossiers Emptypar jjn4 Hier à 15:01

» SineCube
Arborescence des dossiers Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Arborescence des dossiers Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Arborescence des dossiers Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Arborescence des dossiers Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Arborescence des dossiers Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Arborescence des dossiers Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Arborescence des dossiers Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Arborescence des dossiers Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Arborescence des dossiers Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Arborescence des dossiers Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Arborescence des dossiers Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Arborescence des dossiers Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -45%
PC Portable LG Gram 17″ Intel Evo Core i7 32 Go ...
Voir le deal
1099.99 €

 

 Arborescence des dossiers

Aller en bas 
5 participants
AuteurMessage
Klaus

Klaus


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

Arborescence des dossiers Empty
MessageSujet: Arborescence des dossiers   Arborescence des dossiers EmptyMer 31 Oct 2012 - 10:33

Voici un nouvel essai de lister l'arborescence des dossiers, à partir du répertoire par défaut. Il y a un commentaire dans le programme pour marquer l'endroit où on peut forcer un autre dossier de départ.

Le programme charge une liste avec l'arborescence des dossiers. On peut ensuite parcourir cette liste pour traiter les fichiers de chaque dossier.

Le problème venait du fait que la vraie récursivité des procédures n'est pas acquise. J'ai donc pallié à ce problème avec des boucles WHILE imbriquées.

Code:
' analyser_sources.bas


labels()
variables()
form0()
GUI()
initialisations()

end

start:
  clear no_l1%
  s$ = dir_current$
  save$ = s$
'  dir_change ... : ' <======== forcer ici éventuellement un autre dossier de départ
  if s$="_" then return
  indent$ = "  "
  item_add no_l1%,indent$ + s$
  analyser_dossiers()
  traiter_fichiers()
  dir_change save$
  return

sub labels()
  label start
end_sub

sub variables()
  dim no%, i%, s$, indent$, save$
  dim no_l1%
end_sub

sub form0()
  full_space 0
  caption 0,"Analyser les fichier sources"
end_sub

sub GUI()
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Start" : on_click no%,start
   
  no% = no% + 1 : list no% : no_l1% = no%
    top no%,40 : left no%,10 : width no%,600 : height no%,600
end_sub

sub initialisations()
  indent$ = ""
end_sub

sub analyser_dossiers()
  dim_local n%, i%, p%, flag%
  indent$ = indent$ + "  "
  flag% = 1
  while flag%=1
    n% = 1
    flag% = 0
    while n%<=count(no_l1%)
      s$ = item_read$(no_l1%,n%)
      if left$(s$,2)="  "
        item_delete no_l1%,n%
        item_insert no_l1%,n%,"--"+mid$(s$,3,len(s$))
        p% = 0
        for i%=1 to len(s$)
          if mid$(s$,i%,1)<>" " then exit_for
          p% = i%
        next i%
        indent$ = string$(p%+2," ")
        s$ = trim$(s$)
        dir_change s$
        s$ = file_find_first$
        while s$<>"_"
          if dir_exists(s$)=1
            n% = n% + 1
'            item_insert no_l1%, n%, indent$ +s$ : ' <== sans le chemin complet
            item_insert no_l1%, n%, indent$ + dir_current$+"\"+s$ : ' avec le chemin complet
            flag% = 1
          end_if
          s$ = file_find_next$
        end_while
        file_find_close
      end_if
      n% = n% + 1
    end_while
  end_while
  item_add no_l1%,"*** terminé ***"
end_sub

sub traiter_fichiers()

end_sub

EDIT

J'ai inséré chaque fois le chemin complet, pour pouvoir traiter la liste plus facilement après.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyMer 31 Oct 2012 - 10:55

Et une application de ce principe pour trouver tous les fichiers BAS dans une arborescence. La procédure lister_fichiers accepte une extension en paramètre. Si cette extension est la chaîne vide "", elle liste tous les fichiers, mais sans les répertoires.
Code:
' analyser_sources.bas


labels()
variables()
form0()
GUI()
initialisations()

end

start:
  clear no_l1%
  clear no_l2%
  s$ = dir_current$
  save$ = s$
'  dir_change ... : ' <======== forcer ici éventuellement un autre dossier de départ
  if s$="_" then return
  indent$ = "  "
  item_add no_l1%,indent$ + s$
  analyser_dossiers()
  lister_fichiers(".bas")
  dir_change save$
  return

sub labels()
  label start
end_sub

sub variables()
  dim no%, i%, s$, indent$, save$
  dim no_l1%, no_l2%
end_sub

sub form0()
  caption 0,"Analyser les fichier sources"
end_sub

sub GUI()
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Start" : on_click no%,start

  no% = no% + 1 : memo no% : no_l1% = no%  :  bar_both no%
    top no%,40 : left no%,10 : width no%,200 : height no%,400
  no% = no% + 1 : memo no% : no_l2% = no%  :  bar_both no%
    top no%,40 : left no%,220 : width no%,200 : height no%,400

end_sub

sub initialisations()
  indent$ = ""
end_sub

sub analyser_dossiers()
  dim_local n%, i%, p%, flag%
  indent$ = indent$ + "  "
  flag% = 1
  while flag%=1
    n% = 1
    flag% = 0
    while n%<=count(no_l1%)
      s$ = item_read$(no_l1%,n%)
      if left$(s$,2)="  "
        item_delete no_l1%,n%
        item_insert no_l1%,n%,"--"+mid$(s$,3,len(s$))
        p% = 0
        for i%=1 to len(s$)
          if mid$(s$,i%,1)<>" " then exit_for
          p% = i%
        next i%
        indent$ = string$(p%+2," ")
        s$ = trim$(s$)
        dir_change s$
        s$ = file_find_first$
        while s$<>"_"
          if dir_exists(s$)=1
            n% = n% + 1
            item_insert no_l1%, n%, indent$ + dir_current$+"\"+s$
            flag% = 1
          end_if
          s$ = file_find_next$
        end_while
        file_find_close
      end_if
      n% = n% + 1
    end_while
  end_while
  item_add no_l1%,"*** terminé ***"
end_sub

sub lister_fichiers(ext$)
  dim_local n%, s$
  if count(no_l1%)=0 then return
  for n%=1 to count(no_l1%)
    s$ = item_read$(no_l1%,n%)
    s$ = trim$(mid$(s$,3,len(s$)))
    dir_change s$
    s$ = file_find_first$
    while s$<>"_"
      if dir_exists(s$)=0
        if ext$<>""
          if right$(s$,len(ext$))=ext$ then item_add no_l2%,dir_current$+"\"+s$
        else
          item_add no_l2%,dir_current$+"\"+s$
        end_if
      end_if
      s$ = file_find_next$
    end_while
    file_find_close
  next n%
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyMer 31 Oct 2012 - 16:30

Salut Klaus
Dans SUB lister_fichiers(ext$), ligne 93
Code:

if count(no_l1%)=0 then return
Tu veux sans doute dire
Code:

if count(no_l1%)=0 then EXIT_SUB

Le système n’a pas détecté l’erreur ‘RETURN without gosub’ parce que la condition count(no_l1%) = 0 n’est pas réalisée.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




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

Arborescence des dossiers Empty
MessageSujet: re   Arborescence des dossiers EmptyMer 31 Oct 2012 - 18:16

Je viens mettre mon grain de sel... Laughing

Depuis les "exit_Sub", le "Return" de la façon dont il est utilisé là par Klaus
devrait renvoyer un message d'erreur du type : "Return with out gosub".

Non ? Wink
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyMer 31 Oct 2012 - 19:37

Faut pas oublier que c'est une version temporaire et non pas officielle que vous utilisez...
Je pense qu'en ce moment Jack doit "blinder" la chose et prévoir tous les messages d'erreurs qui va avec... Wink
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Yannick




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

Arborescence des dossiers Empty
MessageSujet: re   Arborescence des dossiers EmptyMer 31 Oct 2012 - 20:13

Certes elle était mal formulé, mais c' était une question en l'air... Laughing
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyMer 31 Oct 2012 - 21:28

Salut tout le monde

Si le système ne détecte pas l’erreur ‘RETURN without GOSUB’ c’est parce que la condition n’est pas réalisée.
En effet, pour le système si la condition est fausse, il n’ira pas évaluer ce qui est après THEN abstraction faite que ce soit dans une procédure SUB ou dans n’importe quel endroit du programme.
Code:

dim i%
i% = 10
test()
end
sub test()
    print "i% = ";i%
    print "blablabla"
    if i% <> 10 then return
    print "i% n'est pas <> 10 donc j'y reste"
    print "i% = 10 donc erreur RETURN without GOSUB"
 '  if i% = 10 then  return
    if i% = 10 then exit_sub
    print "suite"
end_sub
Vous pouvez écrire n’importe quelle absurdité après THEN et le système ne bronche pas tant que la condition avant THEN reste fausse
Code:

 dim i%
i% = 5
if i% = 1 then then et encore then et tout ce que vous voulez terminate ou salut
print "je suis ici"

Est-ce qu'on apprécie ça ou non ? ça se discute!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


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

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyMer 31 Oct 2012 - 21:46

Merci Klaus, très bon exercice de manipulation de fichiers / répertoires et de boucles.
Tu pourrais en faire un tuto intéressant, je pense.
Revenir en haut Aller en bas
Klaus

Klaus


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

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyMer 31 Oct 2012 - 22:09

Suite à la correction du même problème dans un autre post, dans ma demande d'aide, je poste ici le code corrigé. 2videmment, le RETURN doit être remplacé par un EXIT_SUB. Voici le code corrigé:
Code:
' analyser_sources.bas


labels()
variables()
form0()
GUI()
initialisations()

end

start:
  clear no_l1%
  clear no_l2%
  s$ = dir_current$
  save$ = s$
'  dir_change ... : ' <======== forcer ici éventuellement un autre dossier de départ
  if s$="_" then return
  indent$ = "  "
  item_add no_l1%,indent$ + s$
  analyser_dossiers()
  lister_fichiers(".bas")
  dir_change save$
  return

sub labels()
  label start
end_sub

sub variables()
  dim no%, i%, s$, indent$, save$
  dim no_l1%, no_l2%
end_sub

sub form0()
  caption 0,"Analyser les fichier sources"
end_sub

sub GUI()
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Start" : on_click no%,start

  no% = no% + 1 : memo no% : no_l1% = no%  :  bar_both no%
    top no%,40 : left no%,10 : width no%,200 : height no%,400
  no% = no% + 1 : memo no% : no_l2% = no%  :  bar_both no%
    top no%,40 : left no%,220 : width no%,200 : height no%,400

end_sub

sub initialisations()
  indent$ = ""
end_sub

sub analyser_dossiers()
  dim_local n%, i%, p%, flag%
  indent$ = indent$ + "  "
  flag% = 1
  while flag%=1
    n% = 1
    flag% = 0
    while n%<=count(no_l1%)
      s$ = item_read$(no_l1%,n%)
      if left$(s$,2)="  "
        item_delete no_l1%,n%
        item_insert no_l1%,n%,"--"+mid$(s$,3,len(s$))
        p% = 0
        for i%=1 to len(s$)
          if mid$(s$,i%,1)<>" " then exit_for
          p% = i%
        next i%
        indent$ = string$(p%+2," ")
        s$ = trim$(s$)
        dir_change s$
        s$ = file_find_first$
        while s$<>"_"
          if dir_exists(s$)=1
            n% = n% + 1
            item_insert no_l1%, n%, indent$ + dir_current$+"\"+s$
            flag% = 1
          end_if
          s$ = file_find_next$
        end_while
        file_find_close
      end_if
      n% = n% + 1
    end_while
  end_while
  item_add no_l1%,"*** terminé ***"
end_sub

sub lister_fichiers(ext$)
  dim_local n%, s$
  if count(no_l1%)=0 then exit_sub
  for n%=1 to count(no_l1%)
    s$ = item_read$(no_l1%,n%)
    s$ = trim$(mid$(s$,3,len(s$)))
    dir_change s$
    s$ = file_find_first$
    while s$<>"_"
      if dir_exists(s$)=0
        if ext$<>""
          if right$(s$,len(ext$))=ext$ then item_add no_l2%,dir_current$+"\"+s$
        else
          item_add no_l2%,dir_current$+"\"+s$
        end_if
      end_if
      s$ = file_find_next$
    end_while
    file_find_close
  next n%
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyJeu 1 Nov 2012 - 1:17

Je viens de faire une analyse complète de ton programme, et j'ai rien à lui reprocher.
J'ai pas trouvé de problème de structure comme j'ai pu l'avoir avec Pagiciel. L'incrémentation et la décrémentation des sub et procédure sont bonnes.
C'est bien un problème de lecture de fichier qui se pose à un moment donné, et sans raison apparente.
C'est bien lié à Panoramic, car si je mets:
Code:
    execute "notepad "+f$
    file_open_read 1,f$
Le fichier est ouvert sans problème dans le bloc Note, mais il y a blocage avec :
Code:
    file_open_read 1,f$
Revenir en haut Aller en bas
Klaus

Klaus


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

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyJeu 1 Nov 2012 - 1:29

Merci de ton analyse. Il est rassurant de voir que tu valides mon code.

Dans ton exemple, à la limite, on pourrait supposer que Notepad "verrouille" le fichier, et que de ce fait, il devient inaccessible pour Panoramic.

Cela n'est pas le cas dans mon programme. Mes boucles de recherche parcourent l'arborescence des dossiers et placent une liste de noms de fichiers avec leur chemin d'accès, dans une liste. Aucun de ces fichiers n'a encore été ouvert. Et dès que j'essaie d'ouvrir le premier de ces fichiers (ou n'importe lequel d'entre eux, par exemple), il y a erreur.

Et c'est même pire. Après l'exécution du bouton 1, j'ai créé, avec Notepad, un fichier essai.txt placé dans un des répertoires. Et au début du traitement du bouton 2, je fais explicitement file_open_read 1,f$ avec f$ contenant le chemin complet et le nom essai.txt. Même erreur, alors que ce fichier n'a même pas été vu par la boucle de recherche, pour la bonne et simple raison qu'il n'existait pas. Et tout marche bien si j'arrête le programme après le bouton 1, puis je relance et je fais le bouton 2.

Les commandes FILE_FIND_xxx perturbent quelque part la gestion interne du répertoire courant, alors que DIR_CURRENT$ retourne la bonne valeur ! De toutes façons, la liste 2 que j'utilise, contient des chemins explicites complets, et un file_open_read avec un tel chemin d'accès DOIT réussir !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyJeu 1 Nov 2012 - 1:50

Note Pad n'a rien à voir. J'ai simplement testé ensuite en ouvrant Note Pad à l'endroit du blocage, mais évidemment le programme étant bloqué, je ne pouvais à ce moment mettre NotePad après.

Ce serait intéressant de voir si en faisant appel à un 2ème programme compilé, pourrait faire ce travail.
Ce programme fait l’arborescence, et l'appel d'un autre, ouvre le fichier et le traite.
Revenir en haut Aller en bas
Klaus

Klaus


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

Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyJeu 1 Nov 2012 - 11:22

J'ai fait l'essai, et c'est parfaitement concluant:
1. je génère l'exécutable analyser_sources.exe à partir de mon programme analyser_sources.bas
2. j'arrête l'éditeur
3. je lance analyser_sources.exe
4. je clique sur le premier bouton (celui de gauche) ==> la liste du milieu se remplit correctement avec mes noms de fichiers
5. je laisse ce programme ouvert et je lance un autre exemplaire de analyser_sources.exe
6. dans ce second exemplaire, je clique sur le bouton du milieu ==> le programme se déroule bien et je reçois dans la liste de droite la liste des définitions de procédures pour chaque fichier de la liste du milieu
7. je ferme ce second programme
8. je retourne dans le premier programme et clique sur le bouton du milieu ==> plantage: fichier non trouvé dès le premier fichier accédé.

J'en tire les conclusions suivantes:
1. mon code est fonctionnellement correct, puisqu'il s'exécute parfaitement en deux phases séparées
2. le problème n'est pas lié à l'éditeur Panoramic, mais bien au "run-time", donc au contexte d'exécution de l'interpréteur Panoramic
3. les fonctions FILE_FIND_xxx "cassent" quelque chose qui empêche l'interpréteur Panoramic de faire une quelconque ouverture de fichiers après cela

J'ai vraiment l'impression d'avoir mis le doigt sur un BUG.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers EmptyJeu 1 Nov 2012 - 12:43

Je me demande si finalement, cela n'est pas un problème de Windows.
Je parcours le programme plugiciel, que j'ai fait en commun avec AutoIt. Et j'ai eu ce genre de problème avec AutoIt.
Je m'en était sorti en limitant en parti le code AutoIt, et en le reprenant avec un programme Panoramic. AutoIt ne pouvait ouvrir un fichier pour je ne sais plus quel opération j'avais fait avant, et je crois que c'était un problème d'arborescence.
Revenir en haut Aller en bas
Contenu sponsorisé





Arborescence des dossiers Empty
MessageSujet: Re: Arborescence des dossiers   Arborescence des dossiers Empty

Revenir en haut Aller en bas
 
Arborescence des dossiers
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Exploration de dossiers
» Un sélecteur de dossiers 100 % Panoramic
» Liste des dossiers spéciaux de Windows
» Remplacer espace par tiret dans noms des dossiers / fichiers

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: