ไทย

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

Parser CSV จัดการเครื่องหมายคำพูด เครื่องหมายจุลภาคแบบฝัง และการขึ้นบรรทัดใหม่ในฟิลด์อย่างไร

· มันทำงานอย่างไร

csv การแยกวิเคราะห์ ข้อมูลรูปแบบ

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

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

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

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

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

กฎการเสนอราคา — ช่องที่มีตัวคั่น เครื่องหมายคำพูด หรือการขึ้นบรรทัดใหม่จะถูกล้อมด้วยเครื่องหมายคำพูดคู่ และเครื่องหมายคำพูดภายในจะเพิ่มเป็นสองเท่า

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

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

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

ลูปหลักติดตามฟิลด์ปัจจุบัน แถวปัจจุบัน และสถานะ `inQuotes` เครื่องหมายคำพูดภายนอก ตัวคั่นจะพุชฟิลด์และ CR, LF หรือ CRLF พุชแถว ภายในเครื่องหมายคำพูด อักขระทุกตัวจะถูกต่อท้าย ยกเว้นเครื่องหมายคำพูด ซึ่งสร้างคู่ที่เป็น Escape หรือออกจากสถานะเครื่องหมายคำพูด

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

การขึ้นบรรทัดใหม่แบบฝัง — เหตุใดแถวจึงสามารถขยายได้หลายบรรทัด และเหตุใดเครื่องมือที่ใช้บรรทัด เช่น grep หรือ wc บันทึกการนับผิด

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

หลังจากใบเสนอราคาปิด ตัวคั่นถัดไปหรือการสิ้นสุดเรกคอร์ดจะดำเนินต่อตามความหมายเชิงโครงสร้าง การทดสอบของ ToolAcre ยืนยันทั้ง LF แบบฝังและ CRLF แบบฝัง จากนั้นตรวจสอบว่ามีการสร้างแถวเดียวเท่านั้น ลักษณะการทำงานนี้ไม่ได้อนุมานจากป้ายกำกับ RFC มันถูกใช้งานโดยตรงจากเครื่องสถานะที่จัดส่ง

เครื่องหมายคำพูดที่ใช้งานไม่ได้ — เครื่องหมายคำพูดที่ไม่สมดุลซึ่งกลืนส่วนที่เหลือของไฟล์ และวิธีที่เครื่องมือซ่อมแซมทำการรีโควตฟิลด์อย่างสม่ำเสมอ

โครงร่างสัญญาว่าจะซ่อมแซมใบเสนอราคา แต่ใบเสนอราคาที่เปิดเผยนั้นมีความคลุมเครือโดยเนื้อแท้ ToolAcre รายงาน `UNCLOSED_QUOTE` กับแถวที่สถานะที่ยกมาเริ่มต้นและอ่านทุกอย่างหลังจากนั้นลงในฟิลด์เดียว มันไม่ได้สร้างตำแหน่งปิดหรืออ้างอิงบันทึกที่ต้องการใหม่

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

มีการรายงานการเสนอราคาที่เสียหายแต่ไม่ได้รับการซ่อมแซม ช่องที่ไม่ปิดจะใช้ข้อความที่เหลือ

ใช้ `name,note` เป็นส่วนหัว จากนั้นหนึ่งแถวที่มี Ada และบันทึกย่อที่มีลูกน้ำบวกตัวแบ่งบรรทัด และอีกแถวหนึ่งที่มีบันทึกย่อคือ `She said "hi"` ในแหล่งที่มา CSV ให้อ้างอิงบันทึกย่อแบบยาวและเขียนเครื่องหมายคำพูดด้านในเป็น `""hi""` parser ส่งคืนแถวข้อมูลสองแถวและเก็บอักขระพิเศษทั้งสองไว้

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

สิ่งนี้ไม่ครอบคลุม - ภาษาถิ่นที่ใช้การหลีกเครื่องหมายแบ็กสแลช และการวิเคราะห์พฤติกรรมในการคาดเดาเจตนาเมื่ออ้างอิงคำพูดมีความคลุมเครืออย่างแท้จริง

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

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

เคารพเครื่องหมายคำพูดและแถวไม่เสียหาย — วิธีที่ ToolAcre CSV การซ่อมแซมการเสนอราคาของ Cleaner สร้างไฟล์ที่ parsers มาตรฐานอ่านได้อย่างถูกต้อง

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

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