Mars 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Calendrier |
|
| | Problème de répertoire après FILE_FIND_xxx | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Problème de répertoire après FILE_FIND_xxx Mer 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
| |
| | | Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 31 Oct 2012 - 12:51 | |
| Bonjour Klaus, C'est clair qu'il y a un problème... voir DIR_REMOVEet FILE_FIND_NEXTet il n'y a pas de solution, je crois que c'est un bug... | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 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 ! | |
| | | Invité Invité
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 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. |
| | | pan59
Nombre de messages : 367 Age : 66 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème de répertoire. Mer 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 | |
| | | Invité Invité
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 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!!! même si tu ne le penses pas. |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 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 | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 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 !!! | |
| | | pan59
Nombre de messages : 367 Age : 66 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Problème de répertoire. Mer 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. | |
| | | Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 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!!! 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... | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Mer 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. | |
| | | bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Ven 2 Nov 2012 - 20:04 | |
| Bonsoir Klaus, 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+ | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Ven 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 !
| |
| | | bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Ven 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$(). A+ | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Ven 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
| |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Ven 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". | |
| | | papydall
Nombre de messages : 6985 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Ven 2 Nov 2012 - 23:59 | |
| La persévérance paye toujours ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Sam 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 ... | |
| | | Jack Admin
Nombre de messages : 2381 Date d'inscription : 28/05/2007
| Sujet: Re: Problème de répertoire après FILE_FIND_xxx Dim 8 Sep 2013 - 17:11 | |
| Le problème avec FILE_FIND_FIRST$ est résolu dans PANORAMIC V 0.9.25i4 | |
| | | | Problème de répertoire après FILE_FIND_xxx | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |