Wie teile ich Textattribute in QGIS nach Zeichen?

7

Ist es möglich, eine neue Spalte mit dem Namen "Test" zu erstellen und den ersten Teil der Spalte "Name" zu teilen, durch den geteilt wird -?

Sehen Sie unten, wie es aussehen sollte:

Beispiel

Danny
quelle
2
Könnten Sie nicht die Python- .split()Funktion verwenden?
Branco

Antworten:

15

Ja, du kannst.

Verwenden Sie den Feldrechner mit dem folgenden Ausdruck:

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

Die Funktion strpos () gibt die Indexposition des ersten '-' Zeichens zurück und die Funktion left () "schneidet" die Zeichenfolge vor dieser Position.

Geben Sie hier die Bildbeschreibung ein

Alexandre Neto
quelle
Das funktioniert, aber "Name" .split ('-') [0] per @Branco könnte einfacher sein.
recurvata
Können Sie es im Feldrechner verwenden? Andernfalls müssen Sie die Python-Konsole verwenden, um die Funktionen zu durchlaufen. Im Vergleich dazu sieht der Feldrechner einfacher aus. Es könnte einen besseren Ausdruck geben, wenn reguläre Ausdrücke verwendet werden.
Alexandre Neto
3
Sie können es nicht im abgelegten Rechner verwenden. Die Antwort von Alexandre Neto ist also einfacher. Es ist jedoch besser, es mit "-1" zu verwenden, um zu vermeiden, dass Ihr Zeichen zur Ausgabe hinzugefügt wird. Zum Beispiel: left ("Name", strpos ("Name", ':') - 1). Andernfalls erhalten Sie "3833-", nicht nur "3833"
Losbaltica,
4

Sie können den Feldrechner mit dem folgenden Ausdruck verwenden:

string_to_array("Nombre", ' ')

Geben Sie hier die Bildbeschreibung ein

Die Funktion string_to_array () teilt den String mit dem angegebenen Trennzeichen in ein Array auf.

Wenn Sie eine Position des Arrays wünschen, können Sie die Position hinzufügen, und der Wert wird zurückgegeben. so was:

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

Geben Sie hier die Bildbeschreibung ein

Jhon Galindo
quelle
2

Mögliche Lösung mittels PyQGIS.

Nehmen wir an, es gibt eine Punktebene "some_points"mit der Attributtabelle (siehe Abbildung unten).

Eingang

Fahren Sie fort Plugins > Python Console > Show Editorund fügen Sie das folgende Skript ein

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

Die Ausgabe wird suchen

Ergebnis


Verweise:

Taras
quelle