সংখ্যার ক্ষেত্র থেকে "1,000" "এর মতো লেবেল ফর্ম্যাট করা তৈরি করছেন?


9

এই প্রশ্নটি আমি পূর্ববর্তী প্রশ্নের উপর ভিত্তি করেই gis.stackexchange এ এসেছি: নিয়মিত এক্সপ্রেশন ব্যবহার করে কীভাবে সহজেই অ্যাট্রিবিউট ডেটা সম্পাদনা করা যায়?

সম্ভবত কেউ আমাকে সঠিক দিকে নির্দেশ করতে পারে?

আমার কাছে কনট্যুর লাইনের একটি ভেক্টর শেফফাইল রয়েছে। অ্যাট্রিবিউট টেবিলটিতে আমি ইতিমধ্যে FEET নামক একটি ক্ষেত্রকে উচ্চ স্তরের মান সমন্বিত পূর্ণ লেবেল নামের একটি স্ট্রিং ফিল্ডে রূপান্তর করেছি। অতিরিক্তভাবে আমি স্ট্রিংয়ের শেষে একটি সাফল্যের সাথে যুক্ত করেছি যাতে ডেটা যখন লেবেল করা হয় তখন এটি পা হিসাবে পঠিত হয়।

পরবর্তী কাজটি করার চেষ্টা করছি হ'ল স্ট্রিংয়ের দৈর্ঘ্য 4 এর চেয়ে বেশি হলে স্ট্রিংয়ের প্রথম দুটি মানের মধ্যে একটি কমা প্রবেশ করানো বা লেবেল ক্ষেত্রে হাজার এবং শত সংখ্যার মধ্যে একটি কমা প্রদর্শিত হবে। দৈর্ঘ্য 4 এর বেশি হতে হবে কারণ আমিও গণনা করছি '

এখন পর্যন্ত আমার কোডটি হ'ল:

case when  length( "Label") >4  then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end

তবে regexp_replace ফাংশনটি ফাংশনের তৃতীয় প্যারামিটারে গ্রুপ ভেরিয়েবলগুলি $ 1 $ 2 গ্রহণ করবে বলে মনে হচ্ছে না।

আমি http://docs.python.org/2/library/re.html দেখেছি যেহেতু ফিল্ড-ক্যালকুলেটর রেজেক্স পাইথনের ব্যবহারের ভিত্তিতে অজগর ব্যবহারের উপর ভিত্তি করে আমি বুঝতে পেরেছি তবে এটি বের করতে সক্ষম হয় নি। সম্ভবত আমি যা করার চেষ্টা করছি তা ম্যাক ওএসএক্সে কিউজিআইএস 1.8-তে ফিল্ড ক্যালকুলেটরে এই ফাংশন দিয়ে এখনও সম্ভব হয়নি। বা সম্ভবত আরও বেশি সম্ভবত আমার বাক্য গঠন ভুল কারণ আমি একজন শিক্ষানবিশ প্রোগ্রামার এবং নিয়মিত প্রকাশে কিছুটা নতুন।


এটি কি কোডিং করতে হবে - একটি সহজ উপায় (এক্সেলে, বা অনুরূপ) কোনও নতুন কলাম তৈরি করা উচিত নয় যা এতে লেবেলযুক্ত ছিল যাতে আপনি এটি কীভাবে চেয়েছিলেন - আপনাকে ব্যবহার করতে হবে কেবল কয়েকটি কন্ডেনেট কমান্ড।
অ্যান্ড্রু টাইস

হ্যাঁ সমস্যা সমাধানের এটি একটি উপায় হবে তবে আমি কিউআইজিএস থেকে বা পাইথন দিয়ে সমাধান করার চেষ্টা করছি।
ক্লেনেরিক

@ ক্রিশেনরিক - আমার উত্তর কি আপনার জন্য সমাধান করেছে?
স্টিভ_কে

@ স্টেভ_কে এখনও চেষ্টা করে দেখার সময় নেই, খুব তাড়াতাড়ি করা হবে এবং আপনাকে জানাতে হবে। আপনার সাহায্যের জন্য ধন্যবাদ!
ক্লেনেরিক

উত্তর:


8

২.6 সংস্করণে কিউআইজিএস ক্যালকুলেটরে দুটি স্ট্রিং ফাংশন ব্যবহার করে ম্যাক ওএস একাদশ এটি সম্পাদন করতে সক্ষম হয়েছিল। পদক্ষেপ এখানে:

  1. ক্ষেত্র ক্যালকুলেটর ব্যবহার করে একটি নতুন ক্ষেত্র তৈরি করুন যা প্রস্থের প্রাসঙ্গিক স্ট্রিং টাইপ।

  2. ক্ষেত্রের মান নির্ধারণ করতে নিম্নলিখিত এক্সপ্রেশনটি চালান:
    concat( format_number( "Field_name" , 0) , '\'')

এটি যেমনটি চেয়েছিল তেমন স্ট্রিমযুক্ত একটি কলাম তৈরি করেছে উদাহরণস্বরূপ সংখ্যাটি পাদদেশে দাঁড়ানো ট্রিলিংয়ের সাথে 2000ফর্ম্যাট হবে ।2,000''


6

কিউজিআইএস এটিকে সম্বোধন format_numberকরার জন্য একটি ফাংশন তৈরি করেছে । আপনি সহজভাবে format_number(12345,0)পেতে 12,345


এটা ভাল সংবাদ. যদিও আমার প্রশ্নের অংশটিতে '"ফুট" উপস্থাপনের জন্য সংখ্যার শেষে একটি যুক্ত করা জড়িত । আপনি কি এই ফাংশনটি দিয়ে কিউজিআইএস-এ নিম্নলিখিতটি করতে সক্ষম হবেন? format_number(12345,0) + "'"
ক্লেনেরিক

আমি বিশ্বাস করি উত্তরটি হবে concat(tostring(format_number(12345,0)), "'")। আপনাকে প্রথমে tostringফাংশনটি ব্যবহার করে ফর্ম্যাট করা নম্বরটি স্ট্রিংয়ে পরিণত করতে হবে এবং তারপরে concatশেষে 'সংযুক্ত করতে ফাংশনটি ব্যবহার করতে হবে।
মিনহ মাই

বোধগম্য হয়, এটি আমার concat( format_number( "Field_name" , 0) , '\'')
উত্তরটিতে

3

পাইথনে আপনি সহজে ডিজিট গ্রুপিং করতে পারেন। এখানে আমি একটি ফাংশন ব্যবহার করেছি যা আমি মনে করি যা আমি স্ট্যাক ওভারফ্লোতে পেয়েছি:

def digitgroup(n, sep = ','):
    if n == "": n = 0
    s = str(n)[::-1]
    groups = []
    i = 0
    while i < len(s):
        groups.append(s[i:i+3])
        i += 3
    return sep.join(groups)[::-1]

পরামর্শের জন্য ধন্যবাদ, dmahr। তবে কিউজিআইএসে এই ফাংশনটি কীভাবে প্রয়োগ করা যায় সে সম্পর্কে আমি অস্পষ্ট। আমি ক্ষেত্রের ক্যালকুলেটর এক্সপ্রেশনটিতে এই ফাংশনটি কেটে পেস্ট করার চেষ্টা করেছি এবং আমার ক্ষেত্রের নামের সাথে এন সেট করে দিচ্ছি তবে ভাগ্য নেই। ফিল্ড ক্যালকুলেটরের বাইরে কিউজিসে পাইথন স্ক্রিপ্টিং বাস্তবায়নের কোনও উপায় আছে?
ক্লেনেরিক

3

এমন লোকদের জন্য যাদের লোকেলগুলি পছন্দসই বিন্যাস প্রদর্শনে ফিট করে না, format_numberএটি পর্যাপ্ত সমাধান নয়। উদাহরণস্বরূপ, আমার ফরাসি সিস্টেমে QGIS ভাষা সেটিংস থেকে সর্বদা স্বাধীনভাবে হাজার হাজার বিভাজক হিসাবে format_number(2000)প্রদর্শিত হয় 2 000, যদিও আমার মাঝে মাঝে "ইংলিশ-স্টাইল" প্রদর্শন প্রয়োজন - যেমন। 2,000

এই ক্ষেত্রে, নিম্নলিখিত (এবং কিছুটা জটিল) পদ্ধতির কাজ করে (কমপক্ষে কিউজিআইএস ২.১18 তে):

if (your_field > 1000,
  concat(
    floor(your_field/1000),
    ',',
    your_field-1000*floor(your_field/1000)
  ),
  your_field
)

আপনি অবশ্যই ','হাজার হাজার বিভাজক যা চান তার সাথে প্রতিস্থাপন করতে পারেন। নোট করুন যে এই এক্সপ্রেশনটি কেবলমাত্র 1,000,000 এর চেয়ে কম সংখ্যার সাথে কাজ করে।


2

কিউজিআইএস-তে, ক্ষেত্র ক্যালকুলেটরে স্ট্রিং মেনুটির নীচে "format_number" ফাংশনটি নির্দিষ্ট বিভাজক এবং দশমিক স্থানগুলিতে লোকাল সংখ্যার পুনরায় ফর্ম করে।


মিন মাইয়ের উত্তরে আমার মন্তব্য দেখুন।
ক্লেনেরিক

1

কিউজিসের চেয়ে এটি কিছুটা জটিল। অনুযায়ী এই নিবন্ধটি , আপনি পাইথন আপনার নিজের ফাংশন সংজ্ঞা তৈরি করতে, তারপরে QGis মধ্যে ইম্পোর্ট (এই সিস্টেমের প্রারম্ভে সম্পন্ন করা যেতে পারে) আছে। এটি কৃপণ বলে মনে হতে পারে তবে আপনাকে একবার এটি করা দরকার এবং এটি সর্বদা থাকবে!

এটি উপরের dmahr এর উপর ভিত্তি করে আমি ব্যবহৃত ফাংশন। আমি কীভাবে কোডটি কিছুটা সংশোধন করেছিলে এটি স্ট্রিংগুলির সাথে কীভাবে আচরণ করে তা নিশ্চিত নয়।

from qgis.utils import qgsfunction
from qgis.core import QGis

@qgsfunction(2, "Python") # number of arguments
def thousands_separator(values, feature, parent): # values are the arguments passed in
    # this is the documentation for your function which you will see in QGis
    """
    Adds a separator to values over 1000\n        
    Parameters: (n, sep) \n                   
    n = expression_field \n
    sep = desired separator (default is ",")
    """ 
    number = values[0]                        # the first argument (which in the
    separator = values[1]                     # labelling case is a field name
    if separator == '':
        separator = ','
    s = str(number)[::-1]
    groups = []
    i = 0
    while i < len(s):
        groups.append(s[i:i+3])
        i += 3
    return separator.join(groups)[::-1]

তারপরে আপনি এটি .qgis / পাইথনে সংরক্ষণ করুন, কনসোলটি ব্যবহার করে ফাইলটি কিউজিসে আমদানি করুন, তারপরে এটি লেবেল সরঞ্জামটিতে "পাইথন" ফাংশনে প্রদর্শিত হবে।

আমি যে এক্সপ্রেশনটি ব্যবহার করেছি তা হ'ল: হাজার_কোমা ("[ক্ষেত্রের নাম]", ',')


এছাড়াও, আপনি কোন সংস্করণটি ব্যবহার করছেন তা আমি দেখতে পাইনি - আপনার এই কাজটি করার জন্য আপনার 2.0 তে আপগ্রেড করা উচিত
স্টেভ_কে

হাই, আপনাকে ধন্যবাদ এবং দেরিতে প্রতিক্রিয়ার জন্য দুঃখিত। আমি v2.6 ম্যাক ওএস এক্স 10.9.5 এ আছি পাইথন ফাইলটি ঠিক কোথায় রাখি? আমি কোথাও ধরে নিই /Applications/QGIS.app/Contents/Resources/python/?
ক্লেনেরিক

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