তাত্ত্বিকভাবে দুর্দান্ত, অনুশীলনে ভয়ানক
সিএসভি দ্বারা আমি ধরে নিচ্ছি যে আপনি কনভেনশনটির অর্থ আরএফসি 4180 তে বর্ণিত হিসাবে ।
বেসিক সিএসভি ডেটা মিলার সময় তুচ্ছ:
"data", "more data"
দ্রষ্টব্য: বিটিডাব্লু, এটি খুব সহজ এবং সু-কাঠামোগত তথ্যের জন্য স্প্লিট ('' ') ফাংশন ব্যবহার করার জন্য অনেক বেশি দক্ষ। স্টেট মেশিন) যা একবার আপনি পালানোর চরগুলির মতো প্রবণতা যুক্ত করতে শুরু করলে ব্যাকট্র্যাকিংয়ে অনেক সময় অপচয় করে।
উদাহরণস্বরূপ, আমি এখানে খুঁজে পেয়েছি সর্বাধিক বিস্তৃত নিয়মিত প্রকাশের সাথে মেলে স্ট্রিং:
re_valid = r"""
# Validate a CSV string having single, double or un-quoted values.
^ # Anchor to start of string.
\s* # Allow whitespace before value.
(?: # Group for value alternatives.
'[^'\\]*(?:\\[\S\s][^'\\]*)*' # Either Single quoted string,
| "[^"\\]*(?:\\[\S\s][^"\\]*)*" # or Double quoted string,
| [^,'"\s\\]*(?:\s+[^,'"\s\\]+)* # or Non-comma, non-quote stuff.
) # End group of value alternatives.
\s* # Allow whitespace after value.
(?: # Zero or more additional values
, # Values separated by a comma.
\s* # Allow whitespace before value.
(?: # Group for value alternatives.
'[^'\\]*(?:\\[\S\s][^'\\]*)*' # Either Single quoted string,
| "[^"\\]*(?:\\[\S\s][^"\\]*)*" # or Double quoted string,
| [^,'"\s\\]*(?:\s+[^,'"\s\\]+)* # or Non-comma, non-quote stuff.
) # End group of value alternatives.
\s* # Allow whitespace after value.
)* # Zero or more additional values
$ # Anchor to end of string.
"""
এটি যুক্তিসঙ্গতভাবে একক এবং ডাবল উদ্ধৃত মানগুলি পরিচালনা করে তবে মানগুলিতে নিউলাইন নয়, পালানো উক্তি ইত্যাদি etc.
উত্স: স্ট্যাক ওভারফ্লো - আমি কীভাবে জাভাস্ক্রিপ্ট দিয়ে একটি স্ট্রিং পার্স করতে পারি
সাধারণ প্রান্ত-কেসগুলি চালু হওয়ার পরে এটি একটি দুঃস্বপ্ন হয়ে যায় ...
"such as ""escaped""","data"
"values that contain /n newline chars",""
"escaped, commas, like",",these"
"un-delimited data like", this
"","empty values"
"empty trailing values", // <- this is completely valid
// <- trailing newline, may or may not be included
নতুন লাইনের হিসাবে মূল্য প্রান্তের কেসটি বন্যের মধ্যে পাওয়া RegEx ভিত্তিক পার্সারগুলির 99.9999% ভাঙতে যথেষ্ট। একমাত্র 'যুক্তিসঙ্গত' বিকল্পটি হল উচ্চ স্তরের বিশ্লেষণের জন্য ব্যবহৃত একটি স্টেট মেশিনের সাথে যুক্ত বেসিনাল কন্ট্রোল / নন-কন্ট্রোল ক্যারেক্টারের (যেমন টার্মিনাল বনাম নন-টার্মিনাল) টোকেনাইজেশনের সাথে টেকনাইজেশন জোড় করে RegEx ম্যাচিং ব্যবহার করা।
উত্স: অন্যথায় অভিজ্ঞতা ব্যথা এবং যন্ত্রণা হিসাবে পরিচিত।
আমি jquery-CSV এর লেখক , বিশ্বের একমাত্র জাভাস্ক্রিপ্ট ভিত্তিক, সম্পূর্ণ আরএফসি-কমপ্লায়েন্ট, সিএসভি পার্সার। আমি এই সমস্যাটি মোকাবেলা করতে, বহু বুদ্ধিমান লোকের সাথে কথা বলার, এবং কোর পার্সার ইঞ্জিনের 3 টি পুনর্লিখন সহ বিভিন্ন বাস্তবায়ন যদি একটি টোন চেষ্টা করে দেখেছি।
tl; dr - গল্পটির নৈতিক, পিসিআরই একমাত্র সবচেয়ে সাধারণ এবং কঠোর নিয়মিত (আই টাইপ-তৃতীয়) ব্যাকরণ ব্যতীত অন্য কোনও কিছুকে বিশ্লেষণের জন্য ব্যর্থ হয়। তবে এটি টার্মিনাল এবং টার্মিনাল নন-টার্মিনাল স্ট্রিংয়ের জন্য কার্যকর।