QGISで文字によってテキスト属性を分割する方法は?


7

たとえば「Test」という名前の新しい列を作成し、列「Name」の最初の部分を分割して保存することはでき-ますか?

以下のようになります。

例


2
Pythonの.split()関数を使用できませんでしたか?
ブランコ

回答:


15

はい、できます。

次の式でフィールド計算機を使用します。

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

strpos()関数は最初の「-」文字のインデックス位置を返し、left()関数はその位置の前の文字列を「トリム」します。

ここに画像の説明を入力してください


これは機能しますが、@ Brancoによると、 "Name" .split( '-')[0]の方が簡単かもしれません。
recurvata 2014

現場計算機で使えますか?それ以外の場合は、Pythonコンソールを使用して機能を繰り返す必要があります。それに比べると、フィールド計算機はより簡単に見えます。正規表現を使用したより良い表現があるかもしれません。
Alexandre Neto

3
フィールド電卓では使用できません。したがって、Alexandre Netoによって提供された答えはより簡単です。ただし、出力に文字を追加しないようにするには、「-1」と一緒に使用することをお勧めします。例:left( "Name"、strpos( "Name"、 ':')-1)。それ以外の場合は、「3833」だけでなく「3833-」で終了します
Losbaltica

4

次の式でフィールド計算機を使用できます。

string_to_array("Nombre", ' ')

ここに画像の説明を入力してください

string_to_array()関数は、指定された区切り文字を使用して文字列を配列に分割します。

配列の特定の位置が必要な場合は、位置を追加すると、値が返されます。このような:

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

ここに画像の説明を入力してください


2

PyQGISによる可能な解決策。

その"some_points"属性テーブルで呼び出されるポイントレイヤーがあると仮定します。下の画像を参照してください。

入力

Plugins > Python Console > Show Editor以下のスクリプトを続行して貼り付けます

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

出力は見ているでしょう

結果


参照:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.