Mai 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 |
|
| | Liste (et choix) des fichiers d'un répertoire | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Liste (et choix) des fichiers d'un répertoire Lun 13 Jan 2014 - 22:10 | |
| énième édition (mais ça sert toujours), assez semblable à ce qui a déjà été fait, et entièrement en Panoramic comme le voulait Minibug. En entrée, le répertoire et l'extension éventuelle souhaitée (ou * : tous les fichiers et sous-répertoires) Le résultat est dans le clipboard, sous forme d'une chaîne formatée, prête à être chargée dans un Memo (Clipboard_Paste), triée par ordre alphabétique, avec les sous-répertoires en tête (nom précédé de [D] ) - Code:
-
SUB Dirf(rep$,ext$) ' Liste des fichiers de rep$, d'extension ext$ (si ext$= "*", tous les fichiers) ' Résultat: chaîne dans le clipboard, fichiers triés, sous-répertoires en tête ' (NB: rep$ accepte les noms de répertoires contenant des espaces). DIM_LOCAL svr$, a$, f$, ndl%, i% ndl% = 5000: WHILE OBJECT_EXISTS(ndl%)=1: ndl%=ndl%+1000: END_WHILE DLIST ndl% svr$ = DIR_CURRENT$: DIR_CHANGE rep$ IF ext$<>"*" AND LEFT$(ext$,1)<>"." THEN ext$="."+ext$ ext$ = UPPER$(ext$) f$ = FILE_FIND_FIRST$ WHILE f$ <> "_" IF f$ <> "." AND f$ <> ".." IF ext$ = "*" OR UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ext$ IF FILE_EXISTS(f$) = 0 THEN f$ = " "+f$ ITEM_ADD ndl%,f$ END_IF END_IF f$ = FILE_FIND_NEXT$ END_WHILE FILE_FIND_CLOSE DIR_CHANGE svr$: ' restore le répertoire d'origine SORT ndl%: a$ = "" FOR i% = 1 TO COUNT(ndl%) f$ = ITEM_READ$(ndl%,i%): IF LEFT$(f$,1)=" " THEN f$="[D]"+MID$(f$,2,100) a$=a$+f$+CHR$(13)+CHR$(10) NEXT i% DELETE ndl% CLIPBOARD_STRING_COPY LEFT$(a$,LEN(a$)-2) END_SUB
Dernière édition par JL35 le Mar 14 Jan 2014 - 20:19, édité 1 fois (Raison : modifié un peu le titre (voir plus bas)) | |
| | | bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| | | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Mar 14 Jan 2014 - 18:27 | |
| Merci bignono ! J'ai modifié un peu la sub, pour envoyer le résultat directement dans un LIST (paramètre supplémentaire: le n° du List), et faciliter la sélection d'un ou plusieurs fichiers dans la liste, avec un sous-programme de sélection: il y a affichage d'une coche (en fait un X) pour chaque fichier sélectionné. On peut sélectionner une série de fichiers consécutifs d'un coup en maintenant la touche shift enfoncée: cliquer le 1er puis le dernier de la série. Pour désélectionner un fichier sélectionné: recliquer dessus. Après on exploite la liste en testant les éléments qui ont un X en tête. - Code:
-
' Choix d'un fichier ou d'une série de fichiers dans un répertoire LABEL Self DIM n%, i%, ix%, a$, b$, pre% DIM rep$ rep$ = "C:\UTIL": ' <===== par exemple
HEIGHT 0,900: BORDER_SMALL 0 MEMO 1: WIDTH 1,500: HIDE 1
n% = 10 LIST n%: TOP n%,20: LEFT n%,30: WIDTH n%,250: HEIGHT n%,840 FONT_NAME n%,"Courier New": ON_CLICK n%,Self: COLOR n%,255,255,200
Dirf(rep$,"*",n%) pre% = 0 END ' ========================================== Self: ' sélection d'un fichier ou d'une série de fichier avec cochage des fichiers cliqués ' Sélection d'une série: clic le 1er élément en maintenant la touche Shift, ' puis sans relâcher clic le dernier élément. ' Désélection d'un fichier sélectionné: clic sur son nom pour le décocher. ix% = ITEM_INDEX(n%) IF SCANCODE = 160: ' Touche Shift enfoncée IF pre% = 0 a$ = "X"+MID$(ITEM_READ$(n%,ix%),2,50) ITEM_DELETE n%,ix%: ITEM_INSERT n%,ix%,a$ pre% = ix%+1 ELSE FOR i% = pre% TO ix% a$ = "X"+MID$(ITEM_READ$(n%,i%),2,50) ITEM_DELETE n%,i%: ITEM_INSERT n%,i%,a$ NEXT i% pre% = 0 END_IF ELSE a$ = ITEM_READ$(n%,ix%) IF LEFT$(a$,1) = "X" b$ = " " ELSE b$ = "X" END_IF ITEM_DELETE n%,ix%: ITEM_INSERT n%,ix%,b$+MID$(a$,2,LEN(a$)-1) END_IF RETURN ' =========================================== SUB Dirf(rep$,ext$,nl%) ' Liste des fichiers de rep$, d'extension ext$ (si ext$= "*", tous les fichiers) ' Résultat: dans le LIST nl%, fichiers triés, sous-répertoires en tête ' Les noms de la liste sont précédés de deux espaces, pour cochage éventuel (X) ' (NB: rep$ accepte les noms de répertoires contenant des espaces). DIM_LOCAL svr$, a$, f$, i% CLEAR nl% svr$ = DIR_CURRENT$: DIR_CHANGE rep$ CAPTION 0, rep$ IF ext$<>"*" AND LEFT$(ext$,1)<>"." THEN ext$="."+ext$ ext$ = UPPER$(ext$) f$ = FILE_FIND_FIRST$ WHILE f$ <> "_" IF f$ <> "." AND f$ <> ".." IF ext$ = "*" OR UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ext$ IF FILE_EXISTS(f$) = 0 THEN f$ = " "+f$ ITEM_ADD nl%,f$ END_IF END_IF f$ = FILE_FIND_NEXT$ END_WHILE FILE_FIND_CLOSE DIR_CHANGE svr$: ' restaure le répertoire d'origine SORT nl%: a$ = "" FOR i% = 1 TO COUNT(nl%) f$ = ITEM_READ$(nl%,i%): IF LEFT$(f$,1)=" " THEN f$="[D]"+MID$(f$,2,100) ITEM_DELETE nl%,i%: ITEM_INSERT nl%,i%," "+f$ NEXT i% END_SUB | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Mar 14 Jan 2014 - 21:30 | |
| Bravo jl35 très bon outil | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Mar 14 Jan 2014 - 22:45 | |
| Merci Jicehel (et bonne année à toi). Là j'essaie de faire une sub qui intégrerait le tout: listage des fichiers, changement de répertoires et choix de fichiers, mais je me heurte à des problèmes de gestion des événements dans la sub, avec des access violation et des runtime error... alors je suis un peu sceptique pour l'aboutissement ! Mais bon, c'est un jeu, du moment qu'il y a d'autres solutions... | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Mer 15 Jan 2014 - 18:39 | |
| Merci pour cette belle sub JL, Donc en résumé si on va au plus court, on peut résumer comme cela : - Code:
-
DIM f$ , rep$ , ext$
rep$="D:\PROGRAMMATION BASIC\Prog. en cours\KALORIK\utilisateur" : ext$="cfg"
DIR_CHANGE rep$ IF ext$<>"*" AND LEFT$(ext$,1)<>"." THEN ext$="."+ext$ ext$ = UPPER$(ext$) f$ = FILE_FIND_FIRST$
WHILE f$ <> "_" IF f$ <> "." AND f$ <> ".." IF ext$ = "*" OR UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ext$ print f$ END_IF END_IF f$ = FILE_FIND_NEXT$ END_WHILE
FILE_FIND_CLOSE
Merci a tous, cela m'a permis d'avancer encore un peu plus en Panoramic ! | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Mer 15 Jan 2014 - 20:33 | |
| En expurgeant au maximum c'est ça, ça dépend de tes besoins et de l'application dans laquelle tu veux l'intégrer, par exemple il faut peut-être quand même tester si c'est bien un fichier (et non un sous-répertoire), et je trouve que sous forme de sub c'est plus souple à utiliser (et réutiliser au besoin), mais chacun peut adapter à sa guise, c'est très simple.
Et dans ton exemple, puisque ce n'est pas une sub, tu peux supprimer les lignes 6 et 7 en définissant ext$ = ".CFG" | |
| | | Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Mer 15 Jan 2014 - 21:34 | |
| Effectivement tu as raison... En fait lorsque j'ai lu le poste j'ai pensé a l'usage que j'allais avoir dans mon programme. Et du coup je n'ai pas pris le temps de chercher (c'est pas bien je sais...) Mais vous m'avez permis de trouver ce dont j'avais besoin alors encore merci a tous. Bonne soirée | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Mer 15 Jan 2014 - 22:48 | |
| Tu avais raison, si c'est à usage unique ce n'est pas la peine de prévoir tous les cas de figure possible puisque dans ce cas tu maîtrises tous les éléments, ce n'est pas comme pour une sub, plus universelle. Bonne soirée à toi également... et à tous les autres qui veillent encore... | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Dim 19 Jan 2014 - 17:09 | |
| Finalement j'ai fait une SUB complète qui contient tout: affichage des répertoires et sélection d'un ou de plusieurs fichiers. On peut sélectionner (ou désélectionner) un fichier avec le clic gauche souris, ou une série de fichiers avec la touche Maj enfoncée en même temps (les fichiers sélectionnés sont cochés). Si on change de répertoire ou de volume, les sélections précédentes éventuelles sont ignorées. En entrée de la Sub: répertoire de départ, extension des fichiers désirés (ou * ou rien: tous les fichiers). En sortie: dans le clipboard la liste des chemins complets des fichiers sélectionnés sous forme d'une chaîne Ascii avec séparateurs chr$(13)+chr$(10) (retour chariot/interligne). La sub est un peu longue (~160 lignes), mais elle intègre tout le nécessaire. Avec un petit exemple d'appel, en tête: - Code:
-
DIM rep$, ext$ HIDE 0 MEMO 10: TOP 10,20: WIDTH 10,500: HEIGHT 10,400
rep$ = "C:" ext$ = "": ' tous les fichiers et sous-répertoires Selfich(rep$,ext$)
CLIPBOARD_PASTE 10: ' liste des fichiers sélectionnés SHOW 0 END ' ////////////////////////////////////////////////////////////////////////////// SUB Selfich(rep$,ext$) ' Liste et/ou choix des fichiers de rep$, d'extension ext$ (si ext$= "*" ou "", tous les fichiers) ' Les fichiers sont affichés triés, sous-répertoires en tête ' Les noms de sous-répertoires sont précédés de '<D>', et les noms de fichiers ' sont précédés de deux espaces, pour cochage éventuel (X) ' (NB: rep$ accepte les noms de répertoires contenant des espaces). ' Choix d'un ou plusieurs fichiers: ' - un fichier: cliquer le nom du fichier: le nom sera coché dans la liste ' - une série: touche Maj enfoncée, cliquer le 1er fichier, puis cliquer le dernier ' Désélection d'un fichier: recliquer son nom. ' NB: si on change de répertoire, la sélection précédente éventuelle est ignorée. ' En sortie, la liste des fichiers sélectionnés (chemins complets) est rendue ' --------- dans le clipboard. DIM_LOCAL nf%, nm%, nl%, np%, nb%, a$, b$, f$, i%, ix%, j%, pre%, exf%, occ% nf% = 5000: WHILE OBJECT_EXISTS(nf%)=1: nf%=nf%+1000: END_WHILE nm%=nf%+1: WHILE OBJECT_EXISTS(nm%)=1: nm%=nm%+1: END_WHILE nl%=nm%+1: WHILE OBJECT_EXISTS(nl%)=1: nl%=nl%+1: END_WHILE np%=nl%+1: WHILE OBJECT_EXISTS(np%)=1: np%=np%+1: END_WHILE IF LABEL("Formexit")=0 THEN LABEL Formexit IF LABEL("Clikb")=0 THEN LABEL Clikb IF LABEL("Clikf")=0 THEN LABEL Clikf IF LABEL("Direp")=0 THEN LABEL Direp FORM nf%: WIDTH nf%,300: HEIGHT nf%,900: BORDER_SMALL nf%: ON_CLOSE nf%,Formexit MEMO nm%: PARENT nm%,nf%: WIDTH nm%,400: HIDE nm% LIST nl%: PARENT nl%,nf%: TOP nl%,20: HEIGHT nl%,HEIGHT(nf%)-54: WIDTH nl%,WIDTH(nf%)-16 FONT_NAME nl%,"Courier New" ON_CLICK nl%,Clikf: COLOR nl%,255,255,190 ' liste des lettres des volumes montés -> clipboard DIM_LOCAL fq$, q$: q$ = CHR$(34)+"X"+CHR$(34): fq$ = "C:\Temp\Tbat.bat" FILE_OPEN_WRITE 9,fq$ FILE_WRITELN 9,"@echo off" ' infos sur les volumes si argument quelconque, sinon seulement les lettres de volumes FILE_WRITELN 9,"set INFO=%1" FILE_WRITELN 9,"call :Drive C D E F G H I J K L M N O P Q R S T U V W X Y Z" FILE_WRITELN 9,"set INFO=" FILE_WRITELN 9,"goto :EOF" FILE_WRITELN 9,":Drive" FILE_WRITELN 9,"vol %1: > nul 2>nul" FILE_WRITELN 9,"If ERRORLEVEL 1 goto Next" FILE_WRITELN 9,"if not "+q$+"%INFO%=="+q$+" (vol %1:) else echo %1:" FILE_WRITELN 9,":Next" FILE_WRITELN 9,"shift" FILE_WRITELN 9,"if NOT "+q$+"%1=="+q$+" goto :Drive" FILE_CLOSE 9 EXECUTE_WAIT "CMD.exe /C "+fq$+" | clip" FILE_DELETE fq$ a$=CLIPBOARD_STRING_PASTE$: ' volumes montés BUTTON np%: PARENT np%,nf%: WIDTH np%,30: HEIGHT np%,20 FONT_NAME np%,"Wingdings": CAPTION np%,CHR$(231) ON_CLICK np%,Clikf: HIDE np% nb% = np%: ix% = 30 i% = INSTR(a$,CHR$(13)) WHILE i%>0 nb%=nb%+1: WHILE OBJECT_EXISTS(nb%)=1: nb%=nb%+1: END_WHILE BUTTON nb%: PARENT nb%,nf%: LEFT nb%,ix%: HEIGHT nb%,20: WIDTH nb%,25 CAPTION nb%,TRIM$(LEFT$(a$,i%-1))+"\": a$=MID$(a$,i%+1,50): ON_CLICK nb%,Clikb ix%=ix%+25: i%=INSTR(a$,CHR$(13)) END_WHILE IF RIGHT$(rep$,1)<> "\" THEN rep$=rep$+"\" IF ext$ = "" THEN ext$ = "*" ext$ = "*."+ext$ ' ============================================================================== Direp: occ% = 1 IF RIGHT$(rep$,1) <> "\" THEN rep$ = rep$ + "\" CAPTION nf%,rep$+ext$ HIDE np%: IF LEN(rep$)>3 THEN SHOW np% EXECUTE_WAIT "CMD.exe /C DIR "+CHR$(34)+rep$+"*.*"+CHR$(34)+" /O:GN /B | clip" CLEAR nm%: CLIPBOARD_PASTE nm% CLEAR nl% IF COUNT(nm%) > 0 FOR i% = 1 TO COUNT(nm%) a$ = ITEM_READ$(nm%,i%) IF FILE_EXISTS(rep$+a$) = 1 THEN EXIT_FOR ITEM_ADD nl%, "<D>"+a$: ' affichage systématique des sous-répertoires NEXT i% IF i% <= COUNT(nm%) b$ = UPPER$(MID$(ext$,2,10)) FOR j% = i% TO COUNT(nm%) a$ = ITEM_READ$(nm%,j%) IF b$ = ".*" ITEM_ADD nl%," "+a$: ' affichage de tous les fichiers ELSE IF UPPER$(RIGHT$(a$,LEN(b$))) = b$ ITEM_ADD nl%," "+a$: ' affichage des fichiers choisis END_IF END_IF NEXT j% END_IF END_IF occ% = 0 WHILE exf% = 0: END_WHILE ' Sortie a$ = "" IF COUNT(nl%) > 0 FOR i% = 1 TO COUNT(nl%) b$ = ITEM_READ$(nl%,i%) IF LEFT$(b$,1) = "X" a$=a$+rep$+MID$(b$,3,LEN(b$)-2)+CHR$(13)+CHR$(10) END_IF NEXT i% IF a$ <> "" THEN a$ = LEFT$(a$,LEN(a$)-2) END_IF ' liste des fichiers sélectionnés (chemins complets) dans le clipboard CLIPBOARD_STRING_COPY a$ DELETE nf% EXIT_SUB ' ============================================================================== Clikb: ' clic sur un volume IF occ% = 1 THEN RETURN i% = NUMBER_CLICK: rep$ = CAPTION$(i%) GOTO Direp ' ============================================================================== Clikf: ' clic sur un sous-répertoire ou un fichier IF occ% = 1 THEN RETURN IF NUMBER_CLICK = np% FOR i% = LEN(rep$)-1 TO 1 STEP -1: IF MID$(rep$,i%,1)="\" THEN EXIT_FOR NEXT i% rep$ = LEFT$(rep$,i%-1): GOTO Direp: ' répertoire parent END_IF ix% = ITEM_INDEX(nl%): IF ix%<1 THEN RETURN a$ = ITEM_READ$(nl%,ix%) IF LEFT$(a$,3)="<D>" IF RIGHT$(rep$,1)<>"\" THEN rep$ = rep$+"\" rep$ = rep$+MID$(a$,4,LEN(a$)-3): GOTO Direp END_IF IF SCANCODE = 160: ' Touche Shift enfoncée: série IF pre% = 0 a$ = "X"+MID$(ITEM_READ$(nl%,ix%),2,50): ' clic sur le 1er ITEM_DELETE nl%,ix%: ITEM_INSERT nl%,ix%,a$ IF ix% < COUNT(nl%) THEN pre% = ix%+1 ELSE IF ix%<pre% THEN RETURN FOR i% = pre% TO ix% a$ = "X"+MID$(ITEM_READ$(nl%,i%),2,50): ' clic sur le dernier ITEM_DELETE nl%,i%: ITEM_INSERT nl%,i%,a$ NEXT i% pre% = 0: ' réinit END_IF ELSE a$ = ITEM_READ$(nl%,ix%): ' un fichier IF LEFT$(a$,1) = "X" b$ = " ": ' désélection ELSE b$ = "X": ' sélection END_IF ITEM_DELETE nl%,ix%: ITEM_INSERT nl%,ix%,b$+MID$(a$,2,LEN(a$)-1) pre% = 0 END_IF SCANCODE = 0 RETURN ' ============================================================================== Formexit: exf% = 1 RETURN END_SUB ' ////////////////////////////////////////////////////////////////////////////// Un bémol toutefois: Parfois, en quittant le petit programme d'appel de la sub (par la croix en haut à droite), j'obtiens un 'Panoramic.exe a cessé de fonctionner'alors que le programme s'est bien exécuté et a fait son boulot. Je ne vois pas du tout pourquoi, sans doute une ressource non libérée, pourtant en quittant on devrait tout nettoyer automatiquement... Et dans ce cas, je m'aperçois en regardant les tâches actives (avec Tasklist.exe) qu'il reste un Panoramic.exe actif, que je dois tuer (taskkill.exe).
Dernière édition par JL35 le Dim 19 Jan 2014 - 20:03, édité 1 fois | |
| | | papydall
Nombre de messages : 7002 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Dim 19 Jan 2014 - 18:32 | |
| Salut JL35 Ta sub complète , je l’adopte ! Vous parlez de 'Panoramic.exe a cessé de fonctionner'. Sous XP je ne connait pas ce phénomène. Vive XP ! | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Dim 19 Jan 2014 - 18:46 | |
| Bonsoir Sous Win7, je ne connai s pas ce phénomène non plus. | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Dim 19 Jan 2014 - 19:57 | |
| Bonsoir à tous, Je suis également sous win 7, ça n'a rien de systématique et c'est même assez rare, mais ça m'arrive... et je n'arrive pas à faire le rapprochement avec ce que j'ai fait avant pour provoquer ça. Mais tant mieux si je suis le seul ! PS J'ai édité pour modifier légèrement le commentaire en tête de la sub, pour éviter les confusions. | |
| | | papydall
Nombre de messages : 7002 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Dim 19 Jan 2014 - 23:50 | |
| @Francis-mr | |
| | | Klaus
Nombre de messages : 12289 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire Lun 20 Jan 2014 - 0:00 | |
| Juste pour offrir une alternative, pour ceux qui utilisent déjà KGF.dll: connaissez-vous la fonction - Code:
-
res% = dll_call3("SelectFileToOpen",adr(racine$),adr(filtre$),handle(memo%)) qui permet de sélectionner un ou plusieurs fichiers, dans un sélecteur standard Windows tel qu'il apparaît lorsu'on fait Open ou Ovrir dans n'importe quel programme Windows . La liste des noms de fichiers sélectionnés est retournée dans un mémo (qui peut êtgre caché). | |
| | | Contenu sponsorisé
| Sujet: Re: Liste (et choix) des fichiers d'un répertoire | |
| |
| | | | Liste (et choix) des fichiers d'un répertoire | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |