Bagaimana cara membagi atribut teks dengan karakter di QGIS?

7

Apakah mungkin membuat kolom baru, misalnya bernama "Tes" dan menyimpan bagian pertama kolom "Nama" dibagi -?

Lihat di bawah bagaimana tampilannya:

contoh

Danny
sumber
2
Tidak bisakah Anda menggunakan .split()fungsi python ?
Branco

Jawaban:

15

Ya kamu bisa.

Gunakan kalkulator Bidang dengan ekspresi berikut:

left( "Name", strpos( "Name" ,'-'))

Fungsi strpos () akan mengembalikan posisi indeks dari karakter '-' pertama dan fungsi left () "memotong" string sebelum posisi itu.

masukkan deskripsi gambar di sini

Alexandre Neto
sumber
Itu berfungsi, tetapi "Name" .split ('-') [0], per @Branco, mungkin lebih mudah.
recurvata
Bisakah Anda menggunakannya dalam kalkulator lapangan? Kalau tidak, Anda perlu menggunakan konsol python untuk beralih ke fitur. Dibandingkan dengan itu, kalkulator lapangan terlihat lebih mudah. Mungkin ada ekspresi yang lebih baik menggunakan ekspresi reguler.
Alexandre Neto
3
Anda tidak dapat menggunakannya dalam kalkulator yang diajukan. Jadi jawaban yang diberikan oleh Alexandre Neto lebih lurus ke depan. Tetapi lebih baik menggunakannya dengan "-1" untuk menghindari menambahkan karakter Anda ke output. Misalnya: kiri ("Nama", strpos ("Nama", ':') - 1). Kalau tidak, Anda akan berakhir dengan "3833-" bukan hanya "3833"
Losbaltica
4

Anda dapat menggunakan kalkulator Bidang dengan ekspresi berikut:

string_to_array("Nombre", ' ')

masukkan deskripsi gambar di sini

Fungsi string_to_array () membagi string menjadi array menggunakan pembatas yang disediakan.

Jika Anda menginginkan beberapa posisi array, Anda dapat menambahkan posisi dan itu akan mengembalikan nilai. seperti ini:

string_to_array("Nombre", ' ')[2]

masukkan deskripsi gambar di sini

Jhon Galindo
sumber
2

Kemungkinan solusi melalui PyQGIS.

Mari kita asumsikan ada layer titik yang disebut "some_points"dengan tabel atribut itu, lihat gambar di bawah.

memasukkan

Lanjutkan dengan Plugins > Python Console > Show Editordan tempel skrip di bawah ini

from PyQt5.QtCore import QVariant

layer = iface.activeLayer()
if not layer.isValid():
    print("Layer failed to load!")

layer_provider = layer.dataProvider()
layer_provider.addAttributes([QgsField("Test", QVariant.String)])
layer.updateFields()

features=layer.getFeatures()

layer.startEditing()

for f in features:
    attrs = {2: f['info'].split('-')[0]}
    layer_provider.changeAttributeValues({f.id(): attrs})
layer.commitChanges()

python_console

Output akan terlihat

hasil


Referensi:

Taras
sumber