ไทย

ข้อมูลและสเปรดชีต · CSV สะอาดยิ่งขึ้น

RFC 4180 อธิบาย: สิ่งที่ใกล้เคียงที่สุด CSV ต้องเป็นไปตามมาตรฐานอย่างเป็นทางการ

· พื้นหลัง

csv อาร์เอฟซี-4180 ข้อมูลรูปแบบ

CSV บันทึกด้วยเครื่องหมายจุลภาค CRLF ตอนจบและเครื่องหมายคำพูดคู่ที่จัดแนวเป็นเอาต์พุตที่สอดคล้องกัน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

CSV ดำรงอยู่มานานหลายทศวรรษก่อนที่ใครจะจดบันทึกไว้ โพสต์นี้กล่าวถึง RFC 4180 ว่าจริงๆ แล้วโพสต์กล่าวถึงอะไรเกี่ยวกับตัวคั่น การอ้างอิง การลงท้ายบรรทัดและส่วนหัว และเหตุใดไฟล์ในโลกแห่งความเป็นจริงจึงยังคงเพิกเฉยต่อโพสต์นี้

ไฟล์ CSV ที่ 'ถูกต้อง' สองไฟล์ที่ไม่มี parser ใดอ่านได้อย่างถูกต้อง - เหตุใดรูปแบบจึงขยายมานานหลายทศวรรษโดยไม่มีมาตรฐาน

ไฟล์สองไฟล์สามารถมีนามสกุล .csv ได้ ในขณะที่ไฟล์หนึ่งใช้อัฒภาค อีกแท็บ และแต่ละไฟล์ใช้เครื่องหมายคำพูดต่างกัน parser ต้องรู้ภาษาถิ่นก่อนที่เครื่องหมายวรรคตอนจะกลายเป็นโครงสร้าง ToolAcre เริ่มต้นด้วยตัวเลือกสี่ตัวและคะแนนแยกวิเคราะห์รูปร่างตัวอย่างแทนที่จะเชื่อถือส่วนขยาย

ความยืดหยุ่นนั้นอธิบายได้ว่าเหตุใด “valid CSV” จึงมักเป็นคำอธิบายที่ไม่สมบูรณ์ อุปกรณ์ทำความสะอาดสามารถยอมรับการเบี่ยงเบนทั่วไป จากนั้นจึงจัดลำดับผลลัพธ์ที่สอดคล้องกัน ลักษณะการทำงานของมันถูกกำหนดโดยการกำหนดค่าและการทดสอบ ทำให้สัญญามีประโยชน์มากกว่าการที่ผู้ผลิตทุกรายปฏิบัติตามบันทึกช่วยจำเดียวอย่างสมบูรณ์

RFC 4180 คืออะไร — บันทึกข้อมูลจาก 2005 ที่บันทึกแนวทางปฏิบัติทั่วไป ไม่ใช่มาตรฐานที่มีผลผูกพัน

พื้นที่เก็บข้อมูลตั้งชื่อซ้ำๆ ว่า RFC 4180 เป็นรูปแบบเอาต์พุต แต่ไม่ใช่แหล่งที่มาสำหรับการอ้างสิทธิ์ในอดีตเกี่ยวกับวันที่ของบันทึกช่วยจำหรือสถานะทางกฎหมาย บทความนี้จึงมุ่งเน้นไปที่กฎต่างๆ ที่รวมอยู่ในการดำเนินการ: การสิ้นสุดบันทึก การอ้างอิง ความกว้างของส่วนหัว และการจัดการตัวคั่น

เมื่อประวัติศาสตร์มาตรฐานภายนอกมีความสำคัญ ให้อ้างอิงสิ่งพิมพ์หลักแยกต่างหาก สำหรับการใช้ ToolAcre หลักฐานที่เกี่ยวข้องอยู่ในเครื่อง: ค่าเริ่มต้นของโค้ดคือ CRLF เสนอราคาอักขระโครงสร้าง เพิ่มเครื่องหมายคำพูดภายในเป็นสองเท่า และรายงานแถวที่มีความกว้างแตกต่างจากส่วนหัว

หลักฐานที่เก็บข้อมูลใช้ RFC 4180 เป็นแบบแผนเป้าหมาย ประวัติการตีพิมพ์อยู่นอกชุดแหล่งที่มา

เป้าหมายที่กำหนดค่าจะอธิบายเอาต์พุตที่คั่นด้วยเครื่องหมายจุลภาค การสิ้นสุดบรรทัด CRLF แนวคิดส่วนหัวเพิ่มเติม และแถวสี่เหลี่ยม ในเส้นทางที่จัดส่ง ในทางปฏิบัติแถวแรกไม่ใช่ทางเลือก แต่จะใช้เป็นส่วนหัวเสมอ ไฟล์ที่ไม่มีส่วนหัวจะสูญเสียบันทึกแรกของบทบาทนั้น

อินพุตที่ขาดไม่ทำให้เกิดการปฏิเสธ แถวสั้นจะเต็มไปด้วยเซลล์ว่าง แถวยาวจะเก็บค่าพิเศษไว้ และทั้งคู่จะได้รับคำเตือนตามหมายเลขแถว ตัวซีเรียลไลเซอร์จะเขียนทุกแถวที่เก็บไว้ ดังนั้น "เอาต์พุตที่สะอาด" ไม่ได้หมายความว่าโปรแกรมจะเดาว่าจะแก้ไขความขัดแย้งทางโครงสร้างได้อย่างไร

การอ้างอิงตามบันทึกช่วยจำ - เมื่อใดที่ต้องเสนอราคาฟิลด์และวิธีเพิ่มเครื่องหมายคำพูดคู่ตามตัวอักษรเป็นสองเท่า

ฟิลด์จะต้องถูกยกมาเมื่อมีตัวคั่นที่เลือก เครื่องหมายคำพูด หรืออักขระที่ลงท้ายด้วยเรคคอร์ด ToolAcre ยังใส่เครื่องหมายคำพูดสำหรับช่องว่างนำหน้าหรือต่อท้ายด้วย ดังนั้น parser อื่นจะได้ไม่เล็มช่องว่างเหล่านั้นอย่างเงียบๆ ภายในช่องที่มีเครื่องหมายคำพูด แต่ละเครื่องหมายคำพูดคู่ตามตัวอักษรจะกลายเป็นเครื่องหมายคำพูดคู่ 2 ใบ

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

ประเภทสื่อ text/csv — พารามิเตอร์ส่วนหัวและชุดอักขระที่เป็นทางเลือก และสาเหตุที่ไม่ค่อยเดินทางพร้อมกับไฟล์บนดิสก์

ไฟล์บนดิสก์แทบจะไม่มาถึงพร้อมกับพารามิเตอร์ประเภทสื่อที่แนบมาด้วย ToolAcre ไม่อ่านพารามิเตอร์ `header` หรือ `charset` จากไฟล์ที่เลือก ขึ้นอยู่กับสัญญาเส้นทาง: UTF-8 ข้อความ ส่วนหัวของแถวแรก และการตรวจจับตัวคั่นที่รองรับหรือการเลือกด้วยตนเอง

สวิตช์ส่งออก BOM ซึ่งเป็นตัวเลือกจะเขียน U+FEFF ก่อนส่วนหัวแรก ซึ่งอาจช่วยให้สเปรดชีตรู้จัก UTF-8 แต่การกำหนดค่าเตือนว่าอาจทำให้สคริปต์ที่เข้มงวดหรือการนำเข้าฐานข้อมูลเสียหายได้ เนื่องจากเครื่องหมายจะรวมชื่อเมื่อไม่ได้แยกออก ปล่อยทิ้งไว้เว้นแต่ผู้บริโภคต้องการ

ที่ที่โลกแตกต่าง - อัฒภาค, การลงท้ายบรรทัด LF, แถวที่ขาดๆ หายๆ และการเข้ารหัสที่ไม่มีป้ายกำกับ และเหตุใดบันทึกช่วยจำจึงไม่ยอมรับสิ่งใดเลย

อินพุตจริงอาจใช้อัฒภาค แท็บหรือไปป์ LF หรือ CR เดี่ยว แถวไม่เท่ากัน และนำหน้า UTF-8 BOM โปรแกรมแยกวิเคราะห์จงใจยอมรับการลงท้ายบรรทัดและตัวเลือกตัวคั่นทั้งหมดเหล่านั้น มันไม่ “อดทน” แถวที่ขาดๆ หายๆ อย่างเงียบๆ มันเก็บข้อมูลและแนบคำเตือน

ใบเสนอราคาที่ไม่เปิดเผยเป็นอีกเงื่อนไขที่ยอมรับแต่รายงานได้ ทุกอย่างที่อยู่หลังเครื่องหมายคำพูดเปิดจะกลายเป็นฟิลด์เดียว เนื่องจากไม่มีขอบเขตการปิดที่ชัดเจน แก้ไขแหล่งที่มานั้นก่อนที่จะเชื่อถือการส่งออก การแยกวิเคราะห์ที่อนุญาตเป็นกลยุทธ์ในการเก็บรักษา ไม่ใช่การรับรองว่าอินพุตเป็นไปตามข้อกำหนด

ToolAcre ยอมรับการเบี่ยงเบนในโลกแห่งความเป็นจริงหลายครั้งในขณะที่รายงานแถวที่ขาด ๆ หาย ๆ แทนที่จะปฏิเสธ

ไม่มีกฎเกณฑ์ใดในที่นี้จะระบุประเภทตัวเลข บูลีน หรือค่าว่างให้กับเซลล์ parser ส่งคืนสตริงและตัวแปลง JSON จะคงไว้เป็นสตริง ผู้ส่งและผู้รับจะต้องตกลงแบบแผนความหมาย รวมถึงระบุว่าข้อความว่างหายไปหรือไม่ และลำดับตัวเลขเป็นตัวระบุหรือไม่

ความปลอดภัยของการฉีดสูตรเป็นนโยบายการส่งออกที่อยู่เหนือไวยากรณ์ CSV เมื่อเปิดใช้งาน อักขระนำที่มีความเสี่ยงจะได้รับเครื่องหมายอะพอสทรอฟี ยกเว้นรูปแบบตัวเลขธรรมดา ที่จงใจเปลี่ยนค่าเพื่อความปลอดภัยของสเปรดชีต มันไม่ได้เป็นส่วนหนึ่งของการหลีกเลี่ยงราคาหรือระบบประเภททั่วไป

ตั้งเป้าไปที่เอาต์พุตสไตล์ RFC แม้ว่าอินพุตจะเพิกเฉยก็ตาม — วิธีที่ ToolAcre CSV Cleaner ซ่อมแซมไฟล์ให้มีการกำหนดขอบเขตและการอ้างอิงที่สอดคล้องกัน

มุ่งเป้าไปที่ผลลัพธ์ที่คาดเดาได้แม้ว่าภาษาถิ่นของแหล่งที่มาจะแตกต่างกันไปก็ตาม หลังจากแยกวิเคราะห์และแก้ไขคำเตือนแล้ว ToolAcre ปล่อยบันทึก CRLF และการหลีกเครื่องหมายคำพูดมาตรฐาน หากตัวคั่นที่ตรวจพบยังคงเป็นเครื่องหมายอัฒภาคหรือแท็บ การดาวน์โหลดจะเก็บตัวคั่นนั้นไว้แทนที่จะบังคับลูกน้ำเสมอ

เลือกเครื่องหมายจุลภาคด้วยตนเองเมื่อสัญญาการรับต้องใช้เอาต์พุตที่คั่นด้วยเครื่องหมายจุลภาค และตรวจสอบตัวควบคุมเนื่องจากจะแสดงตัวคั่นที่ใช้จริง ความสอดคล้องมาจากการเลือกที่ชัดเจนบวกกับรูปร่างแถวที่ได้รับการตรวจสอบ ไม่ใช่จากส่วนขยาย CSV เพียงอย่างเดียว