Tag: parsing

11 รายการ

Blog

นากตัวละครต้นฉบับแกะกล่องซ้อนหลายชั้นและเรียงริบบิ้นที่ทำซ้ำออกเป็นสายเดียว
leetcodepythonjava

LeetCode #394 Decode String: แกะวงเล็บซ้อนด้วย stack

เทียบ 3 วิธีถอดข้อความ k[encoded] พร้อม parser, stack, Python, Java, complexity และ decision table

พี่โชว์
อิกัวนาต้นฉบับคัดชิ้นไม้สีเขียวจากสายยาวที่มีลูกปัดตัวคั่นหลายทรงลงถาดแยกกัน
zigstdlibparsing

Zig std.mem.tokenizeAny: แยกคำเมื่อ delimiter มีหลายตัว

ใช้ tokenizeAny แยกข้อความด้วยช่องว่าง comma slash หรือ pipe โดยไม่คืน token ว่าง พร้อมเทียบ tokenizeScalar และ splitAny

พี่โชว์
ปูสีส้มแดงต้นฉบับใช้ก้ามแบ่งริบบิ้นสีเขียวที่จุดบาก ทำให้เกิดมุมมองสองส่วนบนกระดานเดียวกัน
rustsliceparsing

Rust slice::split_off: หยิบช่วงออกจากมุมมองโดยไม่ allocate

ใช้ split_off กับ &mut &[T] เพื่อเลื่อน cursor ของ slice อย่างปลอดภัย พร้อมแยกจาก Vec::split_off และจัดการ out-of-bounds

พี่โชว์
นากกายต้นฉบับกำลังคัดเม็ดข้อมูลจากกรวยสแกนเนอร์ลงราง stream บนโต๊ะสว่าง
javascannerstreams

Java Scanner.tokens: เปลี่ยน token stream เป็น pipeline ที่ปิด resource ชัดเจน

ใช้ Scanner.tokens กับ delimiter, filter และ try-with-resources พร้อม Java 17 assertions

พี่โชว์
อิกัวนาต้นฉบับดึงถาดชิ้นส่วนจากปลายขวาของรางย้อนกลับทีละช่องบนโต๊ะมิ้นต์
zigmemoryiterator

Zig splitBackwardsSequence: แยก path จากด้านท้ายโดยไม่ reverse ข้อมูล

ใช้ std.mem.splitBackwardsSequence ดึงชื่อไฟล์และโฟลเดอร์จากท้าย slice พร้อมรู้ empty field, delimiter หลายไบต์ และ lifetime

พี่โชว์
นากแม่น้ำต้นฉบับกำลังเปิดประตูให้ลูกปัดตัวเลขที่มีค่าไหลเข้าสายพาน และปิดช่องที่ว่าง
javaoptionalintstreams

Java OptionalInt.stream: ต่อค่าที่อาจไม่มีเข้ากับ IntStream

แปลงผล parse แบบ zero-or-one ให้เข้ากับ primitive stream โดยไม่ใช้ sentinel หรือ boxing เกินจำเป็น

พี่โชว์
อิกัวนาต้นฉบับเลื่อนไม้ชี้จากธงเริ่มสีเขียวไปยังลูกปัดตัวคั่นสีอำพันถัดไป
zigstdlibparsing

Zig indexOfScalarPos: ค้นตัวคั่นต่อจาก cursor โดยไม่ตัด slice ซ้ำ

ใช้ std.mem.indexOfScalarPos ทำ parser แบบเดิน cursor พร้อมเข้าใจ null และขอบเขตเริ่มค้นหา

พี่โชว์
งูสีเขียวต้นฉบับกำลังดมตัวอย่างริบบิ้นข้อมูลแล้วแยกลงถาดเครื่องหมายคั่นสองแบบ
pythoncsvparsing

Python csv.Sniffer: เดารูปแบบไฟล์ได้ แต่ต้องมี fallback ที่คาดเดาได้

ใช้ Sniffer ตรวจ delimiter จาก sample พร้อมรับมือข้อมูลสั้น กำกวม และ input ที่ไม่น่าเชื่อถือ

พี่โชว์
อีกัวน่าต้นฉบับคัดริบบิ้นข้อมูลตรงหมุดคู่สีส้ม โดยเก็บถาดว่างไว้เมื่อหมุดสองคู่ติดกัน
zigparsingstandard-library

Zig splitSequence: แยก delimiter หลายไบต์โดยยังเห็นช่องว่างระหว่างคู่ติดกัน

ใช้ std.mem.splitSequence ทำ parser รูปแบบเล็ก ๆ พร้อมเข้าใจ empty field, lifetime และความต่างจาก splitAny

พี่โชว์
ปูต้นฉบับคัดเมล็ดสีเขียวจากสายพานจนถึงเมล็ดอำพันที่เป็นเส้นหยุด
rustiteratorparsing

Rust map_while: แปลงข้อมูลจนเจอเส้นแบ่ง แล้วหยุดอย่างมีขอบเขต

ใช้ Iterator::map_while อ่าน prefix ที่แปลงได้ พร้อมอธิบายว่า item ที่ทำให้หยุดถูก consume และ iterator ไม่ fused

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

Zig Workshop #3: แยกวิเคราะห์ log โดยไม่ขอหน่วยความจำแม้แต่ไบต์เดียว

เขียน parser สำหรับ nginx combined log ที่ไม่ copy อะไรเลย — ทุกฟิลด์เป็น slice ที่ชี้กลับเข้าไปในบรรทัดต้นทาง, error set ที่บอกได้ว่าผิดตรงไหน, โหมด --strict และบทเรียนเรื่องอายุของข้อมูลที่คอมไพเลอร์ Zig ไม่ได้ตรวจให้

พี่โชว์