Pertanyaan ini dibangun berdasarkan pertanyaan sebelumnya yang saya temui di gis.stackexchange: Bagaimana cara mengedit data atribut dengan menggunakan Regular Expressions?
Mungkin seseorang bisa mengarahkan saya ke arah yang benar?
Saya memiliki shapefile vektor garis kontur. Dalam tabel atribut saya sudah mengonversi bidang yang disebut KAKI yang terdiri dari data integer yang berisi nilai ketinggian ke bidang string yang disebut Label. Selain itu saya berhasil menambahkan 'ke akhir string sehingga ketika data diberi label akan dibaca sebagai kaki.
Hal berikutnya yang saya coba lakukan adalah memasukkan koma antara dua nilai pertama string hanya jika panjang string lebih besar dari 4, atau sehingga koma hanya akan muncul di antara ribuan dan ratusan digit di bidang Label. Panjangnya harus lebih besar dari 4 karena saya juga menghitung '
Kode saya sejauh ini adalah:
case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end
namun fungsi regexp_replace tampaknya tidak menerima variabel grup $ 1 $ 2 pada parameter ke-3 fungsi.
Saya telah melihat http://docs.python.org/2/library/re.html karena regex bidang-kalkulator berasal dari apa yang saya pahami berdasarkan penggunaan regex python tetapi belum bisa mengetahuinya. Mungkin yang saya coba lakukan belum memungkinkan dengan fungsi ini di bidang kalkulator di QGIS 1.8 di mac OSX. Atau lebih tepatnya sintaksis saya salah karena saya seorang programmer pemula dan agak baru untuk ekspresi reguler.
sumber
Jawaban:
Menggunakan dua fungsi string dalam kalkulator QGIS pada versi 2.6 Mac OS XI dapat mencapai ini. Berikut langkah-langkahnya:
Menggunakan bidang kalkulator membuat bidang baru yang merupakan tipe string dengan lebar yang relevan.
Jalankan ekspresi berikut untuk mengatur nilai bidang:
concat( format_number( "Field_name" , 0) , '\'')
Ini menciptakan kolom dengan string yang diformat seperti yang saya inginkan jadi misalnya nomor
2000
akan diformat2,000'
dengan trailing'
yang berarti kaki.sumber
QGIS telah membuat fungsi yang dipanggil
format_number
untuk mengatasi hal ini. Anda cukup lakukanformat_number(12345,0)
untuk mendapatkan12,345
.sumber
'
ke akhir nomor untuk mewakili "kaki". Apakah Anda dapat melakukan hal berikut dalam QGIS dengan fungsi ini?format_number(12345,0) + "'"
concat(tostring(format_number(12345,0)), "'")
. Anda harus terlebih dahulu mengubah angka yang diformat menjadi string menggunakantostring
fungsi dan kemudian menggunakanconcat
fungsi untuk melampirkan 'di akhir.concat( format_number( "Field_name" , 0) , '\'')
Anda dapat melakukan pengelompokan digit dengan mudah di Python. Inilah fungsi yang saya gunakan, yang saya pikir saya temukan di StackOverflow:
sumber
Untuk orang-orang yang lokalnya tidak sesuai dengan tampilan format yang diinginkan,
format_number
bukan solusi yang memadai. Sebagai contoh, pada sistem Perancis saya,format_number(2000)
selalu menampilkan2 000
(dengan spasi sebagai pemisah ribuan) secara terpisah dari pengaturan bahasa QGIS, meskipun saya kadang-kadang membutuhkan tampilan "gaya Inggris" - mis.2,000
.Dalam kasus seperti itu, pendekatan berikut (dan agak rumit) bekerja (setidaknya pada QGIS 2.18):
Tentu saja Anda dapat mengganti
','
dengan pemisah ribuan apa pun yang Anda inginkan. Perhatikan bahwa ungkapan ini hanya berfungsi dengan angka di bawah 1.000.000.sumber
Dalam QGIS, fungsi "format_number" di bawah menu string dalam kalkulator bidang memformat ulang angka untuk mencari pemisah spesifik dan tempat desimal.
sumber
Ini sedikit lebih rumit dari itu di QGis. Sesuai artikel ini , Anda harus membuat definisi fungsi Anda sendiri dengan Python, lalu mengimpornya ke QGis (ini dapat dilakukan secara otomatis saat startup). Ini mungkin terlihat rumit, tetapi Anda hanya perlu melakukannya sekali dan itu akan selalu ada!
Ini adalah fungsi yang saya gunakan, berdasarkan dmahr di atas. Tidak yakin bagaimana ini berkaitan dengan string, karena saya sedikit mengubah kode.
Anda kemudian menyimpannya di .qgis / python, mengimpor file ke QGis menggunakan konsol, maka itu akan muncul dalam fungsi "Python" di alat label.
Ekspresi yang saya gunakan adalah: ribuan_comma ("[field_name]", ',')
sumber
/Applications/QGIS.app/Contents/Resources/python/
?