¿Cómo dividir el atributo de texto por caracteres en QGIS?

7

¿Es posible hacer una nueva columna, por ejemplo llamada "Prueba" y almacenar la primera parte de la columna "Nombre" dividida por -?

Vea a continuación cómo debería verse:

ejemplo

Danny
fuente
2
¿No podrías usar la .split()función de Python ?
Branco

Respuestas:

15

Sí tu puedes.

Use la calculadora de campo con la siguiente expresión:

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

La función strpos () devolverá la posición de índice del primer carácter '-' y la función left () "recorta" la cadena antes de esa posición.

ingrese la descripción de la imagen aquí

Alexandre Neto
fuente
Eso funciona, pero "Name" .split ('-') [0], por @Branco, podría ser más fácil.
recurvata
¿Se puede usar en la calculadora de campo? De lo contrario, debe usar la consola de Python para iterar sobre las características. En comparación con eso, la calculadora de campo parece más sencilla. Puede haber una mejor expresión usando expresiones regulares.
Alexandre Neto
3
No puede usarlo en una calculadora archivada. Entonces, la respuesta proporcionada por Alexandre Neto es más directa. Pero es mejor usarlo con "-1" para evitar agregar su carácter a la salida. Por ejemplo: left ("Name", strpos ("Name", ':') - 1). De lo contrario, terminará con "3833-" no solo "3833"
Losbaltica
4

Puede usar la calculadora de campo con la siguiente expresión:

string_to_array("Nombre", ' ')

ingrese la descripción de la imagen aquí

La función string_to_array () divide la cadena en una matriz usando el delimitador proporcionado.

Si desea una posición de la matriz, puede agregar la posición y devolverá el valor. Me gusta esto:

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

ingrese la descripción de la imagen aquí

Jhon Galindo
fuente
2

Posible solución mediante PyQGIS.

Supongamos que hay una capa de punto llamada "some_points"con su tabla de atributos, vea la imagen a continuación.

entrada

Continúe Plugins > Python Console > Show Editory pegue el script a continuación

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

La salida se verá

resultado


Referencias

Taras
fuente