ArcGIS फील्ड कैलकुलेटर के पायथन पार्सर का उपयोग करके डबल उद्धरण खोजें / बदलें?


16

मैं एक पता क्षेत्र में दोहरे उद्धरण चिह्नों को बाहर निकालने के लिए फ़ील्ड कैलकुलेटर (ArcMap 10.0) का उपयोग करने की कोशिश कर रहा हूं (मैंने उन्हें वहां नहीं रखा, मुझे विश्वास है)। मैंने कई भस्मारती की कोशिश की है, लेकिन अभी भी गणना के साथ जमीन पर उतरने में असमर्थ हूं। हाँ, दोनों फ़ील्ड स्ट्रिंग हैं, और दोनों स्वीकार्य लंबाई के हैं।

यह गणना: नमूना गणना

इस में परिणाम:

विफल

परिणाम संवाद में इस त्रुटि संदेश के साथ:

त्रुटि संदेश

और मैं दोहराता हूं, मैंने उन्हें वहां नहीं रखा।


1
तो आप उन्हें अपने परीक्षण में उद्धरणों के साथ कॉपी कर रहे हैं, क्या आपने पहले से ही कुछ के साथ उद्धरणों को छीनने का प्रयास किया है!testing![1:len(!testing!)-1]
रॉय

आपके द्वारा प्रदान किया गया स्निपेट उसी संदेश के साथ मर जाता है।
वाल्वलंडन

जवाबों:


16

मैंने पाया है कि 10.0 क्षेत्र में कैलकुलेटर काफी अजीब है।

लेकिन मैं इसे पाने में कामयाब रहा हूं। मुख्य विचार एकल उद्धरण के साथ फ़ील्ड नाम को संलग्न करना है।

उदाहरण। लगता है हम क्षेत्रों डालते हैं text1और text2text2अभिव्यक्ति के साथ फ़ील्ड की गणना करने के बजाय !text1!, जो संभवतः विफल हो जाएगा, इसे आज़माएं '!text1':। जैसा कि आप देख रहे हैं कि मैं यहाँ सिंगल कोट्स का उपयोग कर रहा हूँ।

तो, अपने काम पर वापस। प्री-लॉजिक स्क्रिप्ट कोड का उपयोग करना अधिक स्पष्ट होगा:

def calc(value):
    return value.replace('"', '')

अभिव्यक्ति होगी:

calc('!text1!')

मुझे उम्मीद है कि यह आपके लिए काम करेगा।

मैंने आगे प्रयोग नहीं किया है, लेकिन मुझे लगता है कि ऐसा अजीब व्यवहार होता है क्योंकि फ़ील्ड गणना को आर्कटबॉक् ट टूल में कॉल किया जाता है CalculateField_managementऔर अभिव्यक्ति को एक पैरामीटर के रूप में प्रदान किया जाता है (संभवतः इसके अलावा एकल या दोहरे उद्धरण के साथ संलग्न)।

अपडेट करें:

यदि क्षेत्र के मूल्यों में एकल उद्धरण हैं, तो मेरा पिछला समाधान विफल हो जाएगा text1

अब मैं इसे प्राप्त करने में कामयाब रहा हूँ जब किसी विशेषता में किसी भी मूल्य के अंदर वर्ण 'और "(एकल और दोहरे उद्धरण) दोनों हों text1

यहां अभिव्यक्ति है, जो मूल स्ट्रिंग लौटाएगा, दोनों प्रकार के उद्धरणों का समर्थन करेगा:

'''!text1!'''[1:-1]

आपके कार्य के लिए इसे (प्री-लॉजिक स्क्रिप्ट कोड के बिना) बढ़ाया जा सकता है:

'''!text1!'''[1:-1].replace('"', '')

ठीक है, तुम मेरी आशाओं को पूरा कर लो, लेकिन यह मेरे लिए काम नहीं करता है। '!testing!'
21:39 पर

हम्म, यह मेरे 10.0sp4 पर काम किया। यह हो सकता है क्योंकि आपके क्षेत्र में कहीं न कहीं वास्तव में एक ही उद्धरण है ... क्या आपने पायथन लिपि में UpdateCursor का उपयोग करने पर विचार किया है?
एलेक्स मार्कोव

2
आपको पता है कि? तुम सही हो, यह काम करता है। मैं अपने 3:00 जूस नहीं था। तुम जीते।
वाल्वलोनडॉन

मैं एक ही उद्धरण के साथ समस्या को हल करने में कामयाब रहा हूं। उत्तर के लिए मेरे अद्यतन की जाँच करें।
एलेक्स मार्कोव

प्री-लॉजिक स्क्रिप्ट कोड एक स्क्रिप्ट के भीतर उपयोग किए जाने पर ठीक काम करता है - बहुत धन्यवाद
मेरिलो

10

यदि आप 10.1 संस्करण का उपयोग कर रहे हैं और आप सुनिश्चित हैं कि आप दोहरे उद्धरण चिह्नों के हर उदाहरण से छुटकारा पाना चाहते हैं:

!testing!.replace("\"","")

अगर किसी को पता है कि यह 10.1 में काम करता है और 10.0 नहीं तो मुझे दिलचस्पी होगी।

यहां मेरे रन से परिणाम प्रविष्टि हैं।

यहाँ छवि विवरण दर्ज करें


यहां क्या जादू की चाल है, आपकी पटकथा काम नहीं आई?
कलाकृति

यह काम नहीं करता है। ऐसा लगता है कि यह होना चाहिए, लेकिन यह नहीं है।
किलोजियो

आपके दोनों फ़ील्ड टेक्स्ट सही हैं?
टर्बोगस

@ गस, यस फील्ड टेक्स्ट है।
कलाकृति

2
मैं 10.1 का उपयोग नहीं कर रहा हूँ। मैं 10.0 का उपयोग कर रहा हूँ - यह पुरातन संस्करण है जो कि 2011 का है।
वाल्वलोन

8

यह करने के लिए एक गैर स्क्रिप्ट तरीका है।

  1. आप परत पर संपादित सत्र प्रारंभ करें।
  2. तालिका खोलें और फ़ील्ड कॉलम हाइलाइट करें।
  3. तालिका विकल्प ड्रॉप डाउन एरो का चयन करें और ढूँढें और बदलें चुनें।
  4. बदलें टैब का चयन करें और पता लगाएं कि क्या दर्ज "करें : सभी को बदलें (आपको दो बार बदलें सभी बटन पर क्लिक करना होगा)।

जब मैं संभावना की सराहना करता हूं, तो मैं न केवल दोहरे उद्धरण चिह्नों को बदलना चाहता हूं और मैं स्क्रिप्टिंग के माध्यम से काम करना चाहता हूं।
वाल्वलंडन

3

मेरे सिस्टम पर हाइब्रिड एप्रोच ने काम किया:

'!testing!'.replace("\"","")

2

मैंने आर्क के अंदर यह कोशिश नहीं की है, लेकिन मैं इस (त्वरित) में पायथन आईडीई में एक स्ट्रिंग से दोहरे उद्धरण निकालने में सक्षम था:

aStr ='"test"'

a1 = aStr.lstrip('"')
a2 = a1.rstrip('"')

print a2

a2 प्रिंट परीक्षण, उद्धरण के बिना।


मुझे एहसास है कि यह आपके प्रश्न के 'फाइंड' भाग के साथ मदद नहीं करता ...
टिमोथी माइकल

0

हाय इस तरह एकल उद्धरण का उपयोग करने का प्रयास करें! परीक्षण! .replace ('' '', '')


नमस्ते, यह काम नहीं करता है।
वाल्वलंडन

0

मुझे पुराने VBScript फंक्शन के साथ यह बहुत आसान लगा: Replace ([testing],"""","")

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.