Lua Academy · पाठ

फ़ाइलों में लिखना और सामग्री जोड़ना

फ़ाइलों में स्ट्रिंग लिखें और पुरानी सामग्री मिटाए बिना डेटा जोड़ें।

पाठ 3, कुल 4 में से12 चरण

फ़ाइलों में लिखना और सामग्री जोड़ना, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह 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 में फ़ाइल IO बफ़र किया जाता है। f:write() से लिखा डेटा डिस्क तक पहुँचने से पहले बफ़र में रह सकता है। f: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")
end

io.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()

त्वरित जाँच

io.open में "w" और "a" मोड के बीच क्या अंतर है?

पुनरावृत्ति: फ़ाइलें लिखना

सारांश:

  • f:write(...) — स्ट्रिंग/संख्याएँ लिखता है; अपने-आप नई पंक्ति नहीं जोड़ता
  • "w" फ़ाइल को छोटा करके लिखता है, "a" अंत में जोड़ता है
  • f:flush() बफ़र को डिस्क पर लिखने के लिए बाध्य करता है
  • io.write() डिफ़ॉल्ट आउटपुट (stdout) में लिखता है
  • परमाणु लेखन: अस्थायी फ़ाइल में लिखें, फिर नाम बदलें
  • प्रोडक्शन में लेखन के लौटाए गए मानों की जाँच करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Lua सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
40
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “फ़ाइलों में लिखना और सामग्री जोड़ना” पाठ निःशुल्क है?

हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “फ़ाइलों में लिखना और सामग्री जोड़ना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“फ़ाइलों में लिखना और सामग्री जोड़ना” में मैं क्या सीखूँगा?

फ़ाइलों में स्ट्रिंग लिखें और पुरानी सामग्री मिटाए बिना डेटा जोड़ें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“फ़ाइलों में लिखना और सामग्री जोड़ना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. io.open से फ़ाइलें खोलना
  2. फ़ाइल की सामग्री पढ़ना
  3. फ़ाइलों में लिखना और सामग्री जोड़ना
  4. फ़ाइलें बंद करना और त्रुटियाँ संभालना
← Lua Academy पर वापस जाएँ