Bon j'ai fini par trouver une solution (cependant la liste correspondant aux Item n'est pas une liste d'association, ce qui m'embête quelque peu donc j'essaierai de trouver une solution...). Je n'ai pas vraiment testé si cela fonctionne de manière universelle et je suis persuadée que l'on peut simplifier l'écriture mais bon, ci-dessous mon code :
(defun dumpallproperties->list (name / *error* get-key&value filename lmf cme file c n k-p line lst sub tmp i dap)
(defun *error* (msg)
(if file
(setq file (close file))
)
(if lmf
(setvar "LOGFILEMODE" lmf)
(setvar "LOGFILEMODE" 0)
)
(if cme
(setvar "CMDECHO" cme)
(setvar "CMDECHO" 1)
)
(princ msg)
)
(defun get-key&value (l s p name a / key value)
(cons
(setq key (substr l s (- (vl-string-search p l) s)))
(if (not (or (vl-catch-all-error-p (setq value (vl-catch-all-apply 'getpropertyvalue (append (list name) a (list key)))))
(null value)
))
value
(if (or (not (wcmatch l "* = *"))
(= (setq value (substr l (+ 1 (strlen " = ") (vl-string-search " = " l))))
"Failed to get value"
)
)
""
value
)
)
)
)
(setq filename (getvar "LOGFILENAME")
lmf (getvar "LOGFILEMODE")
cme (getvar "CMDECHO")
)
(vl-file-delete filename)
(setvar "CMDECHO" 0)
(setvar "LOGFILEMODE" 1)
(dumpallproperties name)
(setvar "LOGFILEMODE" 0)
(setvar "CMDECHO" 1)
(setq filename (getvar "LOGFILENAME")
file (open filename "R")
c 1
n 5
k-p "(type:"
)
(while (setq line (read-line file))
(setq lst (cons line lst))
)
(close file)
(setq lst
(vl-remove-if '(lambda (l) (= l ""))
(reverse lst)
)
)
(while (and lst
(not (wcmatch (car lst) "*Begin dumping object*"))
)
(setq lst (cdr lst))
)
(setq lst (reverse (cdr lst)))
(while (and lst
(not (wcmatch (car lst) "End object dump"))
)
(setq lst (cdr lst))
)
(setq lst (reverse (cdr lst)))
(while (and lst (setq l (car lst)))
(setq dap
(cons
(cond
( (and (not (wcmatch l "* = *"))
(wcmatch (cadr lst) "Item #*:")
)
(cons
(setq sub nil l (substr l c (- (vl-string-search k-p l) c)))
(while (wcmatch (cadr lst) "Item #*:")
(setq sub
(append sub
(list
(setq tmp nil i (atoi (vl-string-trim (apply 'strcat (wildcard-trim "~#")) (car (setq lst (cdr lst))))))
(while (wcmatch (cadr lst) " ?*")
(setq tmp
(append tmp
(list (get-key&value (car (setq lst (cdr lst))) n k-p name (list l i)))
)
)
)
)
)
)
)
)
)
(T
(get-key&value l c k-p name nil)
)
)
dap
)
lst (cdr lst)
)
)
(reverse dap)
)
(defun wildcard-trim (w / i lst a)
(repeat (setq i 256)
(if (wcmatch (setq a (chr (setq i (1- i)))) w)
(setq lst (cons a lst))
)
)
lst
)
Si des âmes charitables souhaitent tester, je ne suis pas contre ! ♥w♥
Bisous,
Luna