จัดเรียงเขตข้อมูลใหม่ (ถาวร) ในฐานข้อมูลไฟล์โดยใช้ ArcGIS Desktop หรือไม่


18

การใช้ ArcGIS 10.0 เป็นไปได้หรือไม่ที่จะเรียงลำดับฟิลด์ในฐานข้อมูลไฟล์อีกครั้งและยังคงมีคำสั่งซื้ออยู่ในฐานข้อมูลหรือไม่

เราถือว่าการส่งออกเป็น XML และเขียน parser เพื่อเปลี่ยนลำดับฟิลด์จากนั้นสร้างฐานข้อมูลใหม่จาก XML อีกครั้ง ดูเหมือนว่าจะเป็นกระบวนการที่ลำบาก

อีกแนวคิดหนึ่งคือการนำเข้าข้อกำหนดเขตข้อมูลที่มีอยู่ไปยัง Excel สั่งซื้อใหม่ส่งออกเป็น CSV แล้วเขียนสคริปต์ Python เพื่อสร้างเขตข้อมูลเหล่านี้ในฐานข้อมูล Geodatabase ใหม่ สคริปต์ลักษณะนี้มีอยู่ก่อนที่เราจะเขียนตั้งแต่เริ่มต้นหรือไม่

น่าเสียดายที่ ArcGIS Diagrammer ดูเหมือนจะไม่สนับสนุนการสั่งซื้อภาคสนามอีกครั้ง

มีสคริปต์หรือแฮ็กที่เราสามารถใช้เพื่อทำให้กระบวนการนี้ง่ายขึ้นหรือไม่?


8
หวังว่าคุณจะได้คะแนนที่ideas.arcgis.com/ideaView?id=0873000000087wgAAA :-)
PolyGeo

คุณสามารถจัดลำดับฟิลด์ใหม่ใน ArcGIS Diagrammer เพียงเข้าไปที่คอลเลกชันฟิลด์และเลือกฟิลด์และกดลูกศรขึ้น / ลง
blah238

@ blah238 หากคุณสามารถเพิ่มเป็นคำตอบฉันจะยอมรับมัน มันใช้งานได้ดีมากและได้รับการสนับสนุนจาก Esri ตั้งแต่หนึ่งในพวกเขาเขียนมัน
Stephen Lead

1
นี่คือวิดีโอสาธิต - maps.esri.com/Diagrammer/reorderfields.htm
Dror Har Gil Gil

คำตอบ:


6

ตามที่กล่าวไว้ในความคิดเห็นที่คุณสามารถเรียงลำดับเขตข้อมูลใหม่ด้วย ArcGIS Diagrammer ฉันโพสต์ขั้นตอนทั่วไปมากขึ้นทีละขั้นตอนในคำตอบนี้: วิธีการปรับปรุงคุณสมบัติความยาวของเขตข้อมูลชั้นคุณสมบัติ?


ขอบคุณ ArcGIS Diagrammer นั้นมีความเสถียรเล็กน้อย - มันไม่ได้ผิดพลาดอย่างแน่นอน แต่บางครั้งก็รู้สึกเหมือนทำที่บ้าน แต่สำหรับการปรับเปลี่ยนสคีดูเหมือนว่าตัวเลือกที่ดีที่สุด
Stephen Lead

ตอนนี้อาจทำงานผ่านมา 10.0 มันติดตั้งโอเคสำหรับฉันบน Win7 x64 ด้วย ArcGIS 10.1 แต่เมื่อรันมันจะพ่นข้อผิดพลาดและการคอมไพล์ Just In Time และเลิก
แมตต์ wilkie

1
ควรทราบว่า ArcGIS Diagrammer จะไม่ทำงานกับ ArcGIS 10.3 หรือสูงกว่าอีกต่อไป
แผนที่ Man

7

ในการตอบคำถามอื่นฉันบอกว่ามันเป็นไปได้ที่จะใช้สถิติสรุปเพื่อทำเทียบเท่ากับ PULLITEMS (เก่า ๆ สำหรับการสั่งซื้อใหม่) เทคนิคนั้นใช้งานได้ดีบน Tables เท่านั้น แต่มีสคริปต์อื่นที่พร้อมใช้งานในตอนนี้ซึ่งบอกว่าใช้ได้ทั้งในคลาสคุณลักษณะและตาราง

ฉันจะแนะนำฟิลด์คำตอบเพื่อสั่งซื้อซ้ำอย่างถาวรโดยใช้เครื่องมือ ArcGIS Make Query Table หรือไม่ ซึ่งได้รับแรงบันดาลใจจาก @klewis 'ตอบคำถามนี้


6

ET Geowizards รุ่นฟรีจะทำเช่นนี้ พื้นฐาน -> จัดเรียงรูปร่าง ฉันเพิ่งทดสอบมันใน v10 File Geodatabase และใช้งานได้ มันต้องสร้างคลาสฟีเจอร์ใหม่ขึ้นมา


5

หากคุณไม่มี Visio สำหรับ Diagramer- คำตอบอื่น ๆ ทั้งหมดที่นี่จะไม่รวมการเข้าร่วมใด ๆ ฉันพบสิ่งนี้ทำงานได้ดีในกรณีของฉัน:

  1. ส่งออกสคีมาสำหรับ db ทั้งหมดโดยใช้ Arccatalog (ส่งออก - XML) - ฉันไม่ได้ส่งออกข้อมูลสคีมาเท่านั้น
  2. ใช้บริการ Pretty Print ออนไลน์เพื่อจัดรูปแบบ xml เปิดไฟล์ XML ในเท็กซ์เอดิเตอร์และเรียงลำดับฟิลด์ตามที่คุณต้องการ
  3. นำเข้าสคีมาอีกครั้งเพื่อสร้างฐานข้อมูลใหม่
  4. โหลดข้อมูลใหม่โดยใช้ฐานข้อมูลต้นฉบับเป็นแหล่งข้อมูล

ฉันปฏิเสธว่าในคำถามเดิมว่า "เป็นกระบวนการที่ลำบาก" - แต่จริงๆแล้วเมื่อคุณพูดอย่างนั้นมันก็ฟังดูไม่แย่นัก)
สตีเฟ่นลีด

4

คุณต้องเรียกใช้ MakeTableQuery จากชุดเครื่องมือเลเยอร์และมุมมองตารางเพื่อจัดลำดับฟิลด์ใหม่ จากเอกสารคู่มือลำดับของฟิลด์ในรายการฟิลด์ระบุลำดับของฟิลด์ที่จะปรากฏในเลเยอร์เอาต์พุตหรือมุมมองตาราง นอกจากนี้หากมีการเพิ่มคอลัมน์รูปร่างลงในรายการเขตข้อมูลผลลัพธ์จะเป็นเลเยอร์ มิฉะนั้นจะเป็นมุมมองตาราง สามารถใช้ได้กับทุกระดับสิทธิ์การใช้งาน


เพียงแค่สงสัยว่าคุณได้ทดสอบสิ่งนี้หรือไม่เพราะฉันไม่เห็นวิธีสำหรับเครื่องมือสร้างตารางแบบสอบถามเพื่อเรียงลำดับเขตข้อมูลอีกครั้งดูเหมือนว่ากล่องโต้ตอบเครื่องมือจะช่วยให้คุณตัดสินใจว่าจะรวมเขตข้อมูลหรือไม่
PolyGeo

ใช่ฉันได้ทดสอบสิ่งนี้จากสคริปต์ Python ดูเหมือนว่าเครื่องมือจะได้รับการออกแบบให้รวมหรือเข้าร่วมหลายตาราง อย่างไรก็ตามฉันสามารถสร้างตารางหรือคลาสคุณลักษณะใหม่ด้วยฟิลด์ที่เรียงลำดับใหม่โดยการป้อนคลาสคุณลักษณะเดียว
klewis

ฉันต้องคิดถึงบางสิ่งบางอย่างดังนั้นจึงได้โพสต์คำถามใหม่ที่นี่gis.stackexchange.com/questions/32310/… - คุณช่วยอธิบายรายละเอียดขั้นตอนให้ฉันหน่อยได้ไหม?
PolyGeo

ฉันเพิ่งตอบคำถามใหม่โดยใช้ไม่ใช่แค่ MakeQueryTable แต่ยัง CopyFeatures และการแก้ไขเล็กน้อยของรหัสที่ฉันได้ใช้ Copy As Python Snippet ในหน้าต่าง Python
PolyGeo

4

ด้วยเครื่องมือผสานคุณสามารถจัดลำดับฟิลด์ใหม่ได้อย่างง่ายดาย มันทำงานกับตารางและชั้นเรียนคุณสมบัติ การจัดเรียงใหม่สามารถทำได้ผ่านสคริปต์ python และแม้กระทั่งกับกล่องโต้ตอบเครื่องมือ (โดยการลบฟิลด์และเพิ่มอีกครั้งในกล่องโต้ตอบ) แม้ว่าการสั่งซื้อซ้ำผ่านกล่องโต้ตอบนั้นไม่ใช่วิธีการที่สมบูรณ์แบบ

ขอแนะนำให้ใช้เครื่องมือผสานหนึ่งครั้งจากนั้นใช้คัดลอกเป็น Python Snippetจากนั้นเปลี่ยนคำสั่งฟิลด์ด้วยตนเองแล้ววางรหัสหลามในหน้าต่างหลาม

นี่คือสคริปต์หลามที่ใช้เครื่องมือผสานเพื่อจัดลำดับฟิลด์ใหม่ (คัดลอกจากที่นี่ )

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 add-in สำหรับ ArcCatalog สามารถใช้ในการพัฒนาปรับแต่งและจัดทำเอกสารการออกแบบฐานข้อมูลทางภูมิศาสตร์ของคุณ


ยินดีต้อนรับสู่ GIS Stack Exchange และขอบคุณสำหรับเคล็ดลับ ฉันจัดรูปแบบคำตอบของคุณอีกครั้งให้สอดคล้องกับมาตรฐาน Stack Exchange - ฉันรวมลิงค์และคำพูดเกี่ยวกับผลิตภัณฑ์และลบข้อมูลภายนอก
สตีเฟ่นนำ

2

จนถึงตอนนี้ฉันพบวิธีที่มีประสิทธิภาพที่สุดในการเปลี่ยนชื่อฟิลด์เปลี่ยนลำดับเริ่มต้นและอีกหลายสิ่งคือใช้ Microsoft Access:

  1. สร้างฐานข้อมูลภูมิศาสตร์ส่วนบุคคลใหม่
  2. ลากและวางคลาสคุณลักษณะหรือตารางลงใน p-gdb
  3. เปิดใน Access และ:
    • ละเว้นการเริ่มตารางทั้งหมดGDB_เปิดตารางในโหมดออกแบบตาราง
    • เปลี่ยนชื่อเปลี่ยนลำดับเพิ่มใหม่ ฯลฯ
  4. ลากแล้วปล่อยกลับสู่ gdb ที่ใช้งานจริงของคุณ

หมายเหตุ:

มักจะได้กลับขึ้นในปัจจุบัน คุณกำลังยุ่งกับโครงสร้าง GDB ภายในและคุณสามารถทิ้งข้อมูลของคุณได้อย่างง่ายดายโดยการเปลี่ยนฐานข้อมูลไปยังจุดที่ ArcGIS ไม่รู้วิธีอ่านอีกต่อไป

มีคำหลักที่สงวนไว้บางส่วนทางด้าน ArcGIS ที่ไม่สามารถใช้สำหรับชื่อฟิลด์ได้ การเข้าถึงจะสร้างหรือเปลี่ยนชื่อฟิลด์ด้วยคำหลักเหล่านี้อย่างมีความสุข แต่เมื่อคุณนำกลับมาพวกเขาจะมีการขีดเส้นใต้ต่อท้ายโดยอัตโนมัติ ดังนั้นจะกลายเป็นCurrent Current_นอกจากนี้ยังทราบบางส่วนที่ทับซ้อนกันคำหลักที่เข้าถึงลิขสิทธิ์

Personal GDB มีขีด จำกัด ขนาดไฟล์ 2GB ดังนั้นขนาดรวมของตารางและคลาสคุณลักษณะทั้งหมดภายใน GDB ต้องไม่เกินขนาดนั้น

อาจเป็นการดึงดูดให้ใช้ GDB ส่วนตัวสำหรับโครงการขนาดเล็ก (<2GB) เสมอ อย่า ประสิทธิภาพเป็นสุดซึ้งและมีความแตกต่างเล็กน้อยในไวยากรณ์ SQL ของ Access ที่ทำให้นิพจน์ป้ายกำกับแบบสอบถามคำจำกัดความและอื่น ๆ ไม่ใช่แบบพกพา


แน่นอนวิธีนี้ไม่ได้รับอนุญาตอย่างเป็นทางการและหากมีสิ่งผิดปกติเกิดขึ้นคุณจะไม่สามารถโทรติดต่อฝ่ายสนับสนุนด้านเทคนิค;)
Stephen Lead


2

สคริปต์ Python นี้เป็นวิธีการ "เทปพันสายไฟ" สำหรับการทำเช่นนี้ มันถูก จำกัด ไว้ที่ 20 เขตข้อมูล แต่สามารถเพิ่มได้อย่างง่ายดายเพื่อให้สามารถเรียกใช้สำหรับเขตข้อมูลของคุณได้

สคริปต์ถูกออกแบบมาให้ทำงานเป็นเครื่องมือสคริปต์ดังนั้นคุณจะต้องตั้งค่าพารามิเตอร์ภายใน ArcCatalog

พารามิเตอร์ควรเป็นดังนี้:

  • InputFC - คลาสคุณลักษณะ
  • ที่ตั้งเอาท์พุท - พื้นที่ทำงาน
  • ชื่อเอาต์พุต - สตริง
  • Field1 - ฟิลด์
  • Field2 - ฟิลด์
  • ไปจนถึง Field20

รหัส:

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 แน่นอนว่าจำนวนสูงสุดของฟิลด์สามารถเป็นปัญหาได้ แต่สามารถกำหนดได้อีกครั้งภายในสคริปต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.