ค้นหา / แทนที่คำพูดคู่โดยใช้ Python Parser of ArcGIS Field Calculator?


16

ฉันพยายามใช้ Field Calculator (ArcMap 10.0) เพื่อตัดเครื่องหมายคำพูดคู่ในช่องที่อยู่ (ฉันไม่ได้ใส่ไว้ในนั้นเชื่อฉัน) ฉันลองใช้คาถามากมาย แต่ก็ยังไม่สามารถแม้แต่จะคำนวณได้ ใช่ทั้งสองฟิลด์เป็นสตริงและทั้งสองมีความยาวที่ยอมรับได้

การคำนวณนี้: การคำนวณตัวอย่าง

ผลลัพธ์ในสิ่งนี้:

ล้มเหลว

ด้วยข้อความแสดงข้อผิดพลาดนี้ในกล่องโต้ตอบผลลัพธ์:

ข้อความผิดพลาด

และฉันพูดซ้ำฉันไม่ได้ใส่ไว้ในนั้น


1
ดังนั้นคุณกำลังคัดลอกพวกเขาด้วยคำพูดในการทดสอบของคุณคุณได้พยายามลอกคำพูดด้วยสิ่งที่ต้องการ!testing![1:len(!testing!)-1]
Roy

ตัวอย่างที่คุณให้ไว้จะตายด้วยข้อความเดียวกัน
valveLondon

คำตอบ:


16

ฉันได้พบว่าใน 10.0 Field Calculator นั้นค่อนข้างแปลก

แต่ฉันจัดการเพื่อให้มันทำงานได้ แนวคิดหลักคือการใส่ชื่อฟิลด์ด้วยเครื่องหมายคำพูดเดี่ยว

ตัวอย่าง. ให้คิดว่าเรามีสาขาและtext1 text2แทนที่จะฟิลด์คำนวณtext2มีการแสดงออกซึ่งอาจจะล้มเหลวลองนี้:!text1! '!text1'ตามที่คุณเห็นฉันกำลังใช้เครื่องหมายคำพูดเดี่ยวที่นี่

ดังนั้นกลับไปที่งานของคุณ จะมีความชัดเจนมากขึ้นในการใช้รหัสสคริปต์ล่วงหน้า:

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

นิพจน์จะเป็น:

calc('!text1!')

ฉันหวังว่ามันจะทำงานให้คุณ

ฉันยังไม่ได้ทดลองต่อไป แต่ฉันคิดว่าพฤติกรรมแปลก ๆ นั้นเกิดขึ้นเพราะการคำนวณฟิลด์ถูกแปลเป็นเครื่องมือเรียกร้องให้ ArcToolbox CalculateField_managementและการแสดงออกที่ให้ไว้เป็นพารามิเตอร์ของมัน (อาจมีการใส่เครื่องหมายคำพูดเดี่ยวหรือคู่

UPDATE:

text1วิธีการแก้ปัญหาผ่านมาของฉันจะล้มเหลวในกรณีถ้ามีคำพูดเดียวในค่าของสนาม

ตอนนี้ผมมีการจัดการที่จะได้รับมันทำงานทั้งในกรณีที่มีตัวอักษร'และ"(คำพูดเดี่ยวและคู่) ภายในค่าใด ๆ text1ในแอตทริบิวต์

นี่คือนิพจน์ซึ่งจะส่งคืนสตริงต้นฉบับสนับสนุนการอ้างอิงทั้งสองประเภท:

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

สำหรับงานของคุณสามารถขยายไปยัง (โดยไม่มีรหัสสคริปต์พรีลอจิก):

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

คุณทำให้ความหวังของฉันดีขึ้น แต่นั่นก็ไม่ได้ผลสำหรับฉัน ทั้ง codeblock หรือตรงขึ้น'!testing!'
valveLondon

หืมมันทำงานกับ 10.0sp4 ของฉัน อาจเป็นเพราะบางแห่งในสาขาของคุณมีการเสนอราคาเดียวจริง ๆ ... คุณเคยใช้ UpdateCursor ในสคริปต์ python หรือไม่?
Alex Markov

2
คุณรู้อะไรไหม? คุณพูดถูกมันทำงานได้ดี ฉันไม่มีน้ำตื่น 3:00 คุณชนะ.
valveLondon

ฉันจัดการเพื่อแก้ไขปัญหาด้วยคำพูดเดียว ตรวจสอบการอัปเดตคำตอบของฉัน
Alex Markov

รหัสสคริปต์ Pre-Logic ทำงานได้ดีเมื่อใช้ภายในสคริปต์ - ขอบคุณมาก
meryloo

10

หากคุณใช้เวอร์ชั่น 10.1 และคุณแน่ใจว่าต้องการกำจัดอัญประกาศคู่ทุกตัวที่คุณสามารถใช้ได้:

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

หากใครรู้ว่าทำไมมันถึงได้ผลใน 10.1 และไม่ใช่ 10.0 ฉันก็จะสนใจ

นี่คือรายการผลลัพธ์จากการวิ่งของฉัน

ป้อนคำอธิบายรูปภาพที่นี่


อะไรคือเคล็ดลับมายากลที่นี่สคริปต์ของคุณไม่ทำงาน
Artwork21

มันใช้งานไม่ได้ ดูเหมือนว่าควรจะมี แต่ไม่เป็นเช่นนั้น
KiloGeo

ทั้งสองฟิลด์ของคุณถูกต้องข้อความ?
TurboGus

@ กัสฟิลด์ใช่คือข้อความ
artwork21

2
ฉันไม่ได้ใช้ 10.1 ฉันใช้ 10.0 - รุ่นโบราณนั่นคือ sooooo 2011
valveLondon

8

นี่เป็นวิธีที่ไม่ใช่สคริปต์ที่จะทำ

  1. เริ่มแก้ไขเซสชันบนเลเยอร์ของคุณ
  2. เปิดตารางและไฮไลต์คอลัมน์ฟิลด์
  3. เลือกลูกศรดรอปดาวน์ตัวเลือกตารางและเลือกค้นหาและแทนที่
  4. เลือกแท็บแทนที่และป้อนค้นหาอะไร: "เลือกแทนที่ทั้งหมด (คุณจะต้องคลิกปุ่มแทนที่ทั้งหมดสองครั้ง)

ในขณะที่ฉันซาบซึ้งกับความเป็นไปได้ฉันไม่เพียง แต่ต้องการเปลี่ยนเครื่องหมายคำพูดคู่ แต่ฉันก็อยากทำงานผ่านการเขียนสคริปต์
valveLondon


2

ฉันไม่ได้ลองสิ่งนี้ภายใน Arc แต่ฉันสามารถลบเครื่องหมายคำพูดคู่จากสตริงใน Python IDE ด้วยวิธีนี้ (ด่วน):

aStr ='"test"'

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

print a2

a2 พิมพ์การทดสอบโดยไม่มีเครื่องหมายคำพูด


ฉันรู้นี้ไม่ได้ช่วยให้กับส่วน 'ค้นหา' ของคำถามของคุณ ...
ทิโมธีไมเคิล


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.