0Pricing
Zig Academy · บทเรียน

การอ่านไฟล์และ stdin

ส่งอินพุตแบบสตรีมเข้าสู่โปรแกรม

การอ่านไฟล์และ stdin เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

เครื่องมือรับข้อมูลป้อนเข้า

โดยทั่วไป CLI ที่มีประโยชน์มักอ่านบางสิ่ง เช่น ไฟล์ที่คุณระบุชื่อ หรือข้อความที่ส่งผ่านเข้ามา Zig มอบวิธีที่ชัดเจนและระบุได้อย่างตรงไปตรงมาเพื่อทำทั้งสองอย่าง 📥

เปิดไฟล์ด้วยพาธ

ใช้ std.fs.cwd เพื่อรับไดเรกทอรีปัจจุบัน จากนั้นใช้ openFile เพื่อเปิดพาธที่สัมพันธ์กับไดเรกทอรีนั้นสำหรับการอ่าน

const file = try std.fs.cwd().openFile(path, .{});

ปิดสิ่งที่คุณเปิดเสมอ

ไฟล์ที่เปิดอยู่คือทรัพยากรที่คุณเป็นเจ้าของ จับคู่การเปิดไฟล์กับ defer file.close() เพื่อให้ไฟล์ถูกคืนทรัพยากรไม่ว่าฟังก์ชันจะจบการทำงานอย่างไร

defer file.close();

อ่านทั้งไฟล์

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

const data = try file.readToEndAlloc(a, 1024 * 1024);

คืนไบต์ภายหลัง

สไลซ์ที่คืนมานั้นอยู่บนฮีป ดังนั้นคุณจึงเป็นเจ้าของ เพิ่ม defer a.free(data) เพื่อคืนบัฟเฟอร์เมื่อใช้งานเสร็จ

defer a.free(data);

ขีดจำกัดขนาดคือกลไกป้องกัน

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

รับข้อมูลป้อนเข้ามาตรฐาน

หากต้องการอ่านข้อความที่ส่งผ่านเข้ามา ให้ใช้ std.io.getStdIn ฟังก์ชันนี้คืนไฟล์ในลักษณะเดียวกับไฟล์ที่คุณเปิดเอง ดังนั้นจึงใช้การเรียกอ่านแบบเดียวกันได้

const stdin = std.io.getStdIn();

อ่าน stdin ทั้งหมด

ขอ reader จาก stdin แล้วเรียก readAllAlloc ฟังก์ชันนี้จะรวบรวมทุกสิ่งที่ส่งผ่านเข้ามาจนถึงจุดสิ้นสุดของข้อมูลป้อนเข้าไว้ในสไลซ์เดียวที่คุณเป็นเจ้าของ

const input = try stdin.reader().readAllAlloc(a, 1024 * 1024);

อ่านทีละบรรทัด

สำหรับการทำงานแบบสตรีม readUntilDelimiterOrEof ของ reader จะดึงข้อมูลทีละบรรทัดลงในบัฟเฟอร์ และคืนค่า null เมื่อข้อมูลป้อนเข้าสิ้นสุด

const line = try r.readUntilDelimiterOrEof(&buf, '\n');

ใช้บัฟเฟอร์เพื่อความเร็ว

การอ่านดิบแต่ละครั้งอาจเป็นการเรียกใช้ระบบ ห่อ reader ด้วย std.io.bufferedReader เพื่อรวมการอ่านขนาดเล็กจำนวนมากให้เป็นการดำเนินการที่น้อยลงและเร็วขึ้น

var br = std.io.bufferedReader(file.reader());

ไฟล์หรือไพป์ ใช้โค้ดเดียวกัน

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

ตรวจสอบอย่างรวดเร็ว

ลองนึกย้อนดูว่าคุณเปลี่ยนไบต์ของไฟล์ให้เป็นสิ่งที่นำไปใช้ได้อย่างไร

สรุป

คุณเปิดไฟล์ด้วย openFile อ่านไฟล์ทั้งหมดหรืออ่านทีละบรรทัด ดึงข้อความจาก stdin และคืนหน่วยความจำของทุกบัฟเฟอร์ จัดการข้อมูลป้อนเข้าเรียบร้อย 🎯

คำถามที่พบบ่อย

บทเรียน “การอ่านไฟล์และ stdin” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การอ่านไฟล์และ stdin” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การอ่านไฟล์และ stdin”

ส่งอินพุตแบบสตรีมเข้าสู่โปรแกรม คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การอ่านไฟล์และ stdin” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่ง
  2. การอ่านไฟล์และ stdin
  3. การเขียนเอาต์พุตและรหัสจบการทำงาน
  4. จัดแพ็กเกจและเผยแพร่ไบนารี
← กลับไปที่ Zig Academy