Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Voilà, j'ai un soucis avec des LiSP et leurs commandes...

 

Je suis "presque" nouveau dans la boite (1 an et demi d'ancienneté) et je récupère du boulo qu'un autre avait automatisé. Seulement, celui qui a créé ces centaines de LiSP n'est plus là. Je cherche les fichiers LiSP (plus de 150) contenant des tonnes de commandes chacuns...

 

Existe-il un Lisp (ou un autre moyen) de lister les commandes et de lister les LiSP qui les contient ?

 

En gros, j'ai des centaines de commandes et je ne sais absolument pas dans quel LiSP elles se trouvent...

 

Je pense qu'il doit il y avoir un moyen de faire un tableau Excel avec VBA, mais avant de me lancer là dedans, je me renseigne si quelqu'un a déjà fait quelque chose...

 

Merci d'avance,

 

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)

Posté(e)

Bonjour Patrick_35,

 

Je pensais plus à des commandes "Defun", avec une liste claire des commandes "Defun" et une correspondance avec son fichier LiSP... Mais c'est une bonne idée.

 

Merci à toi,

 

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)

Posté(e)

Salut,

 

Merci de me répondre Steven, mais le LiSP de Patrick_35 donne la liste des LiSP chargés au démarage d'AutoCAD, il me faudrait aussi les commandes qui y sont incluses.

 

Je songeais à un LiSP qui donnerais un truc dans ce style :

Fichier LiSP : crnMapTrans.lip contient les commandes :
CrnMap
CrnTrans
Fichier LiSP : crnControleSemafor773.lsp contient les commandes :
CrnCtrlSemA
Crn....
....

 

Mais je pense que je vais m'orienté vers un .XLSM.

 

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)

Posté(e)

Salut,

 

Tu peux essayer ListLispCmds qui retourne le chemin du fichier .csv spécifié dans lequel sont listées toutes les commandes LISP (defun c:...) chargées dans le dessin avec le fichier dans lequel elles sont définies.

 

(vl-load-com)

;; gc:str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaîne
;; sep : le séparateur
(defun gc:str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
  (gc:str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
)

;; gc:GetSupportFileSearchPaths
;; Retourne la liste des chemins de recherche des fichiers de support
(defun gc:GetSupportFileSearchPaths ()
 (gc:str2lst
   (vla-get-SupportPath
     (vla-get-Files
(vla-get-Preferences
  (vlax-get-acad-object)
)
     )
   )
   ";"
 )
)

;; gc:GetSupportLispFiles
;; Retourne la liste de tous les fichiers LISP dans les chemins de support
(defun gc:GetSupportLispFiles ()
 (apply
   'append
   (mapcar
     (function
(lambda	(d)
  (mapcar
    (function (lambda (f) (strcat d "\\" f)))
    (vl-directory-files d "*.lsp" 1)
  )
)
     )
     (gc:GetSupportFileSearchPaths)
   )
 )
)

;; gc:GetLoadedLispCmd
;; Retourne la liste des noms de commandes définies en LISP chargées dans le dessin
(defun gc:GetLoadedLispCmd ()
 (vl-remove-if-not
   (function (lambda (s) (= (substr s 1 2) "C:")))
   (atoms-family 1)
 )
)

;; ListLispCmds
;; Liste les commandes LISP chargées
(defun ListLispCmds (/ loaded result file line csv sel)
 (setq loaded (gc:GetLoadedLispCmd))
 (foreach f (gc:GetSupportLispFiles)
   (setq file (open f "r"))
   (while (setq line (read-line file))
     (foreach cmd (vl-remove-if-not
	     (function (lambda (s) (member (strcase s) loaded)))
	     (gc:str2lst line " ")
	   )
(or
  (member (cons (strcase cmd) f) result)
  (setq result (cons (cons (strcase cmd) f) result))
)
     )
   )
   (close file)
 )
 (if (setq csv (getfiled "Fichier de sortie" "" "csv" 1))
   (progn
     (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")
    file (open csv "w"))
     (foreach cmd result
(write-line (strcat (car cmd) sep (cdr cmd)) file)
     )
     (close file)
   )
 )
 csv
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour à tous...

 

Merci (gile) mais entre midi et deux, j'ai bidouillé un truc en VBA. Il liste tous les LiSp d'un répertoire et il cherche à l'intérieur de chacun d'entre eux les commandes LiSP (les "defun c:"). Je sais que ça ne fait pas exactement ce que j'espérais, mais je ne sais pas le faire...

 

Voici le Code VBA pour ceux que ça peut intéressé :

Sub ListeCommandeLsp()
   Dim Fichiers As String, Commande As String, StrFichier As String
   Dim LTableau As Integer, NbCommand As Integer
   Dim objShell As Object, objFolder As Object, oFolderItem As Object
   Dim Chemin As String, Tableau() As String
   Set objShell = CreateObject("Shell.Application")
   Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
   Set FSO = CreateObject("Scripting.FileSystemObject")

   On Error Resume Next
   Set oFolderItem = objFolder.Items.Item
   Chemin = oFolderItem.Path
   Fichiers = Dir(Chemin & "\*.lsp")

   Do While Len(Fichiers) > 0
       LTableau = LTableau + 1
       ReDim Preserve Tableau(1 To LTableau)
       Tableau(LTableau) = Fichiers
       Fichiers = Dir()
   Loop
   For i = 0 To UBound(Tableau)
       X = i
       For K = X + 1 To UBound(Tableau)
           If Tableau(K) <= Tableau(X) Then X = K
       Next K
       If i <> X Then
           ValTemp = Tableau(X): Tableau(X) = Tableau(i): Tableau(i) = ValTemp
       End If
   Next i
   StrFichier = Chemin & "\_ListeCommandeLiSP.txt"
   FSO.DeleteFile StrFichier, True
   Open StrFichier For Output As #2
   For a = 1 To UBound(Tableau)
       Open Chemin & "\" & Tableau(a) For Input As #1
       Print #2, Tableau(a)
       Do While Not EOF(1)
           Line Input #1, chaine$
           chaine$ = Trim(chaine$)
           If InStr(UCase(chaine$), "(DEFUN C:") <> 0 And Left(chaine$, 1) <> ";" Then
             Commande = Right(chaine$, Len(chaine$) - 9): NbCommand = NbCommand + 1
             If Left(Commande, 1) <> "-" And Left(Commande, 1) <> "+" Then Print #2, "           " & Commande
           End If
       Loop
       Print #2, "--------"
       Close #1
   Next
   Close
   MsgBox " Il y a " & NbCommand & " dans " & a & " fichiers LiSP..."
   Shell "NOTEPAD.EXE """ & StrFichier & """", vbNormalFocus
End Sub

 

Mais j'enregistre tout de même ton LiSP (gile), histoire de regarder comment ça fonctionne...

 

Pour la petite histoire, mon prédécesseur avait 263 commandes dans 144 fichiers LiSP... J'ai bien fais de faire une macro, j'ai retrouvé mes petits... Enfin, plutôt les siens...

 

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)

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité