Como dividir o atributo de texto por caracteres no QGIS?

7

É possível criar uma nova coluna, por exemplo, chamada "Teste" e armazenar a primeira parte da coluna "Nome" dividida por -?

Veja abaixo como deve ser:

exemplo

Danny
fonte
2
Você não poderia usar a .split()função python ?
Branco

Respostas:

15

Sim você pode.

Use a calculadora de campo com a seguinte expressão:

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

A função strpos () retornará a posição de índice do primeiro caractere '-' e a função left () "apara" a string antes dessa posição.

insira a descrição da imagem aqui

Alexandre Neto
fonte
Isso funciona, mas "Nome" .split ('-') [0], por @Branco, pode ser mais fácil.
precisa
Você pode usá-lo na calculadora de campo? Caso contrário, você precisará usar o console python para iterar sobre os recursos. Comparado a isso, a calculadora de campo parece mais direta. Pode haver uma expressão melhor usando expressões regulares.
Alexandre Neto
3
Você não pode usá-lo na calculadora arquivada. Portanto, a resposta fornecida por Alexandre Neto é mais direta. Mas é melhor usá-lo com "-1" para evitar adicionar seu caractere à saída. Por exemplo: left ("Nome", strpos ("Nome", ':') - 1). Caso contrário, você vai acabar com "3833-" não apenas "3833"
Losbaltica
4

Você pode usar a calculadora de campo com a seguinte expressão:

string_to_array("Nombre", ' ')

insira a descrição da imagem aqui

A função string_to_array () divide a string em uma matriz usando o delimitador fornecido.

Se você deseja alguma posição da matriz, pode adicionar a posição e ela retornará o valor. como isso:

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

insira a descrição da imagem aqui

Jhon Galindo
fonte
2

Possível solução por meio do PyQGIS.

Vamos assumir que existe uma camada de pontos chamada "some_points"com sua tabela de atributos, veja a imagem abaixo.

entrada

Prossiga Plugins > Python Console > Show Editore cole o script abaixo

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

A saída estará procurando

resultado


Referências:

Taras
fonte