Sắp xếp lại các trường (vĩnh viễn) trong cơ sở dữ liệu địa lý tệp bằng ArcGIS Desktop?


18

Sử dụng ArcGIS 10.0, có thể sắp xếp lại các trường trong cơ sở dữ liệu địa lý tệp và duy trì thứ tự cho cơ sở dữ liệu không?

Chúng tôi đã xem xét xuất sang XML và viết một trình phân tích cú pháp để thay đổi thứ tự trường, sau đó tạo lại cơ sở dữ liệu mới từ XML. Đây dường như là một quá trình lao động.

Một ý tưởng khác là nhập định nghĩa trường hiện có vào Excel, sắp xếp lại chúng, xuất sang CSV, sau đó viết tập lệnh Python để tạo các trường này trong Cơ sở dữ liệu địa lý mới. Liệu một kịch bản như thế này tồn tại, trước khi chúng ta viết nó từ đầu?

Thật không may, ArcGIS Diagrammer dường như không hỗ trợ sắp xếp lại trường.

Có bất kỳ kịch bản hoặc hack nào chúng ta có thể sử dụng để đơn giản hóa quá trình này không?


8
Hy vọng bạn đã bỏ phiếu tại idea.arcgis.com/ideaView?id=0873000000087wgAAA :-)
PolyGeo

Bạn có thể sắp xếp lại các trường trong ArcGIS Diagrammer, chỉ cần đi vào bộ sưu tập các trường và chọn trường và nhấn mũi tên lên / xuống.
blah238

@ blah238 nếu bạn có thể thêm câu đó làm câu trả lời, tôi sẽ chấp nhận nó. Nó hoạt động rất tốt và được Esri hỗ trợ một nửa kể từ khi một trong những người của họ viết nó
Stephen Lead

1
đây là video trình diễn - maps.esri.com/Diagrammer/reorderfields.htm
Geog

Câu trả lời:


6

Như đã đề cập trong các bình luận, bạn có thể sắp xếp lại các trường với ArcGIS Diagrammer. Tôi đã đăng một bước tổng quát hơn trong câu trả lời này: Làm cách nào để cập nhật thuộc tính độ dài của trường lớp tính năng?


Cảm ơn. ArcGIS Diagrammer là một chút không ổn định - nó không chính xác sụp đổ, nhưng đôi khi nó cảm thấy được làm tại nhà. Nhưng để sửa đổi lược đồ, nó có vẻ như là lựa chọn tốt nhất.
Stephen chì

Bây giờ có thể làm việc qua 10.0. Nó đã cài đặt ok cho tôi trên Win7 x64 với ArcGIS 10.1, nhưng khi chạy, nó sẽ xuất hiện lỗi biên dịch Just in Time và thoát.
matt wilkie

1
Điều quan trọng cần lưu ý là ArcGIS Diagrammer không còn hoạt động với ArcGIS 10.3 trở lên.
Bản đồ Man

7

Để trả lời cho một câu hỏi khác, tôi đã nói rằng có thể sử dụng Thống kê Tóm tắt để thực hiện tương đương với PULLITEMS (cách nói cũ để sắp xếp lại các trường). Kỹ thuật đó chỉ hoạt động tốt trên Bảng nhưng có một kịch bản khác nói rằng nó hoạt động trên cả hai lớp tính năng và bảng.

Tôi cũng muốn giới thiệu các trường Trả lời để đặt hàng lại vĩnh viễn bằng công cụ ArcGIS Make Query Table? được lấy cảm hứng từ câu trả lời của @klewis cho câu hỏi này.


6

Phiên bản miễn phí của ET Geowizards sẽ làm điều này. Cơ bản -> Sắp xếp hình dạng. Tôi vừa thử nghiệm nó trên Cơ sở dữ liệu địa lý tệp v10 và nó hoạt động. Nó phải tạo ra một lớp tính năng mới mặc dù.


5

Nếu bạn không có Visio cho Sơ đồ - Tất cả các câu trả lời khác ở đây sẽ phá vỡ mọi liên kết. Tôi thấy điều này hoạt động tốt trong trường hợp của tôi:

  1. Xuất lược đồ cho toàn bộ db bằng Arccatalog (Xuất - XML) - Tôi không xuất dữ liệu, chỉ lược đồ
  2. Sử dụng một số dịch vụ Pretty Print trực tuyến để định dạng xml Mở tệp XML trong trình soạn thảo văn bản và Sắp xếp lại các trường theo ý muốn
  3. Nhập lại lược đồ để tạo cơ sở dữ liệu mới
  4. Tải lại dữ liệu bằng cơ sở dữ liệu gốc làm nguồn

Tôi đã bác bỏ rằng trong câu hỏi ban đầu là "một quá trình tốn nhiều công sức" - nhưng thực sự khi bạn đặt nó như thế, nó không có vẻ quá tệ;)
Stephen Lead

4

Bạn cần chạy MakeTableQuery từ bộ công cụ Lớp và Bảng xem để sắp xếp lại các trường. Từ tài liệu, Thứ tự của các trường trong danh sách trường cho biết thứ tự các trường sẽ xuất hiện trong lớp đầu ra hoặc chế độ xem bảng. Ngoài ra, nếu một cột Hình dạng được thêm vào danh sách trường, kết quả là một lớp; mặt khác, nó là một bảng xem. Điều này có sẵn với bất kỳ cấp giấy phép.


Chỉ tự hỏi nếu bạn đã kiểm tra điều này bởi vì tôi không thể thấy một cách để công cụ Make Query Table sắp xếp lại các trường - hộp thoại công cụ của nó dường như chỉ cho phép bạn quyết định xem có bao gồm các trường hay không.
PolyGeo

Vâng, tôi đã thử nghiệm điều này từ một kịch bản Python. Công cụ này dường như được thiết kế để kết hợp hoặc tham gia nhiều bảng. Tuy nhiên, tôi có thể tạo một bảng hoặc lớp đối tượng mới với các trường được sắp xếp lại bằng cách nhập một lớp đối tượng duy nhất.
klewis

Tôi phải thiếu một cái gì đó vì vậy đã đăng một câu hỏi mới ở đây gis.stackexchange.com/questions/32 310/ - bạn có thể chi tiết các bước ở đó cho tôi không?
PolyGeo

Tôi vừa trả lời câu hỏi mới bằng cách sử dụng không chỉ MakeQueryTable mà còn cả CopyFeatures và một số chỉnh sửa nhỏ mà tôi đã sử dụng Copy As Python Snippet vào cửa sổ Python.
PolyGeo

4

Với Công cụ Hợp nhất , bạn có thể dễ dàng sắp xếp lại các trường vĩnh viễn. Nó hoạt động với các bảng và các lớp tính năng. Việc sắp xếp lại có thể được thực hiện thông qua tập lệnh python và thậm chí với hộp thoại Tool (Bằng cách xóa một trường và thêm lại nó trong hộp thoại). Mặc dù đặt hàng lại qua hộp thoại không phải là một cách tiếp cận hoàn hảo.

Bạn nên sử dụng công cụ Hợp nhất một lần và sau đó sử dụng Copy As Python Snippet và sau đó thay đổi thủ công các thứ tự trường và sau đó dán mã python vào cửa sổ python.

Đây là tập lệnh python sử dụng Công cụ Hợp nhất để sắp xếp lại các trường (Sao chép từ đây )

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

SỬ DỤNG:

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

Điều đó dường như hoạt động tốt từ hộp thoại công cụ nơi lần đầu tiên tôi xóa một trường mà tôi muốn di chuyển đến cuối cùng, thêm một trường mới và sau đó thực hiện Thêm trường nhập. Tuy nhiên, như bạn đã nói, sử dụng nó trong Python dễ dàng hơn thông qua công cụ khi cần đặt hàng lại phức tạp hơn.
PolyGeo

3

Có một phần mở rộng miễn phí từ Esri có tên X-Ray chứa công cụ được tạo để sắp xếp lại các trường. Đã làm việc tuyệt vời cho chúng tôi và dễ sử dụng.

Bổ trợ X-Ray cho ArcCatalog có thể được sử dụng để phát triển, tinh chỉnh và ghi lại các thiết kế cơ sở dữ liệu địa lý của bạn


Chào mừng bạn đến với Sàn giao dịch GIS, và cảm ơn vì tiền boa. Tôi định dạng lại câu trả lời của bạn để phù hợp hơn với các tiêu chuẩn Stack Exchange - Tôi đã bao gồm một liên kết và một trích dẫn về sản phẩm và xóa thông tin không liên quan.
Stephen chì

2

Cho đến nay, phương pháp hiệu quả nhất mà tôi đã tìm thấy để đổi tên các trường, thay đổi thứ tự mặc định của chúng và một số thứ khác là sử dụng Microsoft Access:

  1. Tạo mới Cá Nhân Geodatabase
  2. Kéo và thả lớp tính năng hoặc bảng vào p-gdb
  3. Mở trong Access và:
    • Bỏ qua tất cả các bảng bắt đầu GDB_, mở các bảng trong chế độ thiết kế bảng
    • đổi tên, thay đổi thứ tự, thêm mới, v.v.
  4. Kéo và thả trở lại gdb hoạt động thực sự của bạn

Ghi chú:

Luôn luôn có một sao lưu hiện tại. Bạn đang nhầm lẫn trực tiếp với cấu trúc GDB nội bộ và bạn có thể dễ dàng xóa dữ liệu của mình bằng cách thay đổi DB thành điểm ArcGIS không biết cách đọc nó nữa.

Có một số từ khóa dành riêng ở phía ArcGIS không thể được sử dụng cho tên trường. Access sẽ vui vẻ tạo hoặc đổi tên các trường bằng các từ khóa này, nhưng khi bạn đưa chúng trở lại, chúng sẽ tự động có dấu gạch dưới. Vì vậy, Currenttrở thành Current_. Cũng có lưu ý các từ khóa dành riêng truy cập chồng chéo một phần .

GDB cá nhân có giới hạn kích thước tệp 2GB, do đó, tổng kích thước của tất cả các bảng và các lớp đối tượng trong GDB không thể vượt quá.

Việc sử dụng GDB cá nhân cho các dự án nhỏ (<2GB) có thể rất hấp dẫn. Đừng. Hiệu suất rất tệ và có sự khác biệt tinh tế trong cú pháp SQL của Access tạo ra Biểu thức nhãn, Truy vấn định nghĩa, v.v. không thể mang theo được.


tất nhiên, phương pháp này không bị xử phạt chính thức và nếu có sự cố xảy ra, bạn sẽ không thể gọi Hỗ trợ Công nghệ;)
Stephen Lead


2

Tập lệnh Python này là một phương pháp "băng keo" để thực hiện việc này. Nó được giới hạn ở 20 trường nhưng có thể dễ dàng được thêm vào để cho phép nó chạy trong nhiều trường mà dữ liệu của bạn có.

Tập lệnh được thiết kế để chạy như một công cụ tập lệnh, vì vậy bạn sẽ cần thiết lập các tham số trong ArcCatalog.

Các tham số nên như sau:

  • InputFC - Lớp tính năng
  • Vị trí đầu ra - Không gian làm việc
  • Tên đầu ra - Chuỗi
  • Trường1 - Trường
  • Trường2 - Trường
  • Tất cả các cách để Field20

Mã số:

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

Tôi nhận ra đây không phải là cách đẹp nhất hoặc hiệu quả nhất để làm điều này nhưng nó thực sự hoạt động khá tốt và chỉ mất khoảng nửa giờ để viết. Tôi sử dụng điều này mọi lúc khi tôi cần sắp xếp lại các trường và nó không yêu cầu Trình lập biểu đồ hoặc Microsoft Access. Tất nhiên số lượng trường tối đa có thể là một vấn đề nhưng một lần nữa có thể được tùy chỉnh trong tập lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.