পাইথন এবং ফিল্ড ক্যালকুলেটর ব্যবহার করে ফিল্ড থেকে রিটার্ন / নিউলাইন (\ n) চরিত্রটি সরানো হচ্ছে?


14

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

!myField!.rstrip()

অথবা

!myField!.rstrip('\n')

অথবা

!myField!.rstrip('\r\n')

অথবা

!myField!.replace('\n', '')

এই বিকল্পের জন্য 000539 ত্রুটি দেওয়া হয়েছে:

বিবরণ গণনা ক্ষেত্র বা গণনা মান সরঞ্জাম ব্যবহার করে গণনা অবৈধ। প্রদত্ত এই ত্রুটি বার্তাটি নির্দিষ্ট পাইথন ত্রুটির তালিকাবদ্ধ করবে।

সমাধান এই ত্রুটি কোডটি পাইথন ত্রুটির একটি সংখ্যা কভার করে:

উদাহরণস্বরূপ ত্রুটি 1: ব্যাতিক্রম। টাইপ-এররার: 'আরআর' এবং 'ইনট' অবজেক্টগুলিকে একত্রিত করতে পারে না। উপরেরটি পাইথন-নির্দিষ্ট ত্রুটি। গণনাটি একটি স্ট্রিং এবং একটি সংখ্যা যুক্ত করার বা যুক্ত করার চেষ্টা করছে।

উদাহরণ ত্রুটি 2: অবৈধ ক্ষেত্র আকৃতি @ দূরত্ব উপরেরটি জ্যামিতি অবজেক্টটি ব্যবহার করে একটি ত্রুটি। দূরত্ব পদ্ধতি জ্যামিতি অবজেক্টের একটি বৈধ পদ্ধতি নয়।

নির্দিষ্ট পাইথন ইস্যুগুলির জন্য, আরও তথ্যের জন্য বাহ্যিক পাইথন সাহায্যের পরামর্শ নিন বা এই সরঞ্জামগুলির আরও তথ্যের জন্য গণনা ক্ষেত্র বা গণনা মানের সাহায্য নিন।

অথবা

import os
def removeReturn(myField):
  s = myField.rstrip(os.linesep)
  return s

ফিল্ড ক্যালকুলেটর ব্যবহার করে কীভাবে রিটার্ন অক্ষরগুলি সরিয়ে ফেলা যায়?


আপনি কি নিশ্চিত যে এটি একটি নতুন লাইন চরিত্র ("\ n")? এটির পরিবর্তে সম্ভবত কোনও ক্যারেজ রিটার্ন ("\ r") হতে পারে? এছাড়াও, সমস্ত সারিটির সমস্ত মান আলফা, বা ক্ষেত্রগুলির একটিতে এটির একটি সংখ্যাসূচক মানটি ব্যর্থ হতে পারে? সম্ভবত str (! মাইফিল্ড!)। স্ট্রিপ ('\ n')
রায়ানকেডাল্টন

দয়া করে ত্রুটি বার্তা এবং লাইন নম্বর সহ পুরো পাইথন ট্রেসব্যাক পোস্ট করুন, আপনি যে আর্কজিআইএস ত্রুটিটি পাচ্ছেন তা নয় (যা জেনেরিক এবং অপ্রয়োজনীয়)।
blah238

এটি নিজেই অর্জজিআইএস-এ দেখতে কিছুটা দেখতে শুরু হয়েছে, কারণ প্রদত্ত বিভিন্ন পাইথন উত্তরগুলি সমস্ত সঠিক।
সিন্ডি জয়কুমার

আপনি একটি SyntaxError: EOL while scanning string literalত্রুটি পাচ্ছেন ?
blah238

আমি নিশ্চিত না কীভাবে ক্যালকুলেটর আমদানি করা মডিউলগুলি পরিচালনা করছে, তবে আপনিও চেষ্টা করতে পারেন: পুনরায় আমদানি করুন এবং পুনরায় ব্যবহার করুন।
টমেক

উত্তর:


9

আমি মনে করি এটি ফিল্ড ক্যালকুলেটর / গণনা ফিল্ড সরঞ্জাম সহ পাইথন পার্সারের কেবল একটি বাগ / সীমাবদ্ধতা। পাঠ্য ক্ষেত্রের মধ্যে যদি কোনও নতুনলাইন মুখোমুখি SyntaxError: EOL while scanning string literalহয় , তবে আপনি যা চেষ্টা করবেন তা ঘটবে না।

আমি ফাইলটি জিওডাটাবেজে নিম্নলিখিত সিএসভি ফাইলটি আমদানি করে একটি ক্ষেত্র যুক্ত করে এবং কেবলমাত্র Textপাইথন পার্সার এবং এক্সপ্রেশন দিয়ে ফিল্ড ক্যালকুলেটর ব্যবহার করে ক্ষেত্রটি নতুন ক্ষেত্রটিতে অনুলিপি করার চেষ্টা করে 10.1 এসপি 1 এ সমস্যাটি পুনরুত্পাদন করতে পারি !Text!

আইডি, টেক্সট
1, "এটি একটি বহুমুখী 
উদাহরণস্বরূপ "

ভিবি পার্সারে স্যুইচ করার চেষ্টা করুন, বা একটি ব্যবহার করে UpdateCursorএবং ফিল্ড ক্যালকুলেটরকে পুরোপুরি এড়িয়ে চলুন।

ইএসআরআই ফোরামেও এই ইস্যুটি একই সিদ্ধান্তে আলোচিত:

কেবলমাত্র প্রাসঙ্গিক এনআইএম আমি এটি খুঁজে পেতে পারি:

  • NIM085499 - নন-এসসিআইআই অক্ষর ব্যবহার করে ক্যালকুলেটফিল্ড গণনাগুলি একটি লিনাক্স ইঞ্জিনের সাথে ব্যর্থ হয়: "ERROR 000539: সিনট্যাক্স এরর: EOL স্ট্রিং ল্যাটারাল (, লাইন 1) স্ক্যান করার সময়"।

4

দুটি নির্ভরযোগ্য সমাধান রয়েছে যা আমি নির্ভরযোগ্য বলে মনে করেছি। কোনও কারণে কার্টোপ্যাক লোকেরা যেখানে আমি কাজ করি সেই স্মৃতিচিহ্ন ক্ষেত্রগুলিতে রিটার্ন স্থাপনের অনুমতি দেয়। সেগুলি থেকে মুক্তি পাওয়ার জন্য, আমি যে সমাধানটি সর্বোত্তমভাবে কাজ করতে পেরেছি তা হ'ল ফিল্ড ক্যালকুলেটর ব্যবহার করা।

আপনার পার্সারকে পাইথনে পরিবর্তন করুন। প্রাক-লজিক স্ক্রিপ্ট কোডে নিম্নলিখিতটি রাখুন:

def carriageReturnRemoval(remark):
    remark = remark.splitlines()
    separator = " -- "
    return separator.join(remark)

নিম্নলিখিত পাঠ্য বাক্সে নিম্নলিখিতটি রাখুন (এটি একটি রিমর্কস নামে একটি ক্ষেত্রে কাজ করছে):

carriageReturnRemoval( !REMARKS! )

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

যখন আপনার গাড়ীর রিটার্ন সরিয়ে ফেলা হবে, তখন এটি প্রতিটি লাইনের মধ্যে একটি স্থান, - এবং একটি স্থান যুক্ত করবে। আপনি চাইলে "-" আলাদা চরিত্র বা অক্ষরের সেটটিতে পরিবর্তন করতে পারেন। তবে আমার নির্মাণকর্মীরা যেভাবে ডেটা প্রবেশ করে তার ভিত্তিতে আমার পক্ষে এটি সবচেয়ে ভাল কাজ করার বিষয়টি খুঁজে পেয়েছি। প্রতিটি গাড়ীর রিটার্ন ভেঙে চেনার মতো চরিত্রের নিদর্শনগুলি পাওয়া গেলে, অপারেশনগুলি সন্ধান / প্রতিস্থাপন করা আরও সহজ, তারা ক্ষেত্রটিতে একটি নতুন বৈশিষ্ট্য বোঝাতে ব্যবহার করে (যদিও এটি প্রায়শই একটি বৈশিষ্ট্য হলেও তারা কেবল সঠিক ক্ষেত্রটিতে রেখে দিতে পারে) এবং আমাকে প্রথমে মাথা ব্যথা বাঁচিয়েছে)।

আপনি যদি আর্কজিআইএসে পাইথন কনসোলটি ব্যবহার করতে পছন্দ করেন তবে আপনি কাজ করতে উপরেরটিকে সংশোধন করতে পারেন। তবে আমি পাইথন কনসোলে কিছু সাফল্যের সাথে এটিও চেষ্টা করেছি:

rows = arcpy.UpdateCursor("Assets\Welds")  
for row in rows:  
    hexString = str(row.REMARKS).encode("hex")  
    if "0a" in hexString:  
        hexString = hexString.replace("0a","")  
        row.REMARKS = hexString.decode("hex")  
        rows.updateRow(row)  

"এ্যাসেটস \ ওয়েল্ডস" যথাযথ এফসি নামের সাথে প্রতিস্থাপন করুন এবং সারিটি প্রতিস্থাপন করুন RE

উপরের কোড উদাহরণটি চেষ্টা করার আগে আপনাকে নীচে আমদানি লাইনগুলি চালানোর প্রয়োজন হতে পারে বা নাও হতে পারে:

import arcpy  
import string

আমি এটিকে শট দিচ্ছি, আপনার স্টেটমেন্টের পরে যদি স্টেটমেন্ট দরকার হয়।
আর্টওয়ার্ক 21

ভাল ক্যাচ ... আমি যখন ওয়ার্কিং পাইথন কমান্ড উইন্ডো স্ক্রিপ্ট থেকে অনুলিপি করেছি তখন এটি ঠিকভাবে অনুলিপি হয়নি।
জাচারি অর্ডো - জিআইএসপি

4

আমার ফিচার ক্লাস টেবিলটি এক্সেলের মাধ্যমে উদ্ভূত হওয়ায় এর জন্য কাজ করা হ'ল নিম্নলিখিত এক্সেল কমান্ডটি ব্যবহার করা:

= পরিষ্কার

সমস্ত রিটার্ন বা নতুন লাইন অক্ষর মুছে ফেলার পদ্ধতি। তারপরে আপনি নিজের জিআইএস ডাটাবেসে টেবিলটিতে যোগদান বা আমদানি করতে পারেন।


3

আমি প্রথমে নতুন লাইন অক্ষরগুলি নির্বাচন করতে একটি এসকিউএল স্টেটমেন্ট ব্যবহার করেছি। ইন Select By Attributesডায়লগ উইন্ডো:

"MY_FIELD" LIKE '%
 %'

আপনাকে Enterপ্রথম% এর পরে চাপতে হবে ।


2
আমি কেবল বুঝতে পেরেছিলাম যে এটি যখন নতুন লাইনের চরিত্রগুলি আমাকে দেখিয়েছিল, আমি কাজ করতেও পারিনি MY_FIELD.strip(), তবে আমার কাছে কেবল 5 টি রেকর্ড রয়েছে, তাই আমি ম্যানুয়ালি এগুলি সম্পাদনা করেছি।
সিন্ডি জয়কুমার

আপনি সম্ভবত এগুলি তাদের বেছে নিতে পারেন এবং তারপরে পাইথন এক্সপ্রেশন দিয়ে মানগুলি পুনরায় গণনা করতে ফিল্ড ক্যালকুলেটর ব্যবহার করতে পারেন !MY_FIELD![:-1]- স্ট্রিং স্লাইসটি নতুন লাইনের চরিত্রটি সরিয়ে ফেলতে হবে (ধরে নিলে নিউলাইন পরে কিছুই আসে না, যা ওপি'র ক্ষেত্রে মনে হয়)) ।
nmpeterson

3

!FieldName!.replace(chr(10), "").replace(chr(13), "")

ফিল্ড ক্যালকুলেটর একটু বিভ্রান্ত যখন এটা পছন্দ সিকোয়েন্স অব্যাহতি আসে \nএবং \t। শুধু কাঁচা অক্ষর কোড ব্যবহার করুন।


এখনও SyntaxError: EOL while scanning string literalএই সঙ্গে একটি পেয়ে । ভিবি পার্সার ভাল কাজ করে।
blah238

এক্সপ্রেশন এবং না কোড ব্লক? এবং শুধুমাত্র 10.0 এ?
জেসন স্কায়ার

অভিব্যক্তি, 10.1 এসপি 1 এ।
blah238

2
myString = "My text\n"

print myString.strip()

যা ফিল্ড ক্যালকুলেটরে কাজ করে না।
আর্টওয়ার্ক

আপনার কি পাইথন সলিউশন বা ভিবিএ (আর্কজিআইএস 9) সমাধান দরকার? স্ট্রিপ (), স্ট্রাইপ () এবং lstrip () কেবল প্রান্তে অক্ষরগুলির সাথে ডিল করে। যদি এটি কোনও স্ট্রিংয়ের মাঝামাঝি হয় তবে চেষ্টা করুন .replace ("\ n", "")
ড্যান

হ্যাঁ, ফিল্ড ক্যালকুলেটরের মধ্যে আমার একটি অজগর সমাধান দরকার। রিটার্নটি শেষে নয় স্ট্রিংয়ের মধ্যে। আমি .replace ("\ n", "") চেষ্টা করেছি, তবে আমি একটি সাধারণ 000539 ত্রুটি পেয়েছি।
আর্টওয়ার্ক

এই সংখ্যাটি দিয়ে নির্দিষ্ট পাইথন ত্রুটিটি কী দেওয়া হবে?
ড্যান

আমার প্রশ্নে ত্রুটি বার্তা পোস্ট।
আর্টওয়ার্ক

2

আমি মনে করি এটি ফিল্ড ক্যালকুলেটরে প্রাক-লজিক স্ক্রিপ্ট কোড হিসাবে কাজ করা উচিত - তবে দুর্ভাগ্যক্রমে এটি এটি বলে মনে হয় না। কাজটি করার জন্য এটি কোনও বিকল্প পদ্ধতির সুযোগ দেয় যা আপনি টুইট করতে পারেন I've

def fix(teststring):
    parts = teststring.splitlines()
    newtest = ""
    for part in parts:
        newtest+=part
    return newtest

2

আপনার !field!ঘোষণাকে কোট এবং একটি কাঁচা স্ট্রিং ইনিশিয়ালাইজারের সাথে অভিব্যক্তিতে মোড়ানোর চেষ্টা করুন r"!field!"

str(!field!)পাশাপাশি চেষ্টা করুন ।


এটি কাজ করে না। আমি MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a EOL` ত্রুটিটিও চেষ্টা করেছি।
সিন্ডি জয়কুমার

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