Mendapatkan ArcGIS untuk memasukkan nol di bidang teks?

9

Saya memasukkan karakter dalam bidang teks yang pada dasarnya adalah 5 nomor ID. Saya perlu angka nol di depan untuk dimasukkan ke dalam nilai, tetapi setiap kali saya memasukkan atau menghitung bidang, angka nol di depan dihapus (meskipun properti bidang mengatakan itu adalah bidang teks 5 karakter).

Bagaimana cara memaksa bidang untuk memasukkan nol di depan?

CJSF
sumber

Jawaban:

12

Python memiliki built-in untuk memimpin nol. Gunakan str.zfill()untuk menambahkan nol di awal ke dalam bidang teks.

my_string = "1"
print my_string.zfill(2)   # Prints 01

my_string = "1000"
print my_string.zfill(2)   # Prints 1000

(contoh dari https://stackoverflow.com/a/21620624/5754917 )

Jadi, dalam kalkulator bidang, Anda hanya perlu menentukan nama bidang dengan ID Anda dan kemudian mengisi dengan nol

str(!myfield!).zfill(5)

masukkan deskripsi gambar di sini

Dan hasil akhirnya:

masukkan deskripsi gambar di sini

Ingatlah untuk mengganti kalkulator bidang ke "Python Parser"

Midavalo
sumber
OK, sepertinya ini sangat sederhana. Saya akan mencobanya! Terima kasih.
CJSF
Baik! Ini persis apa yang saya butuhkan dan sangat mudah, saya hampir malu! Terima kasih banyak!
CJSF
3

Cukup masukkan teks Anda dalam tanda kutip. Kutipan ganda jika Anda berada dalam mode VB Script, dan double atau tunggal jika dalam mode Python.

Untuk menjelaskan: Saat Anda baru saja memasukkan angka, Anda memberi Kalkulator Bidang nilai dalam bentuk bilangan bulat, yang akan dikonversi menjadi string untuk Anda untuk memasukkannya ke dalam bidang tipe string. Untuk bilangan bulat, nol di depan tidak memiliki nilai dan tidak ada artinya, sehingga tidak ada. Jika Anda memasukkannya ke dalam tanda kutip, Anda malah memberinya string, yang sudah merupakan tipe data yang benar, sehingga dibiarkan sendiri.

Ini juga mengasumsikan bahwa bidang ini sebenarnya bertipe "Teks". Mungkin disetel ke Long atau Short Integer, itu juga akan menyebabkan perilaku ini.

PhilippNagel
sumber
Terima kasih, saya kira ini juga akan berhasil. Tetapi pada akhirnya saya perlu mengambil nilai tanpa nol terkemuka dari bagian bidang lain sebagai bagian dari proses semi-otomatis yang lebih besar.
CJSF
Jika Anda dapat mengedit pertanyaan Anda dan menambahkan lebih banyak detail dan seluruh kode yang Anda miliki saat ini, kami mungkin dapat membantu Anda lebih baik. Kedengarannya seperti Anda baru saja menulis nilai secara manual ke sekelompok baris.
PhilippNagel
2

Anda dapat menggunakan blok kode Python .

Tambahkan definisi fungsi ini dalam blok kode:

def addZero(value):
    if value <= 9:
        output = '0000' + str(value)
    elif value <= 99:
        output = '000' + str(value)
    elif value <= 999:
        output = '00' + str(value)
    elif value <= 9999:
        output = '0' + str(value)
    return output

Anda dapat menggunakannya sebagai:

addZero(!Field!) # numeric field

atau

addZero(123) # for example
aldo_tapia
sumber
Anda pasti ingin membuat definisi <= untuk batas atas :)
MaryBeth
@ MaryBeth ya, salahku. Diedit
aldo_tapia
2

Seperti disebutkan dalam jawaban lain, Anda perlu memastikan nomor Anda dikonversi menjadi string.

Jika Anda kehilangan 0 atau memilikinya dalam bidang angka, buat lebar kolom string 5, cukup ketik perintah Python berikut:

str(!MYFIELD!).zfill(5)
gisnside
sumber
Dimiliki oleh @Midavalo! Saya terlalu lambat: D
gisnside