Comment diviser l'attribut de texte par caractères dans QGIS?

7

Est-il possible de créer une nouvelle colonne, par exemple nommée "Test" et de stocker la première partie de la colonne "Nom" divisée par -?

Voir ci-dessous à quoi cela devrait ressembler:

exemple

Danny
la source
2
Ne pourriez-vous pas utiliser la .split()fonction de python ?
Branco

Réponses:

15

Oui, vous pouvez.

Utilisez la calculatrice de champ avec l'expression suivante:

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

La fonction strpos () renvoie la position d'index du premier caractère '-' et la fonction left () "coupe" la chaîne avant cette position.

entrez la description de l'image ici

Alexandre Neto
la source
Cela fonctionne, mais "Name" .split ('-') [0], par @Branco, pourrait être plus facile.
recurvata
Pouvez-vous l'utiliser dans la calculatrice de terrain? Sinon, vous devez utiliser la console python pour parcourir les fonctionnalités. Par rapport à cela, la calculatrice de champ semble plus simple. Il pourrait y avoir une meilleure expression en utilisant des expressions régulières.
Alexandre Neto
3
Vous ne pouvez pas l'utiliser dans la calculatrice déposée. La réponse fournie par Alexandre Neto est donc plus simple. Mais il vaut mieux l'utiliser avec "-1" pour éviter d'ajouter votre caractère à la sortie. Par exemple: left ("Name", strpos ("Name", ':') - 1). Sinon, vous vous retrouverez avec "3833-" et pas seulement "3833"
Losbaltica
4

Vous pouvez utiliser la calculatrice de champs avec l'expression suivante:

string_to_array("Nombre", ' ')

entrez la description de l'image ici

La fonction string_to_array () divise la chaîne en un tableau à l'aide du délimiteur fourni.

Si vous voulez une certaine position du tableau, vous pouvez ajouter la position et elle renverra la valeur. comme ça:

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

entrez la description de l'image ici

Jhon Galindo
la source
2

Solution possible au moyen de PyQGIS.

Supposons qu'il existe une couche de points appelée "some_points"avec sa table d'attributs, voir l'image ci-dessous.

contribution

Poursuivez Plugins > Python Console > Show Editoret collez le script ci-dessous

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 sortie cherchera

résultat


Références:

Taras
la source