tiboulen Posté(e) le 26 juillet 2007 Posté(e) le 26 juillet 2007 bonjourj'ai une liste de correspondance de numero ou de reperage : pa exemple"100-002" "201-102""300-002" "301-102""400-002" "401-102"etc... cette liste est sous format txt disons liste.txt , mais ce pourrais etre excelLe but est de remplacer dans mon dessin automatiquement le texte egal au premier terme de la liste par le secon terme ex le texte 100-002 par 201-002 etc....Quelqu'un pourrait me mettre sur la piste, je ne connais pas trop les procedures de lecturede fichiers : open etc... et read-line et c'est assez urgentmerci beaucoup
dfbiagio Posté(e) le 26 juillet 2007 Posté(e) le 26 juillet 2007 Je me jette à l'eau et je vais essayer de t'aider. (open fichier mode) - fichier = nom du ficher (le nom peut avoir le chemin d'accè)- Mode = "r" pour read lecture "w" pour write écriture "a" pour append ajouter (close descripteur) ex: (setq Fichier (open "Test.txt" "w")) (close Fichier) Pour lire(read-char [descripteur]) descripteur = ex: (setq Fichier (open "test.txt" "r")) (read-char Fichier) (read-line [descripteur]) pour écrire(write-line chaîne [descripteur]) slt
Didier-AD Posté(e) le 26 juillet 2007 Posté(e) le 26 juillet 2007 Bonjouressaie çà, çà devrait marcher avec ce que tu demandes (defun c:modifietextes (/ nf fich sligne lligne js n ent) (setq nf (getfiled "Fichier de conversion" "" "TXT" 0) fich (open nf "r") ) (while (setq sligne (read-line fich)) (setq lligne (read (strcat "(" sligne ")")) js (ssget "X" (list (cons 0 "*TEXT") (cons 1 (car lligne)))) n 0 ) (repeat (if js (sslength js) 0) (setq ent (entget (ssname js n)) ent (subst (cons 1 (cadr lligne)) (assoc 1 ent) ent) n (1+ n) ) (entmod ent) ) ) (close fich) )
tiboulen Posté(e) le 27 juillet 2007 Auteur Posté(e) le 27 juillet 2007 merci pour cette reponse mais(cons 1 (car lligne)) donne (1 . 100-002) alorsqu'il faudrait (1 . "100-002") pour fonctionner non ?merci
Didier-AD Posté(e) le 27 juillet 2007 Posté(e) le 27 juillet 2007 Tu penses bien que j'ai essayé et çà marchej'ai cependant utilisé un fichier dans lequel il y a déjà les guillemets comme dans la question de départsi les guillemets ne sont pas présents dans le fichier, 100-002 est alors reconnu comme un symbole ; il faut alors utiliser une fonction vl dont j'ai oublié le nom pour transformer ce nom de symbole en chaine
Didier-AD Posté(e) le 27 juillet 2007 Posté(e) le 27 juillet 2007 J'ai retrouvé la fonction c'est vl-symbol-name si les lignes de ton fichier sont de la forme100-201 201-302 alors tu peux utiliser ce code modifié (defun c:modifietextes (/ nf fich sligne lligne js n ent) (setq nf (getfiled "Fichier de conversion" "" "TXT" 0) fich (open nf "r") ) (while (setq sligne (read-line fich)) (setq lligne (read (strcat "(" sligne ")"))) (if (= 'SYM (type (car lligne))) (setq lligne (mapcar 'vl-symbol-name lligne)) ) (setq js (ssget "X" (list (cons 0 "*TEXT") (cons 1 (car lligne)))) n 0 ) (repeat (if js (sslength js) 0) (setq ent (entget (ssname js n)) ent (subst (cons 1 (cadr lligne)) (assoc 1 ent) ent) n (1+ n) ) (entmod ent) ) ) (close fich) ) si par hasard, il existe des lignes où le tiret (-) n'existe pas alors, (setq lligne (read (strcat "(" sligne ")")))va trouver des nombres et non plus des symboles et il faudra alors traiter différemment en cas de besoin, fais signe
(gile) Posté(e) le 28 juillet 2007 Posté(e) le 28 juillet 2007 Salut, Attention, la fonction vl-symbol-name ne fonctionne pas avec les nombres ni avec toute autre donnée n'étant pas du type 'SYMBOL.(vl-symbol-name 12) -> ; erreur: type d'argument incorrect: symbolp 12 La fonction vl-princ-to-list fonctionnera avec tout type de donnée.(vl-princ-to-string 12) -> "12" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Didier-AD Posté(e) le 28 juillet 2007 Posté(e) le 28 juillet 2007 bonjourBen voilà qui simplifie le toutmerci Gile
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