sepacap Posté(e) le 2 février 2021 Posté(e) le 2 février 2021 bonjour je pense que la réponse à ma question est non mais, vu les pointures sur le forum je me dis que peut-être !Ma question est la suivante : j'ai créé une table de données d'objets et utilisée sur une cinquantaine d'objet, mais je viens de me rendre compte qu'il y a une erreur dans les noms de deux champs. Il est impossible de modifier les noms des champs après avoir déjà utilisé la table, avez vous une astuce ?Merci par avance
lecrabe Posté(e) le 2 février 2021 Posté(e) le 2 février 2021 Hello YES impossible de renommer un champ OD alors que l on peut renommer une table OD MAIS il y a un contournement possible ... 1) MAEXPORT (en SQLite par exemple ou en SHP mais limitation a 10 cars pour les Tables et Champs OD) de tous les objets ayant la table OD "MYODTABLE"2) Suppression des objets3) Suppression de la table OD "MYODTABLE" avec la commande ADEDEFDATA4) MAPIMPORT et lors de la creation de la table OD "MYODTABLE" on peut aller sur chaque OD et donner un NOUVEAU Nom en entree ! Conseil pour les ODs : toujours se limiter a 10 cars pour Tables et ChampsET n utiliser que des lettres , chiffres , "-" , "_"ET une Lettre en 1er caractere Au fait connais tu l'outil ODEDIT de Alexander Sharov ??Pour AutoCAD MAP & CIVIL 2017-2020https://apps.autodesk.com/CIV3D/en/Detail/Index?id=6058493316603791142 LA SANTE, Bye, lecrabe Autodesk Expert Elite Team
bonuscad Posté(e) le 2 février 2021 Posté(e) le 2 février 2021 Bonjour, Je pense que tu pourrais facilement réaliser cela, je t'invite à lire ce sujet. Une fois le CSV créé tu l'ouvres avec Excel (enregistrer après modifications au format original csv) ou un simple éditeur de texte (notepad ou autre) et tu modifies simplement l'entête de la colonne et tu réimportes le fichier CSV. La modification sera effectuée. Le programme prend en charge plusieurs tables si l'on veut et respecte les n-records (plusieurs enregistrements empilés) On peut même créer une nouvelle colonne qui serait le résultat d'une formule avec d'autres champs. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
GEGEMATIC Posté(e) le 3 février 2021 Posté(e) le 3 février 2021 Salut,YES impossible de renommer un champ OD alors que l on peut renommer une table ODon ne peut pas par l'interface Autocad map, mais on peut par le lisp: ;******************************************************************* ;;§/ade/modifie une table à partir de :/tblname tbldesc l-fields ;; tablename tabledesc '(liste des champs) ;; compatible avec les fichier ini de definition de table de nadiaa ;; liste des champs compatible avec la liste retournée par AM_GetTableFormat (defun NA_modifytab (tblname tbldesc l-fields ) (setq buff (list tblname tbldesc l-fields)) (setq l-fields (mapcar '(lambda (x) (list (cons "colname" (car x)) (cons "coldesc" (cadr x)) (cons "coltype" (caddr x)) (cons "defaultval" (cadddr x)) ) ) l-fields ) ) (ade_odmodifytab (list (cons "tablename" tblname) (cons "tabledesc" tbldesc) (list "columns" l-fields ) ) ) ) le kit "xml" ici:lire-et-ecrire-des-variables-dans-des-fichiers-msexcel-xml d'autres solutions pour les tables ici: http://g-eaux.over-blog.com/article-incompatibilite-des-tables-de-donnees-da-113227413.html Les fonctions map de Rakesh:rakeshraodesignsense les fonctions de table (nécessitent powerclic ) ;;******************************************************************************* ;;§/ade/ecrit, dans un fichier Ms Excel XML toutes les tables d'un dessin/none ;;peut être utilisé par : miseajour_tables_depuis_xml (defun c:Ecrit_table_dans_xml (/ nchem fich elast sel lsel curproj) ;;; (setq dwgprefix (car (pw_scie_fich (getvar "dwgname")))) (setq dwgname (cadr (pw_scie_fich (getvar "dwgname")))) (setq dwgprefix (getvar "dwgprefix")) ;;creation de la liste tables (setq ltable (ade_odtablelist)) (setq ltabledesc (mapcar '(lambda (x) (setq tmp (ade_odtabledefn x)) (setq desc (cdr (assoc "TableDesc" tmp))) (list x desc) ) ltable ) ) (setq ltabledesc (cons '(";;nom de la table" "description") ltabledesc)) (setq ltabledesc (cons "[TABLES]" ltabledesc)) (setq ltabledef (mapcar '(lambda (x) (append (list (strcat "[" x "]" )) '(( ";;nom de champ" "description" "type" "valeur par defaut")) (AM_GetTableFormat x) '("") ) ) ltable ) ) (setq TABLES-DEFINITION (append (list (list ";;" "Export XML de définition de tables (C)G-EAUX 2013")) (list (list ";; Fichier" dwgprefix dwgname )) (list (list ";; date" (PW_CDATE))) (list (list ";; Par" (getenv "username"))) '("") ltabledesc '("") ;; ltabledef (pw_flatten_list ltabledef) ) ) ;;ecriture fichier XML (setq sheet-nms "urn:schemas-microsoft-com:office:spreadsheet") ;;préparation GPX et trk (carnet de randonnées) (setq pw-xmldoc (vlax-create-object "MSXML2.DOMDocument")) (vlax-put-property pw-xmldoc 'async :vlax-False) ;;dom1.async = :vlax-False ;; dom1.resolveExternals = False (vlax-put-property pw-xmldoc 'resolveExternals :vlax-False) ;;ValidateOnParse (vlax-put-property pw-xmldoc 'ValidateOnParse :vlax-False) ;;UseInlineSchema ;;(vlax-put-property pw-xmldoc 'UseInlineSchema :vlax-False) (setq fich (getfiled "Fichier MsXml à écrire : " (strcat dwgprefix dwgname "_tables") "xml" 1 ) ) (pw_ecritNewXml "TABLES-DEFINITION" ) (vlax-invoke-method pw-xmldoc 'save fich) (vlax-release-object pw-xmldoc) (setq pw-xmldoc nil) (startapp "explorer" fich) (princ) ) ;;*************************************************************************** ;§/ade/Creer des tables contenues dans un fichier tables.xml/none ;;le fichier xml peut être écrit par ECRIT_TABLE_DANS_XML (defun c:Creer_tables_depuis_xml (/ tblname tbldesc l-fields) ;;chargement des description de table (prompt "\nChargez la définition de tables:") (c:chargexml) (foreach l TABLES ;;l = '("E-ACCESS" "Table des accessoires eau potable") (setq tblname (car l)) (setq tbldesc (cadr l)) (setq l-fields (eval (read tblname))) ;;création des tables : (NA_addtable_if_not tblname tbldesc l-fields) ) ) ;;*************************************************************************** ;§/ade/Redéfinir et uniformiser les tables contenues dans un fichier tables.xml/none ;;le fichier xml peut être écrit par ECRIT_TABLE_DANS_XML (defun c:miseajour_tables_depuis_xml (/ tblname tbldesc l-fields) (alert "La mise à jour de la table à partir des fichier xml de définition de table\nPeuvent détruire les champs spéciaux issus d'un import APIC FEA\nLyonaise des Eaux" ) (pw_bydefault "mise-a-jour" "Non") (pw_getkwordmem "\nRéaliser la mise à jour de la table ?/Oui Non" "mise-a-jour" ) (if (= "Oui" mise-a-jour) (progn ;;chargement des description de table (prompt "\nChargez la définition de tables:") (c:chargexml) (foreach l TABLES ;;l = '("E-ACCESS" "Table des accessoires eau potable") (setq tblname (car l)) (setq tbldesc (cadr l)) (setq l-fields (eval (read tblname))) (setq l-fields (na_corrige_lfields l-fields)) ;;création des tables : (if (NA_modifytab tblname tbldesc l-fields) (prompt (strcat "\nTable " tblname " mise à jour avec succès")) (prompt (strcat "\nTable " tblname " non mise à jour")) ) ) ) ) (princ) ) ;;*************************************************************************** ;§/ade/corrige une liste l-fields venant d'un fichier xml /l-fields ;; (defun na_corrige_lfields ( l-fields ) (setq l-fields (mapcar '(lambda (x) (car (PW_CUTLISTAFTERRG x 3))) l-fields));_coupe si par erreur il y a plus de 4 éléments ;;complète si la valeur par defaut manque ;;chaine (setq l-fields (mapcar '(lambda (x) (if (and (< (length x) 4) (= "Character" (nth 2 x)) ) (append x '("")) x ) ) l-fields ) ) ;;nombre (setq l-fields (mapcar '(lambda (x) (if (and (< (length x) 4) (or (= "Integer" (nth 2 x)) (= "Real" (nth 2 x)) ) ) (append x '("")) x ) ) l-fields ) ) ;;point (setq l-fields (mapcar '(lambda (x) (if (and (< (length x) 4) (= "Point" (nth 2 x)) ) (append x '("0.0,0.0,0.0")) x ) ) l-fields ) ) (pw_supp_all '("" "" "" "") l-fields) ) ;;*************************************************************************** ;§/ade/Compléter et mettre à jour les tables contenues dans un fichier tables.xml/none ;;les champs existants sont redefinis, les autres sont ajoutés. les champs du dessin non contenus dans le XML sont conservés ;;le fichier xml peut être écrit par ECRIT_TABLE_DANS_XML (defun c:Completer_tables_depuis_xml (/ tblname tbldesc l-fields) ;;chargement des description de table (prompt "\nChargez la définition de tables:") (c:chargexml) (Na_Completer_tables TABLES) (princ) ) ;******************************************************************* ;§/ade/retourne la liste des (champs valeur) d'une entité en mode rapide/ename TableName ;;(NA_GetfieldData (enam) "EP_TRONC_COND")->(("FeatId" 708) ("PDF" "") ("UNI_DIST" "LES CARROZ") ("NOM" "") ("ELEVATION" "") ("AN_POSE" "") ("AEPANMES" 1975) ("NATURE" "2") ("DIAMETRE" 100) ("NAT_MAT" "2") ("COMMENT" "")) ;; les autres fonctions: ;;;(LIST_ELEM_DONNEES (enam)) rapides, que les tables nadiaa :-> (("ADRESSE" "PROMENADE DE L' ARVE")... ) ;;;(GET_DONNEES_ENTITE (enam)) rapide, toutes les tables :-> (("E-TRONCO" (("ADRESSE" "PROMENADE DE L' ARVE")...)) ;;;(AM_GETTABLEDATA (enam) "E-TRONCO"): lent, ne retourne que les valeurs: '(("PROMENADE DE L' ARVE" "1085" 0)) (defun NA_GetfieldData (ename TableName / TabDef Rec_Id lfields lchpval ) (if (not (setq Rec_Id (ade_odgetrecord ename TableName 0))) (prompt "\ntable non présente") (progn (setq TabDef (ade_odtabledefn TableName)) (setq lfields (mapcar '(lambda (x) (cdr (assoc "ColName" x)) ) (cdr (assoc "Columns" TabDef)) ) ) (setq lchpval (mapcar '(lambda (x) (list x (ade_odgetrecfield Rec_Id x))) lfields ) ) (ade_odfreerec Rec_Id) lchpVal ) ) ) ;******************************************************************* ;§/ade/retourne la liste des (champs description valeur) d'une netité/ename TableName ;;(NA_GetfieldDescData (enam) "INSEE")->(("CDC" "Découpage de la commune en cantons" 0)("CHEFLIEU" "Chef-lieu de canton" 0)) (defun NA_GetfieldDescData ( ename TableName / TabDef ColLst ColDef Col cnt ColLst NumRecs Tables _ColLst) (setq Tables (ade_odgettables ename) ColLst '() ) (if Tables (progn (if (member TableName Tables) (progn (setq ColDef (AM_GetTableFormat TableName)) (if ColDef (progn (setq ;ColDef (mapcar 'car ColDef) NumRecs (ade_odrecordqty ename TableName) cnt 0 ) (repeat NumRecs (setq _ColLst '()) (foreach Col ColDef (setq _ColLst (cons (list (car Col)(cadr Col) (ade_odgetfield ename TableName (car Col) cnt)) _ColLst)) ) (setq _ColLst (reverse _ColLst) ColLst (cons _ColLst ColLst) cnt (1+ cnt) ) ) (setq ColLst (reverse ColLst)) )) )) )) (car ColLst) ) ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
sepacap Posté(e) le 3 février 2021 Auteur Posté(e) le 3 février 2021 Hello YES impossible de renommer un champ OD alors que l on peut renommer une table OD MAIS il y a un contournement possible ... 1) MAEXPORT (en SQLite par exemple ou en SHP mais limitation a 10 cars pour les Tables et Champs OD) de tous les objets ayant la table OD "MYODTABLE"2) Suppression des objets3) Suppression de la table OD "MYODTABLE" avec la commande ADEDEFDATA4) MAPIMPORT et lors de la creation de la table OD "MYODTABLE" on peut aller sur chaque OD et donner un NOUVEAU Nom en entree ! Conseil pour les ODs : toujours se limiter a 10 cars pour Tables et ChampsET n utiliser que des lettres , chiffres , "-" , "_"ET une Lettre en 1er caractere Au fait connais tu l'outil ODEDIT de Alexander Sharov ??Pour AutoCAD MAP & CIVIL 2017-2020https://apps.autodes...493316603791142 LA SANTE, Bye, lecrabe Merci comment s'utilise cet outil ??
GEGEMATIC Posté(e) le 3 février 2021 Posté(e) le 3 février 2021 Salut,Merci comment s'utilise cet outil ??le voilà clef en main : ;;§/ADE/Renome un champ/none ;; (defun c:AdeChangeNomChamp (/ tabledef tablename tabledesc columns monChamp nouvnom monNouvChamp) (setq tabledef (ade_odtabledefn "A-PROB")) (setq tablename (car a-prob)) (setq tabledesc (cadr a-prob)) (setq columns (cdr (assoc "Columns" a-prob))) (setq ancNom (getstring "\nAncien nom de champ ?")) (setq nouvNom (getstring "\nNouveau nom de champ ?")) (setq monChamp (assoc (cons "ColName" ancNom) columns)) (setq nouvNom (cons "ColName" nouvNom)) (setq monNouvChamp (subst nouvNom (cons "ColName" ancNom) monChamp)) (setq columns (subst monNouvChamp monChamp columns)) (setq columns (cons "Columns" columns)) (setq tabledef (list tablename tabledesc columns)) (ade_odmodifytab tabledef) ) copie colle le code dans la ligne de commande autocad,lance AdeChangeNomChamprépond aux 2 questionsa+Gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
bonuscad Posté(e) le 4 février 2021 Posté(e) le 4 février 2021 Je n'ai pas réussi à utiliser "le clef en main" de gégé. (je n'ai pas la table "A-PROB") et la variable a-prob n'est pas défini dans le lisp. Après adaptation, j'ai remarqué que l'on perdait la valeur attribuée dans le champs renommé, pas top ! Donc je me suis attelé pour faire un truc plus générique et qui conserve la valeur des enregistrements (même empilés) après le renommage du champ.Rename_Field.lsp 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 4 février 2021 Posté(e) le 4 février 2021 Hello Bruno WAOUH cela me parait Tip-Top comme d'habitude ! Et le support du Multi-Record OD, c du "costaud" !! LA SANTE, Bye, lecrabe "fatigue" Autodesk Expert Elite Team
GEGEMATIC Posté(e) le 4 février 2021 Posté(e) le 4 février 2021 Salut,Je n'ai pas réussi à utiliser "le clef en main" de gégé. (je n'ai pas la table "A-PROB") et la variable a-prob n'est pas défini dans le lisp. Oups, j'avais peut être pas assez testé ...donc il faut répondre a 3 questions: ;;*************************** ;;§/ADE/Renome un champ/none ;; (defun c:AdeChangeNomChamp (/ tablNom tabledef tablename tabledesc columns monChamp nouvnom monNouvChamp) (setq tablNom (getstring "\nNom de la table ?")) (setq tabledef (ade_odtabledefn tablNom)) (setq tablename (car tabledef)) (setq tabledesc (cadr tabledef)) (setq columns (cdr (assoc "Columns" tabledef))) (setq ancNom (getstring "\nAncien nom de champ ?")) (setq nouvNom (getstring "\nNouveau nom de champ ?")) (setq monChamp (assoc (cons "ColName" ancNom) columns)) (setq nouvNom (cons "ColName" nouvNom)) (setq monNouvChamp (subst nouvNom (cons "ColName" ancNom) monChamp)) (setq columns (subst monNouvChamp monChamp columns)) (setq columns (cons "Columns" columns)) (setq tabledef (list tablename tabledesc columns)) (ade_odmodifytab tabledef) ) Après adaptation, j'ai remarqué que l'on perdait la valeur attribuée dans le champs renommé, pas top ! Effectivement, je ne l'avais pas remarqué,car je n'utilise pas la modification de table pour renommer les champs, mais pour en ajouter, les remettre dans l'ordre, changer leur casse, leur description.car tous les autres SIG peuvent réorganiser leur tables a leur guise, donc à chaque nouvel échange avec d'autres BE, j'avais des conflits de tables, rendant les données invisibles.Changer la casse ne perd pas les données. On a encore ce problème avec notre GPS, qui change sa table de données à chaque mise à jour du logiciel (et il y en a beaucoups).Sur une même affaire le levé d'il y a un mois est incompatible avec celui d'avant hier ! a+gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
bonuscad Posté(e) le 5 février 2021 Posté(e) le 5 février 2021 J'ai modifié mon post où j'ai proposé le code. J'ai fiabilisé l'entrée du nom du nouveau champ afin d'éviter les caractères non autorisés et que le nom soit bien valide. (d'ailleurs j'ai mis le code en pièce jointe pour éviter une mauvaise interprétation par un copier-coller sur le forum que pourrait entraîner ces caractères.) Correction d'un gros bug constaté en utilisation réelle, je ne pouvais pas le laisser dans l'état Pour ceux qui l'auraient récupéré -> poubelle. Reprenez la pièce jointe. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 5 février 2021 Posté(e) le 5 février 2021 Hello 1) Chef OUI Chef ! 2) OK MERCI pour la nouvelle version ! LA SANTE, Bye, lecrabe "fatigue" Autodesk Expert Elite Team
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