Làm cách nào để phân chia thuộc tính văn bản theo các ký tự trong QGIS?


7

Có thể tạo một cột mới, ví dụ có tên là "Thử nghiệm" và lưu trữ phần đầu tiên của cột "Tên" được chia theo -?

Xem bên dưới nó trông như thế nào:

thí dụ


2
Bạn không thể sử dụng .split()chức năng của python ?
Branco

Câu trả lời:


15

Có bạn có thể.

Sử dụng máy tính Trường với biểu thức sau:

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

Hàm strpose () sẽ trả về vị trí chỉ mục của ký tự '-' đầu tiên và hàm left () "cắt" chuỗi trước vị trí đó.

nhập mô tả hình ảnh ở đây


Điều đó hoạt động, nhưng "Tên" .split ('-') [0], mỗi @Branco, có thể dễ dàng hơn.
recurvata

Bạn có thể sử dụng nó trong máy tính trường? Nếu không, bạn cần sử dụng bàn điều khiển python để lặp lại các tính năng. So với đó, máy tính trường có vẻ đơn giản hơn. Có thể có biểu thức tốt hơn bằng cách sử dụng biểu thức thông thường.
Alexandre Neto

3
Bạn không thể sử dụng nó trong máy tính nộp. Vì vậy, câu trả lời được cung cấp bởi Alexandre Neto là thẳng thắn hơn. Nhưng tốt hơn là sử dụng nó với "-1" để tránh thêm charater của bạn vào đầu ra. Ví dụ: left ("Tên", strpose ("Tên", ':') - 1). Nếu không, bạn sẽ kết thúc với "3833-" không chỉ là "3833"
Losbaltica

4

Bạn có thể sử dụng máy tính Trường với biểu thức sau:

string_to_array("Nombre", ' ')

nhập mô tả hình ảnh ở đây

Hàm string_to_array () chia chuỗi thành một mảng bằng cách sử dụng dấu phân cách được cung cấp.

Nếu bạn muốn một vị trí nào đó của mảng, bạn có thể thêm vị trí đó và nó sẽ trả về giá trị. như thế này:

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

nhập mô tả hình ảnh ở đây


2

Giải pháp có thể bằng PyQGIS.

Giả sử có một lớp điểm được gọi "some_points"với bảng thuộc tính của nó, xem hình ảnh bên dưới.

đầu vào

Tiếp tục Plugins > Python Console > Show Editorvà dán đoạn script bên dưới

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

Đầu ra sẽ được tìm kiếm

kết quả


Người giới thiệu:

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.