इस प्रश्न का उद्देश्य एक कैननिकल उत्तर प्रदान करना है।अजीब का उपयोग कर सीएसवी को कुशलतापूर्वक पार्स करने का सबसे मजबूत तरीका क्या है?
को देखते हुए एक CSV के रूप Excel या एम्बेडेड नई-पंक्तियों, एम्बेडेड दोहरे उद्धरण चिह्नों और तरह खाली क्षेत्रों के साथ अन्य उपकरणों द्वारा उत्पन्न किया जा सकता है:
$ cat file.csv
"rec1, fld1",,"rec1"",""fld3.1
"",
fld3.2","rec1
fld4"
"rec2, fld1.1
fld1.2","rec2 fld2.1""fld2.2""fld2.3","",rec2 fld4
क्या सबसे मजबूत तरीका कुशलतापूर्वक awk का उपयोग कर अलग रिकॉर्ड और क्षेत्रों की पहचान करने के लिए :
Record 1:
$1=<rec1, fld1>
$2=<>
$3=<rec1","fld3.1
",
fld3.2>
$4=<rec1
fld4>
----
Record 2:
$1=<rec2, fld1.1
fld1.2>
$2=<rec2 fld2.1"fld2.2"fld2.3>
$3=<>
$4=<rec2 fld4>
----
इसलिए इसका उपयोग उन रिकॉर्ड्स और फ़ील्ड के रूप में आंतरिक रूप से अजीब स्क्रिप्ट द्वारा किया जा सकता है।
एक मान्य सीएसवी एक होगा जो RFC 4180 के अनुरूप है या एमएस-एक्सेल द्वारा उत्पन्न किया जा सकता है।
समाधान को रिकॉर्ड के अंत को केवल एलएफ (\n
) के रूप में सहन करना चाहिए जैसा कि सीआरएलएफ (\r\n
) के बजाय यूनिक्स फ़ाइलों के लिए सामान्य है, क्योंकि उस मानक की आवश्यकता है और एक्सेल या अन्य विंडोज उपकरण उत्पन्न होंगे। यह उद्धृत क्षेत्रों के साथ मिश्रित अनगिनत फ़ील्ड भी सहन करेगा। "
एस से पहले "
एस से पहले ""
के बजाय \"
) से बचने की आवश्यकता नहीं होगी क्योंकि कुछ अन्य सीएसवी स्वरूपों की अनुमति है - यदि आपके पास यह है तो gsub(/\\"/,"\"\"")
ऊपर आगे जोड़कर इसे संभालने और स्वचालित रूप से दोनों भागने वाली तंत्रों को संभालने का प्रयास किया जाएगा एक स्क्रिप्ट स्क्रिप्ट को अनावश्यक रूप से नाजुक और जटिल बना देगी।