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
» demande explication KGF pour imprimer en mm
Problème de répertoire après FILE_FIND_xxx Emptypar JL35 Hier à 17:28

» Petit passage furtif
Problème de répertoire après FILE_FIND_xxx Emptypar Froggy One Mer 27 Mar 2024 - 14:26

» SPIN et aide langage (résolu)
Problème de répertoire après FILE_FIND_xxx Emptypar leclode Sam 23 Mar 2024 - 15:20

» Aide-mémoire des mots-clés Panoramic
Problème de répertoire après FILE_FIND_xxx Emptypar papydall Mer 20 Mar 2024 - 21:23

» Je ne comprend pas pourquoi la largeur de la scene 3d change
Problème de répertoire après FILE_FIND_xxx Emptypar Marc Mar 12 Mar 2024 - 20:06

» Comment télécharger panoramic?
Problème de répertoire après FILE_FIND_xxx Emptypar lepetitmarocain Sam 9 Mar 2024 - 13:31

» @lepetitmarocain <==> KGFGrid
Problème de répertoire après FILE_FIND_xxx Emptypar Klaus Dim 3 Mar 2024 - 9:59

» Tangram-Toukaré
Problème de répertoire après FILE_FIND_xxx Emptypar jjn4 Mer 28 Fév 2024 - 18:12

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Problème de répertoire après FILE_FIND_xxx Emptypar jjn4 Mer 28 Fév 2024 - 18:09

» KGF_dll - nouvelles versions
Problème de répertoire après FILE_FIND_xxx Emptypar Klaus Mer 28 Fév 2024 - 17:01

» Mes souhaits d'amélioration de Panoramic.
Problème de répertoire après FILE_FIND_xxx Emptypar Pedro Lun 26 Fév 2024 - 18:12

» Testez-votre-QI
Problème de répertoire après FILE_FIND_xxx Emptypar jjn4 Dim 25 Fév 2024 - 17:12

» Utilisation d'Élip
Problème de répertoire après FILE_FIND_xxx Emptypar jjn4 Sam 24 Fév 2024 - 18:33

» Récapitulatif ludothèque panoramic jjn4
Problème de répertoire après FILE_FIND_xxx Emptypar jjn4 Sam 24 Fév 2024 - 18:11

» Générateur de mots de passe
Problème de répertoire après FILE_FIND_xxx Emptypar mindstorm Mar 20 Fév 2024 - 20:09

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mars 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier
-50%
Le deal à ne pas rater :
-50% sur les sacs à dos pour ordinateur portable Urban Factory ...
19.99 € 39.99 €
Voir le deal

 

 Problème de répertoire après FILE_FIND_xxx

Aller en bas 
+3
pan59
Nardo26
Klaus
7 participants
AuteurMessage
Klaus

Klaus


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 12:10

Dans mon programme d'analyse de sources, j'utilise FILE_FIND_FIRST$ ... FILE_FIND_NEXT$ ... FILE_FIND_CLOSE pour déterminer des listes de fichiers. Tout marche bien - je peux parcourir des arborescences de répertoire et placer dans une liste les noms et chemins d'accès des fichiers qui m'intéressent. Je restitue également le dossier par défaut, après cette boucle de recherche.

Seulement, après, je ne peux plus faire une ouverture de fichier, dans aucun répertoire d'ailleurs, ni en lecture (fichier non créé) ni en écriture (le nouveau fichier est bien créé au bon endroit avec longueur zéro, mais ensuite, il y a I/O-error).

Mais si je sauvegarde la liste dans un fichier texte, et je relance mon programme pour recharger la liste à partir du fichier, tout marche bien, toutes les ouvertures se font sans problème, preuve que les chemins d'accès et les noms de fichiers dans la liste sont corrects.

Je montre le programme ici. Il a 3 boutons: le premier analyse l'arborescence des dossiers et cherche les fichiers *.bas dans l'arborescence sous le dossier courant. Le deuxième prend la liste des fichiers et cherche les procédures définies dans chaque fichier source. Et le troisième exécute ces deux fonctions l'une après l'autre.

Or, si l'on utilise le troisième, la recherche se fait bien, mais ensuite, il y a le plantage. Mais si j'utilise le premier, puis je sors du programme, je le relance et j'utilise le deuxième, tout marche bien et j'ai le résultat recherché.

Pourquoi faut-il sortir du programme ? Qu'est-ce que j'ai omis dans la gestion des FILE_FIND_... ? J'ai bien mis partout des FILE_FIND_CLOSE pour terminer la séquence de recherche pour chaque dossier. Quelqu'un aurait une idée ?

Code:
' analyser_sources.bas

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

end

start1:
  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$
  file_save no_l2%,"liste_sources.txt"
  return
 
start2:
  clear no_l3%
  save$ = dir_current$
  file_load no_l2%,"liste_sources.txt"
  traiter_fichiers()
  dir_change save$
  return
 
start3:
' --- code de start1 ----------------------
  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$
  file_save no_l2%,"liste_sources.txt"
' --- code de start2 ----------------------
  clear no_l3%
  save$ = dir_current$
  file_load no_l2%,"liste_sources.txt"
  traiter_fichiers()
  dir_change save$
  return
 
sub labels()
  label start1, start2, start3
end_sub

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

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

sub GUI()
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Chercher" : on_click no%,start1
  no% = no% + 1 : button no% : top no%,10 : left no%,160
    caption no%,"Analyser" : on_click no%,start2
  no% = no% + 1 : button no% : top no%,10 : left no%,310 : width no%,200
    caption no%,"Chercher et Analyser" : on_click no%,start3

  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
  no% = no% + 1 : memo no% : no_l3% = no%  :  bar_both no%
    top no%,40 : left no%,430 : 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

sub traiter_fichiers()
  dim_local n%, f$, s$, d$
  if count(no_l2%)=0 then return
  for n%=1 to count(no_l2%)
    f$ = item_read$(no_l2%,n%)
    item_add no_l3%,f$
    file_open_read 1,f$
    while file_eof(1)=0
      file_readln 1,s$
      if lower$(left$(trim$(s$),4))="sub " then item_add no_l3%,s$
    end_while
    file_close 1
    item_add no_l3%,""
  next n%
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 12:51

Bonjour Klaus,
C'est clair qu'il y a un problème... Wink
voir DIR_REMOVE

et FILE_FIND_NEXT

et il n'y a pas de solution, je crois que c'est un bug...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 13:07

Ca commence à faire beaucoup ! Avec le plantage quasiment systématique d'un programme Panoramic au premier lancement, la commande DLL_ON se plantant systématiquement au premier lancement, etc ...

Il y a avec certitude un problème de gestion de répertoire "par défaut", "courant", "actif", ... quelque soit sa désignation, et cela concerne des situations très diverses. Il faudrait vraiment que Jack trouve un jour le temps de se pencher sur ce problème !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 14:26

@Klaus
Es-tu sûre d'avoir le droit de faire cela?
Code:
sub traiter_fichiers()
  dim_local n%, f$, s$, d$
  if count(no_l2%)=0 then return

Ce n'est pas une procédure, et return n'a pas sa place normalement.
Revenir en haut Aller en bas
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Problème de répertoire.   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 15:17

Bonjour.

Sans compter la lenteur exaspérante de Panoramic.

Imaginez: le même programme exécuté en 29 sec en java, et 48 min en Panoramic !!

Plus un nouveau problème que je viens de découvrir: l'ensemble des fichiers '.txt' n'est pas chargé lors de la création d'une application, allez savoir pourquoi !!



Dernière édition par pan59 le Mer 31 Oct 2012 - 16:30, édité 1 fois
Revenir en haut Aller en bas
Invité
Invité




Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 15:52

Citation :
Sans compter la lenteur exaspérante de Panoramic.
Panoramic n'est pas si lent que cela. Pour l'instant Panoramic est interprété, et tant que ce sera ainsi, il aura une certaine lenteur. Même si il est 'compilé' il fonctionne de la même façon. Il est évident que si on considère un basic interprété, contre un autre compilé, on pourra le considéré plus lent.

A mes début j'ai fait un premier outils de débogage. et j'avais un programme de 'tableur' (vite dit) sur un picture, et ce programme m'était plus de 20 minutes à me faire une feuille. Et avec ce débogueur, j'avais mis un compteur d'instruction au fur et à mesure du suivi de code, et je ne sais plus mais je crois qu'il avait compter plus de 100000 instructions lues pour afficher la page. Le programme repris, j'étais tombé à 30 secondes (il ne devait n' avoir que 1100 instruction de lues pour faire une chose similaire). Donc, il est très important de bien regarder comment on conçoit son programme, de cela dépend la vitesse d'exécution. Il faut profiter d'un langage simple pour essayer de revoir la conception d'un programme. Si c'est lent, c'est que quelque chose a été mal vu.

Je vais dire: Vive Panoramix!!! Very Happy même si tu ne le penses pas.
Revenir en haut Aller en bas
papydall

papydall


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 16:12

Salut Klaus
Dans SUB traiter_fichiers() , ligne 153
Code:

if count(no_l2%)=0 then return
tu veux sans doute dire
Code:

if count(no_l2%) = 0 then exit_sub

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

papydall


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 16:55

Salut Pan59

C’est vrai, PANORAMIC est un peu lent, surtout lorsqu’il y a beaucoup de calcul à faire.
Ce n’est pas spécialement PANORAMIC, mais tous les langages interprétés sont lents.
On peut gagner un peu de rapidité en optimisant son programme.
Jack a dit que PANORAMIC sera compilé. Attendons donc !
Et n’oublions pas que PANORAMIC a beaucoup d’atouts en sa faveur, ne serait-ce que sa simplicité et sa facilité d’utilisation.
PANORAMIC est en constante évolution et s’il a quelques défauts, ce sont des défauts de jeunesse !
Il grandira et il s’améliorera
!!! VIVE PANORAMIC !!!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Problème de répertoire.   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 17:46

Bonjour.

OK, merci.

J'espère que la future version compilée apportera une plus grande rapidité aux programmes.

Car pour l'instant, la durée d'exécution est rédhibitoire.

Donc, patience.
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 17:46

cosmos70 a écrit:
Citation :
Sans compter la lenteur exaspérante de Panoramic.
Panoramic n'est pas si lent que cela. Pour l'instant Panoramic est interprété, et tant que ce sera ainsi, il aura une certaine lenteur. Même si il est 'compilé' il fonctionne de la même façon. Il est évident que si on considère un basic interprété, contre un autre compilé, on pourra le considéré plus lent.

A mes début j'ai fait un premier outils de débogage. et j'avais un programme de 'tableur' (vite dit) sur un picture, et ce programme m'était plus de 20 minutes à me faire une feuille. Et avec ce débogueur, j'avais mis un compteur d'instruction au fur et à mesure du suivi de code, et je ne sais plus mais je crois qu'il avait compter plus de 100000 instructions lues pour afficher la page. Le programme repris, j'étais tombé à 30 secondes (il ne devait n' avoir que 1100 instruction de lues pour faire une chose similaire). Donc, il est très important de bien regarder comment on conçoit son programme, de cela dépend la vitesse d'exécution. Il faut profiter d'un langage simple pour essayer de revoir la conception d'un programme. Si c'est lent, c'est que quelque chose a été mal vu.

Je vais dire: Vive Panoramix!!! Very Happy même si tu ne le penses pas.

Je pense la même chose que cosmos : la façon dont on organise le code y fait pour beaucoup...

Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyMer 31 Oct 2012 - 22:04

Vous avez bien sûr raison: les deux occurrences de RETURN dans les lignes 130 et 152 doivent évidemment être des EXIT_SUB. Voici le code modifié:
Code:
' analyser_sources.bas

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

end

start1:
  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$
  file_save no_l2%,"liste_sources.txt"
  return
 
start2:
  clear no_l3%
  save$ = dir_current$
  file_load no_l2%,"liste_sources.txt"
  traiter_fichiers()
  dir_change save$
  return
 
start3:
' --- code de start1 ----------------------
  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$
  file_save no_l2%,"liste_sources.txt"
' --- code de start2 ----------------------
  clear no_l3%
  save$ = dir_current$
  file_load no_l2%,"liste_sources.txt"
  traiter_fichiers()
  dir_change save$
  return
 
sub labels()
  label start1, start2, start3
end_sub

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

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

sub GUI()
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Chercher" : on_click no%,start1
  no% = no% + 1 : button no% : top no%,10 : left no%,160
    caption no%,"Analyser" : on_click no%,start2
  no% = no% + 1 : button no% : top no%,10 : left no%,310 : width no%,200
    caption no%,"Chercher et Analyser" : on_click no%,start3

  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
  no% = no% + 1 : memo no% : no_l3% = no%  :  bar_both no%
    top no%,40 : left no%,430 : 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

sub traiter_fichiers()
  dim_local n%, f$, s$, d$
  if count(no_l2%)=0 then exit_sub
  for n%=1 to count(no_l2%)
    f$ = item_read$(no_l2%,n%)
    item_add no_l3%,f$
    file_open_read 1,f$
    while file_eof(1)=0
      file_readln 1,s$
      if lower$(left$(trim$(s$),4))="sub " then item_add no_l3%,s$
    end_while
    file_close 1
    item_add no_l3%,""
  next n%
end_sub

Malheureusement, cela ne change rien au problème !

Avec le troisième bouton, on a l'erreur "File does not exist (156)" lors de la première ouverture de fichier. Or, avec le bouton 1, puis arrêt, relancer puis bouton 2, tout passe très bien ! Le problème de fond est toujours là ! Je n'y comprends rien.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyVen 2 Nov 2012 - 20:04

Bonsoir Klaus, Smile
Je viens d'examiner ton programme. J'ai forcé un de mes dossiers, et j'ai courcicuité ta sub analyser_dossiers() en mettant une apostrophe devant les lignes. Et là, miracle! ton programme fonctionne à merveille. Peut-être que l'on ne peut utiliser file_find_first$ et file_find_next$ qu'une seule fois avec un fichier txt? Je trouve ça quand-même curieux ce comportement! D'autant plus que dans un autre programme, je m'en sers plusieurs fois pour ouvrir des fichiers images avec 3d_load_texture.
Code:
' analyser_sources.bas

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

end

start1:
  clear no_l1%
  clear no_l2%
  dir_change "C:\mesprog\astuces et codes\utilitaires"
  s$ = dir_current$
  save$ = s$
  if s$="_" then return
  indent$ = "  "
  item_add no_l1%,indent$ + s$
'  analyser_dossiers()
  lister_fichiers(".bas")
  dir_change save$
  file_save no_l2%,"liste_sources.txt"
  return

start2:
  clear no_l3%
  save$ = dir_current$
  file_load no_l2%,"liste_sources.txt"
  traiter_fichiers()
  dir_change save$
  return

start3:
' --- code de start1 ----------------------
  clear no_l1%
  clear no_l2%
  dir_change "C:\mesprog\astuces et codes\utilitaires"
  s$ = dir_current$
  save$ = s$
  if s$="_" then return
  indent$ = "  "
  item_add no_l1%,indent$ + s$
'  analyser_dossiers()
  lister_fichiers(".bas")
  dir_change save$
  file_save no_l2%,"liste_sources.txt"
' --- code de start2 ----------------------
  clear no_l3%
  save$ = dir_current$
  file_load no_l2%,"liste_sources.txt"
  traiter_fichiers()
  dir_change save$
  return

sub labels()
  label start1, start2, start3
end_sub

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

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

sub GUI()
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Chercher" : on_click no%,start1
  no% = no% + 1 : button no% : top no%,10 : left no%,160
    caption no%,"Analyser" : on_click no%,start2
  no% = no% + 1 : button no% : top no%,10 : left no%,310 : width no%,200
    caption no%,"Chercher et Analyser" : on_click no%,start3

  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
  no% = no% + 1 : memo no% : no_l3% = no%  :  bar_both no%
    top no%,40 : left no%,430 : 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

sub traiter_fichiers()
  dim_local n%, f$, s$, d$
  if count(no_l2%)=0 then exit_sub
  for n%=1 to count(no_l2%)
    f$ = item_read$(no_l2%,n%)
    item_add no_l3%,f$
    file_open_read 1,f$
    while file_eof(1)=0
      file_readln 1,s$
      if lower$(left$(trim$(s$),4))="sub " then item_add no_l3%,s$
    end_while
    file_close 1
    item_add no_l3%,""
  next n%
end_sub
A+ Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyVen 2 Nov 2012 - 20:55

Bizarre. Je prends le code que tu postes, et j'ai le même problème, chez moi:

1er essai:
- cliquer directement de bouton de droite plante ==> file not found

2ème essai:
- cliquer le bouton de gauche -> résultat correct dans la liste du milieu
- cliquer le bouton du milieu -> plantage ==> file not found

3ème essai:
- cliquer le bouton de gauche -> résultat correct dans la liste du milieu
- sortir du programme
- relancer le programme
- cliquer sur le bouton du milieu ==> résultat correct et concluant !

Donc, tien de changé. On ne peut PAS ouvrir un fichier dont le nom est dans la liste, après les boucles FILE_FIND_xxx !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyVen 2 Nov 2012 - 21:16

Avec ton code, j'avais l'erreur (93) File does not exist (not created). Line 156, ce qui s'arrêtait sur la ligne : file_open_read 1,f$; lorsque je cliquais sur le 3ème bouton.
Moi je suis sous windows 7, et je crois que tu as XP.
Mais je répète, j'ai même supprimé la sub analyser_dossiers() et ça fonctionne du tonnerre. Tu devrais essayer de remplir le fichier texte avec les noms complets des fichiers en une seul fois avec file_find_first$, next$ et close, et ensuite te servir de file_extract_disk$(), extension$(), name$() et path$().
Problème de répertoire après FILE_FIND_xxx Captur12
A+ Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyVen 2 Nov 2012 - 22:15

Tu as supprimé l'appel à analyser_dossiers() du traitement du bouton de droite. Donc, ce qui subsiste, c'est uniquement ce que fait le bouton du milieu, en rechargeant un fichier texte qui contient la liste du milieu qui a été sauvegardée.

En fait, mon traitement, c'est celui effectué par le bouton de droite. C'est seulement pour les besoins de la démonstration que je l'ai scindé en deux parties, avec une sauvegarde dans un fichier entre les deux, pour pouvoir arrêter le programme et le relancer. Normalement, il ne devrait pas y avoir de fichier intermédiaire. L'idée, c'était de parcourir une arborescence, de dossiers mémorisées dans la liste de gauche, repérer les fichiers choisis et mémoriser leurs noms dans la liste du milieu, puis traiter chaque fichier de cette liste avec les résultats déposés dans la liste de droite.

Et j'ai mis des listes pour qu'on voie ce qui se passe. Normalement, ce sont des DLIST.

Donc, malheureusement, ton test ne fait que confirmer ce que je dis: les ouvertures de fichier ne marchent pas s'il y a la boucle de FILE_FIND_xxx auparavent. La preuve: supprime le fichier liste_sources.txt, puis clique directement sur le bouton de droite. Forcément, le mémo du milieu est vide et le traitement ne parche pas.

Je persiste dans mon constat:
1. les boucles de FILE_FIND_xxx marchent bien
2. les ouvertures/lectures/fermetures de fichiers texte marchent bien
3. enchaîner phase (1) puis phase (2) provoque un plantage
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyVen 2 Nov 2012 - 23:30

J'ai trouvé !

Et c'est MA faute !


En effet, je remplis la liste de gauche avec l'arborescence des dossiers, et je termine avec un enregistrement "*** terminé ***". Et je ne teste pas si je tombe sur cet enregistrement, je fais un dir_change là-dessus. Pas de message d'erreur. Je rétablis bien le répertoire initial après, par un dir_change save$, et si j'affiche dir_current$, cette variable a bien la bonne valeur. Pourtant, les ouvertures ne marchent plus.

Donc, comme souvent, le bug était de mon côté de l'écran, pas de l'autre ! Avec toutes mes excuses pour la fausse alerte.

Mais voici le programme complet (et correct): le "traitement", c'est d'isoler toutes les définitions de procédures, mais on pourrait imaginer n'importe quoi comme traitement.
Code:
' analyser_sources.bas

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

end

start3:
' --- code de start1 ----------------------
  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$
' --- code de start2 ----------------------
  clear no_l3%
  save$ = dir_current$
  traiter_fichiers()
  dir_change save$
  return
 
sub labels()
  label start3
end_sub

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

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

sub GUI()
  no% = no% + 1 : button no% : top no%,10 : left no%,310 : width no%,200
    caption no%,"Chercher et Analyser" : on_click no%,start3

  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
  no% = no% + 1 : memo no% : no_l3% = no%  :  bar_both no%
    top no%,40 : left no%,430 : 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%)
    if left$(s$,3)<>"***"
      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
    end_if
  next n%
end_sub

sub traiter_fichiers()
  dim_local n%, f$, s$, d$
  if count(no_l2%)=0 then exit_sub
  for n%=1 to count(no_l2%)
    f$ = item_read$(no_l2%,n%)
    item_add no_l3%,f$
    file_open_read 1,f$
    while file_eof(1)=0
      file_readln 1,s$
      if lower$(left$(trim$(s$),4))="sub " then item_add no_l3%,s$
    end_while
    file_close 1
    item_add no_l3%,""
  next n%
end_sub

Et j'ai trouvé d'où vient réellement le problème: c'est DIR_CHANGE qui sème la pagaille, pas les FILE_FIND_xxx. Je poste dans la section des "bugs".
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyVen 2 Nov 2012 - 23:59

La persévérance paye toujours !
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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptySam 3 Nov 2012 - 0:03

Je pense que tes tests vont bien aider Jack. Bravo pour ta détermination et exemples précis.
Bon, ben Jack, bon courage ...
Revenir en haut Aller en bas
Jack
Admin
Jack


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

Problème de répertoire après FILE_FIND_xxx Empty
MessageSujet: Re: Problème de répertoire après FILE_FIND_xxx   Problème de répertoire après FILE_FIND_xxx EmptyDim 8 Sep 2013 - 17:11

Le problème avec FILE_FIND_FIRST$ est résolu dans PANORAMIC V 0.9.25i4
Revenir en haut Aller en bas
https://panoramic.1fr1.net
 
Problème de répertoire après FILE_FIND_xxx
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» D'après vous, où est le problème ?
» Répertoire
» Répertoire et non-répertoire
» Répertoire des téléchargements
» Répertoire de musique

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: