J’ai besoin d’une routine AutoLISP pour extraire la partie numérique d’un nom de fichier DWG, quelle que soit sa position ou sa longueur. Par exemple, si le nom est ‹ fichier_SO15874663-chantier.dwg ›, je souhaite obtenir ‹ 15874663 ›.
Pour extraire la première séquence de chiffres d’une chaîne de caractères, comme un nom de fichier DWG, vous pouvez utiliser une routine AutoLISP. Voici une version impérative proposée par Gilles Chanteau, qui identifie et retourne le premier nombre entier positif trouvé.
- Copiez et enregistrez le code LISP suivant dans un fichier texte avec l’extension
.lsp(ex:extraire_nombre.lsp). Assurez-vous d’inclure la fonction utilitairedigit-string-pcar elle est nécessaire au fonctionnement de la routine principale.(defun extraire-nombre-imperatif (s / res c) (setq res "") (while (and s (not (digit-string-p (setq c (substr s 1 1))))) (setq s (cdr (vl-list->string (cdr (vl-string->list s)))))) (while (and s (digit-string-p (setq c (substr s 1 1)))) (setq res (strcat res c)) (setq s (cdr (vl-list->string (cdr (vl-string->list s)))))) (if (eq "" res) nil (read res))) (defun digit-string-p (s) (and (= 1 (strlen s)) (member (ascii s) '(48 49 50 51 52 53 54 55 56 57)))) - Chargez la routine dans AutoCAD :
- Tapez APPLOAD dans la ligne de commande et appuyez sur Entrée.
- Dans la boîte de dialogue « Charger/Décharger des applications », cliquez sur « Contenu… » sous « Groupe de démarrage ».
- Ajoutez votre fichier
.lsppour qu’il se charge automatiquement à chaque démarrage d’AutoCAD, ou chargez-le manuellement pour la session en cours.
- Utilisez la fonction :
- Pour extraire le nombre du nom du fichier courant, utilisez la variable système DWGNAME comme argument de la fonction.
- En ligne de commande, tapez :
(extraire-nombre-imperatif (getvar "DWGNAME")) - Pour stocker le résultat dans une variable LISP pour un traitement ultérieur :
(setq monNumero (extraire-nombre-imperatif (getvar "DWGNAME")))
- Vérifiez le résultat : La fonction retournera le premier nombre entier positif trouvé dans la chaîne. Si aucun nombre n’est détecté, elle renverra
nil.