স্ট্রিং ফিল্ড থেকে প্রতিটি ডিলিমিটারের আগে নতুন ক্ষেত্রগুলিতে পাঠ্য বিভক্ত করা


9

আমি বিন্দু দিয়ে বিসর্জনিত একটি স্ট্রিং ফিল্ড থেকে পাঠ্য ডেটা বের করার চেষ্টা করছি এবং ফিল্ড ক্যালকুলেটরটি ব্যবহার করে এটি নতুন ক্ষেত্রগুলিতে স্থাপন করছি।

আমি এই পাইথন ফাংশনটি ব্যবহার করছি ( কিউজিআইএস-এর আগে / কীভাবে পাঠ্য উত্তোলন করতে পারি? ):

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def func(value1, feature, parent):
    return value1.split('.')[0]

এটি প্রথম বিন্দুর আগে সমস্ত পাঠ্য ফেরত দেয়। এখন আমি ভাবছি কীভাবে এটির জন্য প্রতিটি বিস্মৃত পাঠ্য সারি আলাদা ক্ষেত্রের জন্য ফাংশনটি লিখবেন to

আগে:

টেবিল

পরে:

টেবিল

উত্তর:


10

সম্পাদনা : জেউইউজের কিছু মন্তব্য অনুসারে আমি উত্তরটি সম্পাদনা করেছি


আপনি পাইথন কনসোল থেকে একটি সাধারণ স্ক্রিপ্ট চালাতে পারেন । প্রথমত, Plugins> থেকে পাইথন কনসোলটি খুলুন Python Consoleএবং এর জন্য বোতামটি সক্রিয় করুন Editor:

এখানে চিত্র বর্ণনা লিখুন

তারপরে, যেখানে আপনার ডেটা সংরক্ষণ করা হয়েছে সেই বস্তুটি (একটি ভেক্টর, একটি টেবিল ইত্যাদি) লোড করুন।

আপনি এটি সম্পন্ন করার পরে নিম্নলিখিত কোডটি অনুলিপি করুন Editor:

layer = iface.activeLayer()
fieldindex = layer.fieldNameIndex("Tasks")
layer.startEditing()
for feat in layer.getFeatures():
    if feat[fieldindex]:
        fields = feat[fieldindex].split('.')
        for i in range(1, len(fields)):
            feat[fieldindex + i] = fields[i - 1]
            layer.updateFeature(feat)
    else:
        continue
layer.commitChanges()

এবং তারপরে এটি চালান:

এখানে চিত্র বর্ণনা লিখুন

আপনি এটি পাবেন:

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি পছন্দ করেন তবে আপনি অবশ্যই উপরের কোডটি ফিল্ড ক্যালকুলেটরের জন্য পাইথন ফাংশন হিসাবে ব্যবহার করতে পারেন (আমি দেখেছি যে আপনি এটি ইতিমধ্যে জানেন কীভাবে)।


আমি ত্রুটি বার্তাটি পেয়েছি: এক্সকিফিল (u'c: /users/jonwes~1/appdata/local/temp/tmpt2lphm.py'.encode ('এমবিসিএস')) ট্রেসব্যাক (সর্বশেষতম কল): ফাইল "<ইনপুট> ", লাইন 1, <মডুল> ফাইল" সি: / ইউজারস / জোনওয়াস~ 1/appdata/local/temp/tmpt2lphm.py ", লাইন 6, <মডুল> কীর্তিতে [" এটিজি 2 "] = ক্ষেত্রসমূহ [2] সূচিপত্র : তালিকা সূচকের বাইরে নেই
JWes

1
এটি ঘটে কারণ আপনার সম্ভবত কিছু স্ট্রিং রয়েছে যা আপনি সরবরাহ করেছেন এমন নমুনার চেয়ে আলাদা। ত্রুটির অর্থ হল তালিকার নং 2 পজিশনে কোনও মান সঞ্চিত নেই fields। আমি কি সঠিক?
এমগ্রি

হ্যাঁ আপনি ঠিক বলেছেন, মূলত কিছু বৈশিষ্ট্যগুলিতে অন্যান্য বৈশিষ্ট্যগুলির চেয়ে আরও বেশি বিন্দুর দ্বারা সীমিত আরও বেশি তথ্য থাকে।
জেওয়েস

1
আপনি যদি কোনও ন্যূনতম নমুনা ফাইল সরবরাহ করতে পারেন (যেখানে আমি দেখতে পারি যে কীভাবে আপনার ডেটা কাঠামোবদ্ধ হয়), আমার কোডটি আপনার ক্ষেত্রে মানিয়ে নিতে সক্ষম হওয়া উচিত। অন্যথায়, নিজের অবস্থাতেই শর্তাবলীর পুনরাবৃত্তি করা উচিত কারণ কোনও গাইডলাইন ছাড়াই পরিচালনা করার জন্য অনেকগুলি সম্ভাবনা রয়েছে।
এমগ্রি

আমি তথ্যের কাঠামোর আরও বিশদ সহ মূল প্রশ্নটি আপডেট করব!
জেওয়েস

6

এটি খুব দক্ষ পদ্ধতি নয় তবে এটি আমি আগে ব্যবহার করেছি। নিশ্চিত করুন Field2এবং Field3বিদ্যমান হন তারপরে নিম্নলিখিতগুলির মতো কিছু ব্যবহার করুন:

from qgis.core import *
from qgis.gui import *
import re

@qgsfunction(args='auto', group='Custom')
def func(field, feature, parent):
    # Get active layer
    layer = qgis.utils.iface.activeLayer()
    # Get field indices
    idx_2 = layer.fieldNameIndex('Field2')
    idx_3 = layer.fieldNameIndex('Field3')
    # Extract string values
    first_value = [w for w in re.split('\W', field) if w][0]
    second_value = [w for w in re.split('\W', field) if w][1]
    third_value = [w for w in re.split('\W', field) if w][2]    
    # Update values in fields
    layer.changeAttributeValue(feature.id(), idx_2, second_value)
    layer.changeAttributeValue(feature.id(), idx_3, third_value)
    return first_value

উদাহরণ :

  1. এখানে একটি বৈশিষ্ট্য রয়েছে:

    বৈশিষ্ট্য সারণী

  2. তারপরে আপনার স্ক্রিপ্টটি সংরক্ষণ করা হয়ে Field1গেলে, এক্সপ্রেশনটি আপডেট করতে এবং ব্যবহার করতে নির্বাচন করুন :

    func("Field1")

    ফাংশন সম্পাদক

  3. ফলাফল:

    ফলাফল


1
আমাদের একই ধারণা ছিল! =)
মগরি

1
@ হাও টুআইএনকিজিআইএস - সত্যই যদিও আমি আপনার পদ্ধতিটিকে অনেক সহজ বলে পছন্দ করি তবে :)
জোসেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.