Menyusun ulang bidang (secara permanen) dalam file geodatabase menggunakan ArcGIS Desktop?


18

Menggunakan ArcGIS 10.0, apakah mungkin untuk menyusun ulang bidang dalam file geodatabase, dan apakah urutannya tetap ada di database?

Kami mempertimbangkan untuk mengekspor ke XML, dan menulis parser untuk mengubah urutan bidang, kemudian membuat kembali database baru dari XML. Ini seperti proses yang melelahkan.

Gagasan lain adalah mengimpor definisi bidang yang ada ke Excel, memesan ulang, mengekspor ke CSV, lalu menulis skrip Python untuk membuat bidang ini dalam Geodatabase baru. Apakah ada skrip seperti ini, sebelum kita menulisnya dari awal?

Sayangnya Diagrammer ArcGIS tampaknya tidak mendukung pemesanan ulang bidang.

Apakah ada skrip atau retas yang dapat kita gunakan untuk menyederhanakan proses ini?



Anda dapat menyusun ulang bidang dalam Diagrammer ArcGIS, cukup masuk ke koleksi bidang dan pilih bidang dan tekan panah atas / bawah.
blah238

@ blah238 jika Anda dapat menambahkan itu sebagai jawaban, saya akan menerimanya. Ini bekerja dengan sangat baik dan semi-didukung oleh Esri karena salah satu dari mereka menulisnya
Stephen Lead

1
di sini adalah demonstrasi video - maps.esri.com/Diagrammer/reorderfields.htm
Geog

Jawaban:


6

Seperti yang disebutkan dalam komentar Anda dapat menyusun ulang bidang dengan ArcGIS Diagrammer. Saya memposting langkah yang lebih umum dalam jawaban ini: Bagaimana cara memperbarui properti panjang bidang kelas fitur?


Terima kasih. Diagrammer ArcGIS sedikit tidak stabil - tidak persis macet, tapi terkadang terasa seperti buatan sendiri. Tetapi untuk memodifikasi skema, sepertinya pilihan terbaik.
Stephen Lead

Mungkin sekarang bekerja lebih dari 10.0. Ini terinstal ok untuk saya di Win7 x64 dengan ArcGIS 10.1, tetapi ketika dijalankan memuntahkan kesalahan kompilasi Just In Time dan berhenti.
matt wilkie

1
Penting untuk dicatat bahwa Diagrammer ArcGIS tidak lagi berfungsi dengan ArcGIS 10.3 atau lebih tinggi.
Peta Manusia

7

Sebagai jawaban atas pertanyaan lain saya katakan bahwa adalah mungkin untuk menggunakan Statistik Ringkasan untuk melakukan yang setara dengan PULLITEMS (bahasa lama untuk bidang pemesanan ulang). Itu teknik bekerja dengan baik pada Tabel hanya tetapi ada lagi naskah tersedia sekarang yang mengatakan itu bekerja pada kedua kelas fitur dan meja.

Saya juga akan merekomendasikan bidang Jawab untuk Memesan Ulang bidang secara permanen menggunakan alat ArcGIS Make Query Table? yang terinspirasi oleh Jawaban @klewis untuk yang satu ini.


6

Versi gratis ET Geowizards akan melakukan ini. Dasar -> Sortir bentuk. Saya baru saja mengujinya pada File Geodatabase v10 dan berfungsi. Itu harus membuat kelas fitur baru.


5

Jika Anda tidak memiliki Visio untuk Diagramer- Semua jawaban lain di sini memecah semua gabungan. Saya menemukan ini berfungsi dengan baik dalam kasus saya:

  1. Ekspor skema untuk seluruh db menggunakan Arccatalog (Ekspor - XML) - Saya tidak mengekspor data, hanya skema
  2. Gunakan beberapa layanan Pretty Print online untuk memformat xml. Buka file XML dalam editor teks dan Susun ulang bidang yang Anda inginkan
  3. Impor kembali skema untuk membuat database baru
  4. Muat ulang data menggunakan database asli sebagai sumber

Saya menganggap itu dalam pertanyaan awal sebagai "proses yang melelahkan" - tetapi sebenarnya ketika Anda mengatakannya seperti itu, itu tidak terdengar terlalu buruk;)
Stephen Lead

4

Anda perlu menjalankan MakeTableQuery dari toolset Layers dan Table Views untuk menyusun ulang bidang. Dari dokumentasi, Urutan bidang dalam daftar bidang menunjukkan urutan bidang akan muncul di tampilan lapisan atau tabel. Juga, Jika kolom Bentuk ditambahkan ke daftar bidang, hasilnya adalah lapisan; jika tidak, ini adalah tampilan tabel. Ini tersedia dengan tingkat lisensi apa pun.


Hanya ingin tahu apakah Anda telah menguji ini karena saya tidak dapat melihat cara alat Make Query Table untuk memesan ulang bidang - dialog alatnya sepertinya hanya membiarkan Anda memutuskan apakah bidang akan dimasukkan atau tidak.
PolyGeo

Ya, saya telah menguji ini dari skrip Python. Alat ini tampaknya dirancang untuk menggabungkan atau bergabung dengan beberapa tabel. Namun, saya dapat membuat tabel baru atau kelas fitur dengan bidang yang disusun ulang dengan memasukkan satu kelas fitur.
klewis

Saya pasti kehilangan sesuatu, jadi kirimkan pertanyaan baru di sini gis.stackexchange.com/questions/32310/… - bisakah Anda merinci langkah-langkah untuk saya?
PolyGeo

Saya baru saja menjawab pertanyaan baru dengan menggunakan tidak hanya MakeQueryTable tetapi juga CopyFeatures dan beberapa pengeditan kecil kode yang saya dapatkan menggunakan Copy As Python Snippet ke dalam jendela Python.
PolyGeo

4

Dengan Alat Gabung , Anda dapat dengan mudah memesan ulang bidang secara permanen. Ini bekerja dengan tabel dan kelas fitur. Penataan ulang dapat dilakukan melalui skrip python dan bahkan dengan dialog Alat (Dengan menghapus bidang dan menambahkannya kembali dalam dialog). Meskipun pemesanan ulang melalui dialog bukanlah pendekatan yang sempurna.

Dianjurkan untuk menggunakan alat Gabung sekali dan kemudian menggunakan Salin Sebagai Potongan Python dan kemudian secara manual mengubah perintah bidang dan kemudian menempelkan kode python di jendela python.

Berikut ini adalah skrip python yang menggunakan Gabung Alat untuk menyusun ulang bidang (Disalin dari sini )

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

PEMAKAIAN:

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

Itu tampaknya bekerja dengan baik dari dialog alat tempat saya pertama kali menghapus bidang yang ingin saya pindahkan menjadi yang terakhir, menambahkan bidang baru dan kemudian melakukan Tambahkan Bidang Input. Namun, seperti yang Anda katakan, menggunakannya dalam Python lebih mudah daripada melalui alat ketika diperlukan pemesanan ulang yang lebih kompleks.
PolyGeo

3

Ada ekstensi gratis dari Esri yang disebut X-Ray yang berisi alat yang dibuat untuk Menyusun ulang bidang. Telah bekerja dengan baik untuk kami dan mudah digunakan.

Add-in X-Ray untuk ArcCatalog dapat digunakan untuk mengembangkan, memperbaiki, dan mendokumentasikan desain geodatabase Anda


selamat datang di GIS Stack Exchange, dan terima kasih atas tipnya. Saya memformat ulang jawaban Anda agar lebih sesuai dengan standar Stack Exchange - saya menyertakan tautan dan kutipan tentang produk, dan menghapus info yang tidak tersedia.
Stephen Lead

2

Sejauh ini metode yang paling efisien yang saya temukan untuk mengubah nama bidang, mengubah urutan defaultnya, dan sejumlah hal lain adalah menggunakan Microsoft Access:

  1. Buat Geodatabase Pribadi baru
  2. Seret dan jatuhkan kelas fitur atau tabel ke p-gdb
  3. Buka di Akses dan:
    • Mengabaikan semua tabel yang dimulai GDB_, buka tabel dalam mode desain tabel
    • ganti nama, ubah urutan, tambah baru, dll.
  4. Seret dan lepas kembali ke gdb operasional nyata Anda

Catatan:

Selalu buat cadangan saat ini. Anda mengacaukan langsung dengan struktur GDB internal dan Anda dapat dengan mudah membuang data Anda dengan mengubah DB ke titik. ArcGIS tidak tahu bagaimana cara membacanya lagi.

Ada beberapa kata kunci yang dicadangkan di sisi ArcGIS yang tidak dapat digunakan untuk nama bidang. Access akan dengan senang hati membuat atau mengganti nama bidang dengan kata kunci ini, tetapi ketika Anda mengembalikannya, secara otomatis ditambahkan garis bawah. Jadi Currentmenjadi Current_. Juga ada catatan kata kunci Access reserved sebagian tumpang tindih .

Personal GDB memiliki batas ukuran file 2GB, sehingga ukuran total semua tabel dan kelas fitur dalam GDB tidak dapat melebihi itu.

Mungkin tergoda untuk selalu menggunakan GDB pribadi untuk proyek kecil (<2GB). Jangan. Kinerja sangat buruk dan ada perbedaan halus dalam sintaks SQL Access 'yang membuat Label Expressions, Definition Queries, dan sebagainya non-portable.


tentu saja, metode ini tidak disetujui secara resmi, dan jika terjadi kesalahan, Anda tidak akan dapat menghubungi Dukungan Teknis;)
Stephen Lead


2

Skrip Python ini adalah semacam metode "lakban" untuk melakukan ini. Ini terbatas pada 20 bidang tetapi dapat dengan mudah ditambahkan untuk memungkinkan menjalankannya untuk berapa pun bidang yang dimiliki data Anda.

Script dirancang untuk dijalankan sebagai alat skrip, jadi Anda perlu mengatur parameter dalam ArcCatalog.

Parameternya harus sebagai berikut:

  • InputFC - Kelas Fitur
  • Lokasi Keluaran - Ruang Kerja
  • Nama Keluaran - String
  • Field1 - Bidang
  • Field2 - Bidang
  • Sepanjang jalan ke Field20

Kode:

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

Saya menyadari ini bukan cara yang paling cantik atau paling efisien untuk melakukan ini tetapi itu sebenarnya bekerja cukup baik dan hanya butuh sekitar setengah jam untuk menulis. Saya menggunakan ini sepanjang waktu ketika saya perlu menyusun ulang bidang, dan itu tidak memerlukan Diagrammer atau Microsoft Access. Tentu saja jumlah maksimum bidang dapat menjadi masalah tetapi sekali lagi yang dapat disesuaikan dalam skrip.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.