TPS001 Posté(e) le 17 mai 2014 Posté(e) le 17 mai 2014 j'ai trouvé un super lisp de traduction des mots français en anglais mais le problème qu'il ne fonction pas tjs traduire une seul mot parmis plusieurs mots que sélectionné sous autocad 2013 et ma deuxième problème c'est que j'ai des centaines des mots que je dois intégrés dans ce lisp ,est ce que quelqu'un à une méthodes très rapide pour que ce lisp doit être liées par ce fichier excel que j'ai déjà préparer pour la traduction des centaines des mots vers l'anglais j'explique quand ce sélectionne un plan sous autocad 2013 , il se reliée avec le fichier excel et traduire des phrases simlplement .voila ce super lisp : defun c:traduc (/ l1 l2 ss n txt)(setq l1 '("vanne" "filtre") ; liste à compléterl2 '("valve" "filter") ; liste à compléter dans le même ordre)(if (setq ss (ssget '((0 . "MTEXT"))))(repeat (setq n (sslength ss))(setq txt (entget (ssname ss (setq n (1- n)))))(if (setq pos (vl-position (cdr (assoc 1 txt)) l1))(entmod (subst (cons 1 (nth pos l2)) (assoc 1 txt) txt)))))(princ)) 0 +-
(gile) Posté(e) le 18 mai 2014 Posté(e) le 18 mai 2014 Salut, Plutôt que de lire les données dans un fichier Excel, je te propose d'utiliser plutôt un fichier .csv.Il est toujours plus simple et surtout beaucoup plus rapide de lire un fichier texte. Il te suffit donc d'enregistrer ton fichier Excel au format .csv pour utiliser la routine ci-dessous. Cette routine utilise le mécanisme de "precomputation" expliqué ici qui permet de spécifier et lire le fichier csv uniquement au premier appel de la commande TRADUC. (defun translationData () (eval (list 'defun 'translationData '() (if (setq filename (getfiled "Ficher CSV" "" "csv" 0)) (list 'quote ((lambda (/ sep file line ind lst) (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList") file (open filename "r") ) (while (setq line (read-line file)) (if (setq ind (vl-string-search sep line)) (setq lst (cons (cons (substr line 1 ind) (substr line (+ ind 2))) lst)) ) ) (close file) lst ) ) ) '() ) ) ) (translationData) ) (defun c:traduc (/ ss n elst txt tr) (if (translationData) (if (setq ss (ssget '((0 . "*TEXT")))) (repeat (setq n (sslength ss)) (setq elst (entget (ssname ss (setq n (1- n)))) txt (cdr (assoc 1 elst)) ) (if (setq tr (vl-member-if '(lambda (x) (= (car x) txt)) (translationData))) (entmod (subst (cons 1 (cdar tr)) (assoc 1 elst) elst)) ) ) (prompt "\nAucun texte multiligne sélectionné.") ) (prompt "\nAucun fichier de données spécifié.") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
TPS001 Posté(e) le 18 mai 2014 Auteur Posté(e) le 18 mai 2014 Merci infiniment mr gile pour la modification il est bien fonctionnel votre lisp ,est ce que vous pouvez ajouter aussi à coté les MTXT , les simple TXT aussi .
(gile) Posté(e) le 18 mai 2014 Posté(e) le 18 mai 2014 C'est fait dans le code ci-dessus. Il suffisait de remplacer "MTEXT" par "*TEXT". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
TPS001 Posté(e) le 20 mai 2014 Auteur Posté(e) le 20 mai 2014 Bonsoir Mr gile; j'ai appliqué le lisp sur des textes et il est fonctionnel parfaitement mais j'ai trouve des problème au niveau des phrases complexe par exemple quand je sélectionne la phrase : flexible calorifuge Ø160 il ne veut pas traduire la phrase ) il traduire simplement les mots comme flexible et calorifuge .est ce qu'il y a une solution a ce problème et excuse moi de te dérangé c'est très importante pour mon travail
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