การเขียนและเพิ่มข้อมูลลงไฟล์
เขียนข้อความลงไฟล์และเพิ่มข้อมูลโดยไม่เขียนทับข้อมูลเดิม
การเขียนและเพิ่มข้อมูลลงไฟล์ เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
พื้นฐาน f:write()
f:write(...) เขียนสตริง (หรือตัวเลข) อย่างน้อยหนึ่งค่าไปยังไฟล์ โดยจะไม่เพิ่มอักขระขึ้นบรรทัดใหม่โดยอัตโนมัติ เมื่อสำเร็จจะคืนค่าแฮนเดิลไฟล์ (จึงสามารถต่อการเรียกใช้งานได้) หรือคืนค่า nil, errMessage, errCode เมื่อไม่สำเร็จ
local f = io.open("output.txt", "w")
if f then
f:write("Hello, ")
f:write("World")
f:write("!\n")
f:write("Line 2\n")
f:close()
endการเขียนค่าหลายค่า
f:write() รับอาร์กิวเมนต์หลายค่าและเขียนทั้งหมดตามลำดับ ค่าที่ส่งต้องเป็นสตริงหรือตัวเลข การส่งค่าชนิดอื่นจะทำให้เกิดข้อผิดพลาด ใช้ tostring() เพื่อแปลงค่าบูลีน ตาราง และค่าอื่น ๆ
local f = io.open("log.txt", "w")
f:write("Name: ", "Alice", "\n")
f:write("Age: ", 30, "\n")
f:write("Score: ", string.format("%.1f", 95.5), "\n")
f:close()การเขียนแบบจัดรูปแบบ
ใช้ string.format ร่วมกับ f:write เพื่อควบคุมเอาต์พุตอย่างแม่นยำ รูปแบบนี้ใช้กันทั่วไปในการสร้างรายงาน ไฟล์บันทึก และการส่งออกข้อมูลที่มีข้อกำหนดด้านรูปแบบเฉพาะ
local data = {
{name="Alice", score=95, grade="A"},
{name="Bob", score=87, grade="B"},
}
local f = io.open("report.txt", "w")
f:write(string.format("%-12s %5s %s\n","Name","Score","Grade"))
f:write(string.rep("-",25) .. "\n")
for _, r in ipairs(data) do
f:write(string.format("%-12s %5d %s\n",r.name,r.score,r.grade))
end
f:close()โหมดต่อท้าย
โหมด "a" จะเขียนต่อท้ายไฟล์เสมอ ตำแหน่งไฟล์สำหรับการอ่านจะอยู่ที่จุดเริ่มต้น แต่การเขียนจะไปยังท้ายไฟล์เสมอ ใช้สำหรับบันทึก เส้นทางการตรวจสอบ และไฟล์ทุกชนิดที่ต้องการเพิ่มข้อมูลโดยไม่ลบข้อมูลเดิม
local function appendLog(msg)
local f = io.open("app.log", "a")
if f then
local ts = os.date("%Y-%m-%d %H:%M:%S")
f:write(string.format("[%s] %s\n", ts, msg))
f:close()
end
end
appendLog("Server started")
appendLog("User logged in: Alice")
appendLog("Request processed")f:flush() และการพักข้อมูลในบัฟเฟอร์
การทำงานกับไฟล์ใน Lua ใช้บัฟเฟอร์ ข้อมูลที่เขียนด้วย f:write() อาจค้างอยู่ในบัฟเฟอร์ก่อนถูกส่งไปยังดิสก์ f:flush() จะบังคับให้เขียนข้อมูลในบัฟเฟอร์ลงดิสก์โดยไม่ปิดไฟล์ โปรดเรียกใช้ flush เสมอก่อนที่ต้องการให้กระบวนการอื่นมองเห็นข้อมูล
local f = io.open("stream.txt", "w")
for i = 1, 5 do
f:write("Line " .. i .. "\n")
f:flush() -- ensure each line is on disk
-- simulate work
end
f:close()การเขียนข้อมูลไบนารี
ในโหมดเขียนไบนารี ("wb") ให้เขียนไบต์ดิบด้วย string.char() วิธีนี้ใช้สร้างรูปแบบไฟล์ไบนารี รูปภาพ หรือข้อความของโพรโทคอล ใช้ string.pack (Lua 5.3 ขึ้นไป) สำหรับข้อมูลไบนารีที่มีโครงสร้าง
local f = io.open("bytes.bin", "wb")
if f then
-- Write raw bytes
f:write(string.char(0xFF, 0x00, 0xAB, 0xCD))
-- Write a 4-byte little-endian integer (Lua 5.3+)
f:write(string.pack("<I4", 12345))
f:close()
print("Written binary file")
endio.write กับ f:write
io.write() เขียนไปยังเอาต์พุตเริ่มต้นปัจจุบัน (เริ่มแรกคือ stdout) ส่วน f:write() เขียนไปยังแฮนเดิลไฟล์ที่ระบุ ต่างจาก print() ทั้งสองฟังก์ชันจะไม่เพิ่มอักขระขึ้นบรรทัดใหม่หรือตัวคั่นแท็บ ทำให้คุณควบคุมรูปแบบเอาต์พุตได้อย่างเต็มที่
-- io.write to stdout
io.write("Enter name: ")
-- (would read input here)
-- f:write to file
local f = io.open("out.txt", "w")
f:write("No auto newline")
f:write(" appended directly")
f:write("\n") -- explicit newline
f:close()
-- print adds tabs and newline automatically
print("a", "b", "c") -- a b c (tab-separated)รูปแบบการเขียนแบบอะตอมิก
เพื่อความปลอดภัย ให้เขียนลงไฟล์ชั่วคราวก่อน แล้วจึงเปลี่ยนชื่อไฟล์ วิธีนี้หลีกเลี่ยงช่วงเวลาที่ไฟล์เอาต์พุตถูกเขียนเพียงบางส่วน หากกระบวนการหยุดทำงานระหว่างการเขียน ไฟล์เดิมจะยังไม่ถูกเปลี่ยนแปลง
local function atomicWrite(path, content)
local tmp = path .. ".tmp"
local f, err = io.open(tmp, "w")
if not f then return nil, err end
f:write(content)
f:close()
-- os.rename is atomic on most filesystems
local ok, err2 = os.rename(tmp, path)
if not ok then
os.remove(tmp)
return nil, err2
end
return true
endการเขียนตารางเป็น CSV
ทำให้ตารางระเบียนเป็นรูปแบบ CSV โดยเขียนแถวหัวตารางก่อน จากนั้นเขียนหนึ่งแถวต่อหนึ่งระเบียน แปลงค่าทั้งหมดเป็นสตริงและเชื่อมค่าด้วยจุลภาค
local function writeCSV(path, headers, rows)
local f = io.open(path, "w")
if not f then return end
f:write(table.concat(headers, ",") .. "\n")
for _, row in ipairs(rows) do
local fields = {}
for _, h in ipairs(headers) do
fields[#fields+1] = tostring(row[h] or "")
end
f:write(table.concat(fields, ",") .. "\n")
end
f:close()
end
writeCSV("data.csv",
{"name","age","score"},
{{name="Alice",age=30,score=95},{name="Bob",age=25,score=87}}
)ค่าที่ f:write คืนกลับ
f:write() คืนค่าแฮนเดิลไฟล์เมื่อสำเร็จ จึงสามารถต่อการเรียกเมธอดได้ เมื่อไม่สำเร็จจะคืนค่า nil ข้อความข้อผิดพลาด และรหัสข้อผิดพลาด โปรดตรวจสอบข้อผิดพลาดในโค้ดที่ใช้งานจริงเสมอ โดยเฉพาะการเขียนบนระบบที่มีพื้นที่จัดเก็บจำกัด
local f = io.open("out.txt", "w")
-- Chaining writes
local ok, err = f:write("line1\n"):write("line2\n"):write("line3\n")
if not ok then
print("Write failed:", err)
else
print("All writes succeeded")
end
f:close()ตรวจสอบอย่างรวดเร็ว
โหมด "w" และ "a" ใน io.open แตกต่างกันอย่างไร
สรุป: การเขียนไฟล์
สรุป:
f:write(...)— เขียนสตริง/ตัวเลข และไม่เพิ่มบรรทัดใหม่โดยอัตโนมัติ"w"ตัดข้อมูลเดิม ส่วน"a"เขียนต่อท้ายf:flush()บังคับให้เขียนบัฟเฟอร์ลงดิสก์io.write()เขียนไปยังเอาต์พุตเริ่มต้น (stdout)- การเขียนแบบอะตอมิก: เขียนลงไฟล์ชั่วคราวแล้วเปลี่ยนชื่อ
- ตรวจสอบค่าที่คืนจากการเขียนในโค้ดที่ใช้งานจริง
เรียนรู้ Lua ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 40
- บทเรียน
- 159
คำถามที่พบบ่อย
บทเรียน “การเขียนและเพิ่มข้อมูลลงไฟล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเขียนและเพิ่มข้อมูลลงไฟล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียนและเพิ่มข้อมูลลงไฟล์”
เขียนข้อความลงไฟล์และเพิ่มข้อมูลโดยไม่เขียนทับข้อมูลเดิม คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียนและเพิ่มข้อมูลลงไฟล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเปิดไฟล์ด้วย io.open
- การอ่านเนื้อหาไฟล์
- การเขียนและเพิ่มข้อมูลลงไฟล์
- การปิดไฟล์และการจัดการข้อผิดพลาด