DenisHen Posté(e) le 7 août 2020 Posté(e) le 7 août 2020 Bonjour à toutes et à tous. Aujourd'hui, je me lance avec un mapcar pour traiter tout les éléments d'une liste. Cette liste contient des nom de fichier, évidement, ces éléments ont leur nom complet, avec l’extension. J'aimerais supprimer cette extension. Pour ce faire, j'ai écris ça, qui ne fonctionne pas.(setq ListBlk (mapcar (substr ListFich 1 (- (strlen ListFich) 4)) ListFich)) C'est la deuxième fois que j'essai d'utiliser mapcar, mais cette fonction reste très complexe pour moi. Si quelqu'un a une astuce, un conseil, je suis preneur... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 7 août 2020 Auteur Posté(e) le 7 août 2020 En fait, il faut introduire un (lambda dans la formule... Ce qui donne :(setq ListBlk (mapcar '(lambda (ListFich) (substr ListFich 1 (- (strlen ListFich) 4))) ListFich)) Bonne journée à tous... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Luna Posté(e) le 7 août 2020 Posté(e) le 7 août 2020 Salut, La fonction (lambda) est équivalent à la fonction (defun), la seule différence entre ces deux fonctions, c'est le fait que defun permet de nommer la définition de fonction (ce que (lambda) ne fait pas donc à usage unique).La fonction (mapcar) permet d'appliquer une fonction pour chaque élément d'une liste donnée. De manière générale, on utilise très souvent la fonction (lambda) car on souhaite effectuer des choses parfois complexes avec (mapcar). Mais il est également possible que la fonction utilisée soit une fonction ne possédant qu'un unique argument. Ex : (mapcar 'car '((0 . "LWPOLYLINE")(8 . "Calque1"))) renvoie (0 8). Donc pour les fonctions ne possèdant qu'un seul argument, on peut les utiliser directement, sinon on passe toujours par (lambda) pour les fonctions nécessitant plusieurs arguments (ou plusieurs fonctions d'affilés). Ici, ta liste se nomme ListFich donc pour éviter toute confusion, je te conseille de prendre un nom d'argument différent pour ta fonction (lambda). Cela t'évitera des problèmes à l'avenir :3Ensuite, n'existe-t-il pas des extensions possédant plus de 3 caractères ? (je pense à ".xlsm" par exemple)Auquel cas, il serait préférable de récupérer la position du dernier "." de la chaîne de caractères (les fichiers peuvent comporter des "." dans leur nom). Bisous,Luna
DenisHen Posté(e) le 7 août 2020 Auteur Posté(e) le 7 août 2020 Bonjour Luna. Merci pour ces précisions, elles me servirons certainement... ;) Amicalement. Denis. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 7 août 2020 Posté(e) le 7 août 2020 Bonjour, Pour bien débuter avec mapcar je t’invite à lire ou à relire ce post :https://cadxp.com/topic/28642-arguments-et-variables/page__view__findpost__p__156098Tu y trouveras une excellente et intelligible explication de (gile). Au sujet des extensions de nom de fichier, historiquement dans les premières versions de Windows elles étaient limité à 3 caractères car elles reprenaient le standard utilisé sous IBM CMS qui limitait les noms de fichiers à 8 caractères et 3 caractères pour l’extension (on parlait de "système 8+3").Depuis les choses ont bien évoluer, suffit de penser aux fichiers .jpeg .docx .html .xlsx etc.… La suggestion de ne pas te limité à 3 caractères formulé par Luna est selon moi une bien meilleure approche. Cdt Bruno Apprendre => Prendre => Rendre
(gile) Posté(e) le 7 août 2020 Posté(e) le 7 août 2020 Salut,Pour supprimer l'extension d'un nom de fichier, voir la fonction vl-filename-base.(mapcar 'vl-filename-base ListFich) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 7 août 2020 Posté(e) le 7 août 2020 Bonjour (gile)Hé oui vl-filename-base ;) , comme quoi le LISP contrairement au vélo quant on pratique plus on oublie (même les fonctions les plus élémentaire...)Parfois c'est dur de s'apercevoir que l'on est passé à coté d'une évidence Salutations Bruno Apprendre => Prendre => Rendre
DenisHen Posté(e) le 7 août 2020 Auteur Posté(e) le 7 août 2020 Bonjour à tous, et merci pour votre aide. Ma liste de fichiers, je l'ai construite ainsi : (setq Prefix "Arr") .... .... (setq RepBLK "E:\\DenCad\\Bloc\\Blocs_Charte\\") (setq ListFich (vl-directory-files RepBLK (strcat Prefix "*.dwg"))) Il y avait donc toutes les extensions. Et merci encore. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant