FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Klaus Aujourd'hui à 19:48

» KGF_dll - nouvelles versions
par pascal10000 Aujourd'hui à 17:27

» Mah-Jong européen new-look
par Minibug Hier à 22:31

» track_bar circulaire
par Klaus Hier à 13:54

» API Windows
par Klaus Hier à 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

» Ecouter la radio fm sur votre pc
par pascal10000 Sam 9 Déc 2017 - 3:42

» anomalie
par Klaus Sam 9 Déc 2017 - 3:21

» hommage
par Jicehel Ven 8 Déc 2017 - 11:29

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 8 Déc 2017 - 10:43

» carte son
par Klaus Ven 8 Déc 2017 - 2:37

» mise a jour calculatrice
par joeeee2017 Mer 6 Déc 2017 - 22:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Arborescence des dossiers

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

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

MessageSujet: Arborescence des dossiers   Mer 31 Oct 2012 - 12: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Arborescence des dossiers   Mer 31 Oct 2012 - 12: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: Arborescence des dossiers   Mer 31 Oct 2012 - 18: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
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 31 Oct 2012 - 20: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
Voir le profil de l'utilisateur
Nardo26

avatar

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

MessageSujet: Re: Arborescence des dossiers   Mer 31 Oct 2012 - 21: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
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 31 Oct 2012 - 22:13

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

avatar

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

MessageSujet: Re: Arborescence des dossiers   Mer 31 Oct 2012 - 23: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
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Arborescence des dossiers   Mer 31 Oct 2012 - 23: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
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Arborescence des dossiers   Jeu 1 Nov 2012 - 0: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Arborescence des dossiers   Jeu 1 Nov 2012 - 3: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

avatar

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

MessageSujet: Re: Arborescence des dossiers   Jeu 1 Nov 2012 - 3: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Arborescence des dossiers   Jeu 1 Nov 2012 - 3: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

avatar

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

MessageSujet: Re: Arborescence des dossiers   Jeu 1 Nov 2012 - 13: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Arborescence des dossiers   Jeu 1 Nov 2012 - 14: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é




MessageSujet: Re: Arborescence des dossiers   

Revenir en haut Aller en bas
 
Arborescence des dossiers
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] OE6 : Compression des dossiers
» [Résolu] classement des fichiers et dossiers
» [Résolu] WLM : utilisation des Dossiers stockés sur l'Ordinateur ?
» disparition de dossiers
» [Resolu] thunderbird recherche de dossiers

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: