ผมอ่านนี้บทความและฉันอยากรู้คำตอบที่เหมาะสมสำหรับคำถามนี้
สิ่งเดียวที่อยู่ในใจของฉันอาจเป็นได้ว่าในบางประเทศตัวแยกเลขทศนิยมเป็นเครื่องหมายจุลภาคและอาจมีปัญหาเมื่อแบ่งปันข้อมูลในCSVแต่ฉันไม่แน่ใจจริงๆในคำตอบของฉัน
ผมอ่านนี้บทความและฉันอยากรู้คำตอบที่เหมาะสมสำหรับคำถามนี้
สิ่งเดียวที่อยู่ในใจของฉันอาจเป็นได้ว่าในบางประเทศตัวแยกเลขทศนิยมเป็นเครื่องหมายจุลภาคและอาจมีปัญหาเมื่อแบ่งปันข้อมูลในCSVแต่ฉันไม่แน่ใจจริงๆในคำตอบของฉัน
คำตอบ:
รูปแบบสเป CSV จะถูกกำหนดไว้ในRFC 4180 ข้อมูลจำเพาะนี้ถูกเผยแพร่เพราะ
ไม่มีข้อกำหนดอย่างเป็นทางการในการดำรงอยู่ซึ่งช่วยให้การตีความที่หลากหลายของไฟล์ CSV
น่าเสียดายที่ตั้งแต่ปี 2005 (วันที่เผยแพร่ RFC) ไม่มีอะไรเปลี่ยนแปลง เรายังคงมีการใช้งานที่หลากหลาย วิธีการทั่วไปที่กำหนดไว้ใน RFC 4180 คือการใส่ฟิลด์ที่มีอักขระเช่นเครื่องหมายจุลภาคในเครื่องหมายคำพูดคำแนะนำนี้จะไม่ตรงกับซอฟต์แวร์ที่แตกต่างกัน
ปัญหาคือว่าในยุโรปต่าง ๆ ของตัวละครสถานที่จุลภาคทำหน้าที่เป็นจุดทศนิยมเพื่อให้คุณเขียนแทน0,005
0.005
แต่ในกรณีอื่น ๆ จะใช้เครื่องหมายจุลภาคแทนช่องว่างเพื่อส่งสัญญาณกลุ่มหลักเช่น4,000,000.00
(ดูที่นี่ ) ในทั้งสองกรณีการใช้เครื่องหมายจุลภาคอาจนำไปสู่ข้อผิดพลาดในการอ่านข้อมูลจากไฟล์ csv เนื่องจากซอฟต์แวร์ของคุณไม่ทราบว่า0,005, 0,1
เป็นตัวเลขสองตัวหรือสี่ตัวเลข (ดูตัวอย่างที่นี่ )
สุดท้าย แต่ไม่ท้ายสุดถ้าคุณเก็บข้อความไว้ในไฟล์ข้อมูลคอมมาจะเป็นข้อความธรรมดามากกว่าเซมิโคลอนดังนั้นหากข้อความของคุณไม่อยู่ในเครื่องหมายอัญประกาศข้อมูลดังกล่าวสามารถอ่านได้ง่ายพร้อมข้อผิดพลาด .
ไม่มีอะไรที่ทำให้เครื่องหมายจุลภาคดีขึ้นหรือแบ่งฟิลด์แย่ลงเท่าที่ใช้ไฟล์ CSV ตามคำแนะนำเช่น RFC 4180 ที่ป้องกันปัญหาที่อธิบายไว้ข้างต้น อย่างไรก็ตามหากมีความเสี่ยงในการใช้รูปแบบ CSV แบบง่าย ๆ ที่ไม่ได้ใส่เขตข้อมูลไว้ในเครื่องหมายคำพูดหรืออาจใช้การแนะนำแบบไม่ต่อเนื่องตัวคั่นอื่น ๆ (เช่นอัฒภาค) ดูเหมือนจะปลอดภัยกว่า
,
แทนตัวคั่น rarer จะบวมข้อมูลเนื่องจากคุณต้องหลีกเลี่ยงมันตลอดเวลาว่าเป็นจริง เห็นได้ชัดว่ามีคนเหล่านั้นที่คิดว่าพวกเขารู้ว่า CSV ทำงานอย่างไร แต่ไม่จริง
ในทางเทคนิคเครื่องหมายจุลภาคนั้นดีพอ ๆ กับอักขระอื่น ๆ ที่จะใช้เป็นตัวคั่น ชื่อของรูปแบบหมายถึงค่าที่คั่นด้วยเครื่องหมายจุลภาคโดยตรง (ค่าที่คั่นด้วยเครื่องหมายจุลภาค)
คำอธิบายของรูปแบบ CSVใช้เครื่องหมายจุลภาคเป็นตัวคั่น
ฟิลด์ใด ๆ ที่มีเครื่องหมายจุลภาคควรเป็นเครื่องหมายคำพูดคู่ ดังนั้นจึงไม่ทำให้เกิดปัญหาในการอ่านข้อมูลดูจุดที่ 6 จากคำอธิบาย :
- ฟิลด์ที่มีตัวแบ่งบรรทัด (CRLF) เครื่องหมายคำพูดคู่และเครื่องหมายจุลภาคควรอยู่ในเครื่องหมายคำพูดคู่
ตัวอย่างเช่นฟังก์ชั่นread.csv
และwrite.csv
จาก R โดยค่าเริ่มต้นจะใช้เครื่องหมายจุลภาคเป็นตัวคั่น
values
ว่าคั่นด้วยเครื่องหมายจุลภาค คนอื่นพูดถึงformatting
ตัวเลขของยุโรปนี่ไม่ใช่ปัญหาสำหรับ csv standard
เนื่องจากคุณอ้างจุด 6 อย่างถูกต้อง ความแตกต่างจาก "การใช้งานที่ถูกต้อง" มีอยู่ในรูปแบบข้อมูลใด ๆ ประเด็นคือ - รู้ข้อมูลของคุณ คนอื่นพูดถึงtab
หรือ;
คั่น แต่สิ่งเหล่านี้อาจมีปัญหาเหมือนกับเครื่องหมายจุลภาคเมื่อคุณจัดการกับข้อมูลที่ป้อนโดยผู้ใช้ (อาจผ่านฟอร์มและบันทึกโดยฐานข้อมูล - ฉันต้องทะเลาะกับช่องป้อนข้อความฟรีที่ผู้คน มีนิ้วมืออ้วนtab
... มันแย่มาก)
นอกเหนือจากการเป็นตัวคั่นตัวเลขในตัวเลขมันยังเป็นส่วนหนึ่งของที่อยู่ (เช่นที่อยู่ของลูกค้าเป็นต้น) ในหลายประเทศ ในขณะที่บางประเทศมีที่อยู่ที่กำหนดสั้น ๆ แต่บางประเทศก็มีที่อยู่ที่คดเคี้ยวยาวซึ่งบางครั้งก็ใช้คอมม่าสองตัวในบรรทัดเดียวกัน ไฟล์ CSV ที่ดีล้อมรอบข้อมูลดังกล่าวทั้งหมดด้วยเครื่องหมายคำพูดคู่ แต่ตัวแยกวิเคราะห์ที่เขียนง่ายเกินไปไม่ได้จัดเตรียมไว้สำหรับการอ่านและแยกความแตกต่างดังกล่าว (จากนั้นมีปัญหาในการใช้เครื่องหมายคำพูดคู่เป็นส่วนหนึ่งของข้อมูลเช่นคำพูดจากบทกวี)
ในขณะที่คำตอบของ @Tim นั้นถูกต้อง - ฉันต้องการเพิ่มว่า "csv" โดยรวมไม่มีมาตรฐานทั่วไป - โดยเฉพาะอย่างยิ่งกฎการหลบหลีกไม่ได้กำหนดไว้เลยนำไปสู่ "รูปแบบ" ซึ่งสามารถอ่านได้ในโปรแกรมเดียว . นี่คือความจริงที่ว่า "โปรแกรมเมอร์" ทุกคนภายใต้ดวงอาทิตย์แค่คิดว่า "oooh csv- ฉันจะสร้างโปรแกรมแยกวิเคราะห์ของตัวเอง!" แล้วคิดถึงกรณีขอบทั้งหมด
นอกจากนี้ csv ยังขาดความสามารถในการจัดเก็บข้อมูลเมตาหรือแม้แต่ชนิดข้อมูลของคอลัมน์ทั้งหมดซึ่งนำไปสู่เอกสารหลายฉบับที่คุณต้องอ่านเพื่อยกเลิกการดึงข้อมูล
หากคุณสามารถกำหนดตัวคั่นจุลภาคและใช้อักขระแท็บคุณจะประสบความสำเร็จได้ดีกว่ามาก คุณสามารถปล่อยให้ไฟล์ชื่อ. CSV และการนำเข้าสู่โปรแกรมส่วนใหญ่มักจะไม่มีปัญหา เพียงระบุตัวคั่น TAB แทนเครื่องหมายจุลภาคเมื่อคุณนำเข้าไฟล์ของคุณ หากมีเครื่องหมายจุลภาคในข้อมูลของคุณคุณจะมีปัญหาเมื่อระบุเครื่องหมายจุลภาคคั่นตามที่คุณทราบดี
|
เป็นตัวคั่นในไฟล์ข้อความเหมือน csv ที่ทำเองที่บ้านของระเบียน (ที่มีชื่อหนังสือและข้อมูลเมตาของเอกสารอื่น ๆ ) |
ไม่เคยเกิดขึ้นในข้อมูลที่ฉันทำงานด้วยดังนั้นฉันสามารถเขียนสคริปต์ Perl ที่แยก / เข้าร่วมได้โดยไม่ต้องตรวจสอบว่ามีข้อความใด ๆ นี่เป็นเพียงโครงการเดียวที่เกี่ยวข้องกับการประมวลผลข้อมูลเมตาที่บันทึกไว้จากฐานข้อมูล MS Access สำหรับโครงการขนาดใหญ่ใด ๆ หรือถ้าคุณวางแผนที่จะเก็บข้อมูลในรูปแบบไฟล์นี้ในระยะยาวเลือกสิ่งที่แข็งแกร่งกว่า! ฉันสามารถปรับแต่งบางสิ่งบางอย่างได้ถ้าชุดของเดือนนี้หักอะไร
split
คำสั่งสำหรับ Stata ฉันมองไปที่เหนือสิ่งอื่นใดเทียบเท่า Perl เพื่อดูสิ่งที่มันทำและไม่ได้ทำ ไม่ใช่ซอร์สโค้ด แต่มีเพียงฟังก์ชันการทำงานที่มีให้
cut
, และsort
uniq
ASCII มอบอักขระ "ตัวคั่น" สี่ตัวตามที่แสดงด้านล่างในตัวอย่างจากหน้า ascii (7) * ระวังตัว:
Oct Dec Hex Char
----------------------
034 28 1C FS (file separator)
035 29 1D GS (group separator)
036 30 1E RS (record separator)
037 31 1F US (unit separator)
คำตอบนี้ให้ภาพรวมที่ดีของการใช้งาน
แน่นอนรหัสควบคุมเหล่านี้ขาดความเป็นมิตรต่อมนุษย์ (ความสามารถในการอ่านและอินพุต) ของตัวคั่นที่ได้รับความนิยมมากขึ้น แต่เป็นตัวเลือกที่ยอมรับได้สำหรับการแลกเปลี่ยนภายในและ / หรือข้อมูลชั่วคราวระหว่างโปรแกรม
ปัญหาไม่ใช่เครื่องหมายจุลภาค ปัญหาคือการอ้างถึง ไม่ว่าคุณจะใช้ตัวคั่นระเบียนและเขตข้อมูลใดคุณจะต้องเตรียมพร้อมสำหรับการพบกันในเนื้อหา ดังนั้นคุณต้องมีกลไกข้อความ และจากนั้นคุณต้องมีวิธีสำหรับอักขระที่อ้างถึงเพื่อให้ปรากฏเช่นกัน
การปฏิบัติตามมาตรฐาน RFC 4180 ทำให้ทุกอย่างง่ายขึ้นสำหรับทุกคน
ฉันต้องเขียนสคริปต์เป็นการส่วนตัวเพื่อแก้ไขผลงานจากโปรแกรมที่ผิดพลาดดังนั้นฉันจึงกล้าทำเรื่องนี้ "อาจแก้ไข" หมายความว่ามันใช้งานได้กับข้อมูลของฉัน แต่ฉันสามารถดูสถานการณ์ที่มันจะล้มเหลว (ในการป้องกันของโปรแกรมนั้นมันถูกเขียนก่อนมาตรฐาน)