Упорядкування полів (постійно) у базі даних геоданих за допомогою ArcGIS Desktop?


18

Чи можна за допомогою ArcGIS 10.0 змінити впорядкованість полів у базі даних геоданих, і чи зберігається порядок у базі даних?

Ми розглядали можливість експорту в XML і написання аналізатора для зміни порядку впорядкування, а потім відновлення нової бази даних з XML. Це здається трудомістким процесом.

Інша ідея - імпортувати існуючі визначення полів у Excel, переупорядкувати їх, експортувати до CSV, а потім написати сценарій Python для створення цих полів у новій базі даних Geodata. Чи існує такий сценарій, перш ніж ми пишемо його з нуля?

На жаль, схоже, що діаграммер ArcGIS не підтримує переупорядкування поля.

Чи є якісь сценарії чи хаки, які ми могли б використати для спрощення цього процесу?


8
Сподіваюся, ви проголосували на ідеї.arcgis.com/ideaView?id=0873000000087wgAAA :-)
PolyGeo

Ви можете переупорядкувати поля в ArcGIS Diagrammer, просто перейдіть до колекції полів і виберіть поле та натисніть стрілки вгору / вниз.
blah238

@ blah238, якщо ви можете додати це як відповідь, я прийму це. Він працює дуже добре і є напівпідтримуваним Есрі, оскільки один з їхніх хлопців написав це
Stephen Lead

1
ось відео демонстрація - maps.esri.com/Diagrammer/reorderfields.htm
Дрор Har Gil

Відповіді:


6

Як зазначено в коментарях, ви можете переупорядкувати поля за допомогою ArcGIS Diagrammer. У цій відповіді я опублікував більш загальний крок за кроком: Як оновити властивість довжини поля класу функцій?


Спасибі. ArcGIS Diagrammer є крихітним трохи нестабільним - він точно не виходить з ладу, але іноді відчуває себе домашнім. Але для зміни схеми, здається, найкращий варіант.
Стівен Ведучий

Можливо, зараз працює 10,0. Він встановив нормально для мене на Win7 x64 з ArcGIS 10.1, але під час запуску він показує помилки компіляції Just In Time та закриває.
matt wilkie

1
Слід зазначити, що діаграммер ArcGIS більше не функціонує з ArcGIS 10.3 або вище.
Карта людини

7

У відповідь на інше питання , я сказав , що можна використовувати зведені статистичні дані , щоб зробити еквівалент PULLITEMS (старий Speak для REORDER полів). Ця техніка добре працює лише на Таблицях, але зараз є інший сценарій, який говорить, що вона працює як у класах функцій, так і в таблиці.

Я також рекомендую відповідь на постійне замовлення полів за допомогою інструменту ArcGIS Make Query Table? що надихнуло відповідь @klewis на цю.


6

Безкоштовна версія ET Geowizards зробить це. Основні -> Сортування фігур. Я тільки тестував його на v10 File Geodatabase і він працює. Але він повинен створити новий клас функцій.


5

Якщо у вас немає Visio for Diagramer - всі інші відповіді тут порушують будь-які приєднання. Я виявив, що це добре працює в моєму випадку:

  1. Експортуйте схему для всього db за допомогою Arccatalog (Export - XML) - я не експортував дані, лише схему
  2. Скористайтеся сервісом Pretty Print в Інтернеті, щоб відформатувати xml Відкрийте XML-файл у текстовому редакторі та упорядкуйте поля, як вам подобається
  3. Повторно імпортуйте схему для створення нової бази даних
  4. Перезавантажте дані, використовуючи оригінальну базу даних

Я відкинув це в первісному питанні як "трудомісткий процес" - але насправді, коли ви його так ставите, це не здається занадто поганим;)
Стівен Лід

4

Для впорядкування полів потрібно запустити MakeTableQuery з набору інструментів "Шари та таблиці". З документації Порядок полів у списку полів вказує на порядок, що поля з’являться у вихідному шарі або у вигляді таблиці. Також, якщо стовпець "Форма" доданий до списку полів, результатом є шар; в іншому випадку це вид таблиці. Це доступно на будь-якому рівні ліцензії.


Мені цікаво, чи ви протестували це, тому що я не бачу способу, щоб інструмент Make Query Table повторно замовляв поля - його діалогове вікно інструментів, здається, просто дозволяє вирішити, чи потрібно поля включати чи ні.
PolyGeo

Так, я перевірив це на сценарії Python. Здається, інструмент призначений для об'єднання або приєднання кількох таблиць. Однак я в змозі створити нову таблицю або клас об’єктів з упорядкованими полями, ввівши єдиний клас функцій.
klewis

Я, мабуть, чогось не вистачаю, тому я опублікував тут нове запитання gis.stackexchange.com/questions/32310/… - чи можете ви детально описати кроки для мене, будь ласка?
PolyGeo

Щойно я відповів на нове запитання, використовуючи не лише MakeQueryTable, але також CopyFeatures та деякі незначні редагування коду, які я отримав за допомогою Copy As Python Snippet у вікно Python.
PolyGeo

4

За допомогою інструмента злиття ви можете легко назавжди упорядкувати поля. Він працює з таблицями та функціональними класами. Переупорядкування може бути виконано за допомогою сценарію python і навіть за допомогою діалогового вікна інструмента (Видалення поля та повторне додавання його в діалоговому вікні). Хоча переупорядкування через діалог не є ідеальним підходом.

Рекомендується використовувати інструмент Merge один раз, а потім скопіювати Copy As Python Snippet, а потім вручну змінити порядки полів, а потім вставити код python у вікна python.

Ось сценарій python, який використовує інструмент об’єднання для впорядкування полів (скопійовано звідси )

import arcpy

def reorder_fields(table, out_table, field_order, add_missing=True):
    """ 
    Reorders fields in input featureclass/table
    :table:         input table (fc, table, layer, etc)
    :out_table:     output table (fc, table, layer, etc)
    :field_order:   order of fields (objectid, shape not necessary)
    :add_missing:   add missing fields to end if True (leave out if False)
    -> path to output table
    """
    existing_fields = arcpy.ListFields(table)
    existing_field_names = [field.name for field in existing_fields]

    existing_mapping = arcpy.FieldMappings()
    existing_mapping.addTable(table)

    new_mapping = arcpy.FieldMappings()

    def add_mapping(field_name):
        mapping_index = existing_mapping.findFieldMapIndex(field_name)

        # required fields (OBJECTID, etc) will not be in existing mappings
        # they are added automatically
        if mapping_index != -1:
            field_map = existing_mapping.fieldMappings[mapping_index]
            new_mapping.addFieldMap(field_map)

    # add user fields from field_order
    for field_name in field_order:
        if field_name not in existing_field_names:
            raise Exception("Field: {0} not in {1}".format(field_name, table))

        add_mapping(field_name)

    # add missing fields at end
    if add_missing:
        missing_fields = [f for f in existing_field_names if f not in field_order]
        for field_name in missing_fields:
            add_mapping(field_name)

    # use merge with single input just to use new field_mappings
    arcpy.Merge_management(table, out_table, new_mapping)
    return out_table

ВИКОРИСТАННЯ:

new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)

Це, здається, працює добре з діалогового вікна інструменту, де я спочатку видалив поле, яке хотів би перейти останнім, додав нове поле, а потім зробив Додати поле введення. Однак, як ви вже говорили, використовувати його в Python простіше, ніж через інструмент, коли потрібні більш складні переупорядкування.
PolyGeo

3

Існує безкоштовне розширення від Esri під назвою X-Ray, яке містить інструмент, виконаний для упорядкування полів. Чудово працював для нас і простий у використанні.

Додаток X-Ray для ArcCatalog можна використовувати для розробки, вдосконалення та документування дизайну баз даних геоданих


Ласкаво просимо на біржу стека GIS і дякуємо за пораду. Я переформатував вашу відповідь, щоб вона відповідала більше стандартам Stack Exchange - я включила посилання та цитату про продукт та видалила сторонні дані.
Стівен Ведучий

2

Наразі найефективніший метод, який я знайшов, щоб перейменувати поля, змінити їх порядок за замовчуванням та ряд інших речей - це використовувати Microsoft Access:

  1. Створіть нову персональну базу даних геоданих
  2. Перетягніть клас або таблицю функцій у p-gdb
  3. Відкрити доступ та:
    • Ігноруючи всі таблиці, що починаються GDB_, відкрийте таблиці в режимі дизайну таблиць
    • перейменувати, змінити порядок, додати нове тощо.
  4. Перетягніть назад до свого справжнього операційного gdb

Примітки:

Завжди мати струм резервного копіювання. Ви прямуєте безпосередньо з внутрішньою структурою GDB, і ви можете легко переробити свої дані, змінивши БД до точки, що ArcGIS вже не знає, як її читати.

На стороні ArcGIS є кілька зарезервованих ключових слів, які не можна використовувати для імен полів. Доступ із радістю створить або перейменує поля з цими ключовими словами, але коли ви повернете їх, вони автоматично додадуть підкреслення. Так Currentстає Current_. Також слід зазначити, що частково перекриваються ключові слова, захищені від доступу .

Персональний GDB має обмеження розміру файлу 2 Гб, тому загальний розмір усіх таблиць та класів функцій в GDB не може перевищувати цього.

Завжди може бути привабливим завжди використовувати особисті GDB для невеликих проектів (<2 Гб). Не варто. Продуктивність ненормальна, і в SQL-синтаксисі Access SQL є тонкі відмінності, які роблять мітки вирази, запити визначення тощо.


звичайно, цей метод офіційно не санкціонований, і якщо щось піде не так, ви не зможете викликати технічну підтримку;)
Stephen Lead


2

Цей сценарій Python є своєрідним методом "стрічки" для цього. Вона обмежена 20 полями, але її можна легко додати для того, щоб вона могла працювати для тих чи інших полів, якими є ваші дані.

Сценарій призначений для запуску як інструменту сценарію, тому вам потрібно буде встановити параметри в ArcCatalog.

Параметри повинні бути такими:

  • InputFC - Клас функцій
  • Місце виводу - робоча область
  • Назва виводу - Рядок
  • Поле1 - Поле
  • Field2 - Поле
  • Весь шлях до поля20

Код:

import arcpy, os, sys
from arcpy import env

arcpy.env.overwriteOutput = True

inFC = arcpy.GetParameterAsText(0)
outLoc = arcpy.GetParameterAsText(1)
outName = arcpy.GetParameterAsText(2)
field1 = arcpy.GetParameterAsText(3)
field2 = arcpy.GetParameterAsText(4)
field3 = arcpy.GetParameterAsText(5)
field4 = arcpy.GetParameterAsText(6)
field5 = arcpy.GetParameterAsText(7)
field6 = arcpy.GetParameterAsText(8)
field7 = arcpy.GetParameterAsText(9)
field8 = arcpy.GetParameterAsText(10)
field9 = arcpy.GetParameterAsText(11)
field10 = arcpy.GetParameterAsText(12)
field11 = arcpy.GetParameterAsText(13)
field12 = arcpy.GetParameterAsText(14)
field13 = arcpy.GetParameterAsText(15)
field14 = arcpy.GetParameterAsText(16)
field15 = arcpy.GetParameterAsText(17)
field16 = arcpy.GetParameterAsText(18)
field17 = arcpy.GetParameterAsText(19)
field18 = arcpy.GetParameterAsText(20)
field19 = arcpy.GetParameterAsText(21)
field20 = arcpy.GetParameterAsText(22)

fieldList = ["SHAPE@"]

arcpy.AddMessage(" ")

arcpy.AddMessage("Appending field choices to new List ")

arcpy.AddMessage(" ")

if (field1 != ""):
    fieldList.append(field1)
if (field2 != ""):
    fieldList.append(field2)
if (field3 != ""):
    fieldList.append(field3)
if (field4 != ""):
    fieldList.append(field4)
if (field5 != ""):
    fieldList.append(field5)
if (field6 != ""):
    fieldList.append(field6)
if (field7 != ""):
    fieldList.append(field7)
if (field8 != ""):
    fieldList.append(field8)
if (field9 != ""):
    fieldList.append(field9)
if (field10 != ""):
    fieldList.append(field10)
if (field11 != ""):
    fieldList.append(field1)
if (field12 != ""):
    fieldList.append(field12)
if (field13 != ""):
    fieldList.append(field13)
if (field14 != ""):
    fieldList.append(field14)
if (field15 != ""):
    fieldList.append(field15)
if (field16 != ""):
    fieldList.append(field16)
if (field17 != ""):
    fieldList.append(field17)
if (field18 != ""):
    fieldList.append(field18)
if (field19 != ""):
    fieldList.append(field19)
if (field20 != ""):
    fieldList.append(field20)

arcpy.AddMessage(" ")

#arcpy.AddMessage(fieldList)

oldFieldList = arcpy.ListFields(inFC)

fieldTypes = []

numOfFields = len(fieldList)

fieldIndex = 1

reorderedFields = []

for fld in fieldList:
    for f in oldFieldList:
        if f.name == fld:
            arcpy.AddMessage(f.name)
            reorderedFields.append(f)
            break

arcpy.AddMessage(" ")

arcpy.AddMessage(reorderedFields)

desc = arcpy.Describe(inFC)
geoType = desc.shapeType.upper()
spatRef = arcpy.Describe(inFC).spatialReference

arcpy.CreateFeatureclass_management(outLoc, outName, geoType, "", "", "", spatRef)
newFeat = os.path.join(outLoc, outName)

for flds in reorderedFields:
    if (flds.type == "String"):
        fLength = flds.length
        arcpy.AddField_management(newFeat, flds.name, flds.type, "", "", str(fLength))
    else:
        arcpy.AddField_management(newFeat, flds.name, flds.type)

arcpy.AddMessage(" ")

arcpy.AddMessage(fieldList)

arcpy.AddMessage(" ")

arcpy.AddMessage("Features will be copied with new Schema...")

count = 0

with arcpy.da.SearchCursor(inFC, fieldList) as cursor:
    for row in cursor:
        insertCursor = arcpy.da.InsertCursor(newFeat, (fieldList))
        if (numOfFields == 21):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]) + ', ' + str(row[14]) + ', ' + str(row[15]) + ', ' + str(row[16]) + ', ' + str(row[17]) + ', ' + str(row[18]) + ', ' + str(row[19]) + ', ' + str(row[20]))
            count += 1
        elif (numOfFields == 20):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]) + ', ' + str(row[14]) + ', ' + str(row[15]) + ', ' + str(row[16]) + ', ' + str(row[17]) + ', ' + str(row[18]) + ', ' + str(row[19]))
            count += 1
        elif (numOfFields == 19):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]) + ', ' + str(row[14]) + ', ' + str(row[15]) + ', ' + str(row[16]) + ', ' + str(row[17]) + ', ' + str(row[18]))
            count += 1
        elif (numOfFields == 18):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]) + ', ' + str(row[14]) + ', ' + str(row[15]) + ', ' + str(row[16]) + ', ' + str(row[17]))
            count += 1
        elif (numOfFields == 17):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]) + ', ' + str(row[14]) + ', ' + str(row[15]) + ', ' + str(row[16]))
            count += 1
        elif (numOfFields == 16):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]) + ', ' + str(row[14]) + ', ' + str(row[15]))
            count += 1
        elif (numOfFields == 15):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]) + ', ' + str(row[14]))
            count += 1
        elif (numOfFields == 14):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]) + ', ' + str(row[13]))
            count += 1
        elif (numOfFields == 13):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]) + ', ' + str(row[12]))
            count += 1
        elif (numOfFields == 12):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]) + ', ' + str(row[11]))
            count += 1
        elif (numOfFields == 11):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]) + ', ' + str(row[10]))
            count += 1
        elif (numOfFields == 10):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]) + ', ' + str(row[9]))
            count += 1
        elif (numOfFields == 9):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]) + ', ' + str(row[8]))
            count += 1
        elif (numOfFields == 8):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]) + ', ' + str(row[7]))
            count += 1
        elif (numOfFields == 7):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5], row[6]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]) + ', ' + str(row[6]))
            count += 1
        elif (numOfFields == 6):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4], row[5]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]) + ', ' + str(row[5]))
            count += 1
        elif (numOfFields == 5):
            insertCursor.insertRow((row[0], row[1], row[2], row[3], row[4]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]) + ', ' + str(row[4]))
            count += 1
        elif (numOfFields == 4):
            insertCursor.insertRow((row[0], row[1], row[2], row[3]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]) + ', ' + str(row[3]))
            count += 1
        elif (numOfFields == 3):
            insertCursor.insertRow((row[0], row[1], row[2]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]) + ', ' + str(row[2]))
            count += 1
        elif (numOfFields == 2):
            insertCursor.insertRow((row[0], row[1]))
            arcpy.AddMessage(" ")
            arcpy.AddMessage("Index: " + str(count) + " -----> " + str(row[1]))
            count += 1

Я усвідомлюю, що це не найкрасивіший чи найефективніший спосіб зробити це, але насправді це працює дуже приємно і на написання пішло лише півгодини. Я використовую це весь час, коли мені потрібно впорядкувати поля, і для цього не потрібен Diagrammer або Microsoft Access. Звичайно, максимальна кількість полів може бути проблемою, але знову ж таки, що можна налаштувати в сценарії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.