A fájlkezelés bemutatása egy konkrét példán keresztül
Mivel a Lua blokkstruktúrált nyelv, lehetőségünk van létrehozni blokkokat, a blokkokon belül pedig lokális (helyi) változókat, melyek csak az adott blokkon belül elérhetőek. Egy konkrét példa a lokális és globális változók közötti különbség szemléltetésére:
a = \"Szia!\" -- Globális változó deklarálása
do -- Blokk kezdése
local a = \"Nem szia!\" -- Lokális változó deklarálása
end -- Blokk lezárása
print(a) -- A globális változót írja ki, és a lokálist figyelmen kívül hagyja, holott ugyanaz mindkettő neve
Következőleg hozzunk létre egy blokkot, hogy az ott deklarált változók nevei a kód más részeiben is használhatók legyenek, aztán figyeljük meg a blokkba írt kódrészletet.
do
print \"Adj meg egy fajlnevet kiterjesztessel egyutt! (pl.: faj.txt)\"
local fajl = io.stdin:read()
print \"Add meg a neved!\"
local nev = io.stdin:read()
print \"Add meg a szuletesi eved!\"
local ev = tonumber(io.stdin:read())
local kor = os.date(\"%Y\") - ev
end
Létrehoztuk a
fajl,
nev,
ev és
kor lokális változókat. Az első két változó az
io.stdin:read() függvényt kapta értékül. Ez annyit tesz, hogy a konzolba bevitt karakterláncokat tárolja el a változóban. Az
ev változónak a
tonumber(io.stdin:read()) függvényt adtuk értékül. Ez ugyanazt teszi, mint az első két változó esetében az
io.stdin:read() függvény, csak itt számot vár a változó. A
print függvénnyel kiíratjuk, hogy mit is kell beírni az adott változóba.
A
kor változó szemet szúrhat. Ez a változó az
ev változóba bevitt adat és az aktuális év alapján kiszámolja, hogy hány éves az illető. Ezt úgy teszi meg, hogy az aktuális évből kivonja az
ev változó értékét. Tehát ha 1995-öt adok meg születési évnek, akkor a fájlban
kor: 20 fog megjelenni.
local fp = io.open(fajl, \"w\")
local n = fp:write(\"nev: \",nev,\"\\n\")
local e = fp:write(\"kor: \",kor,\"\\n\")
Ismét deklaráltunk három változót, s ezek nem mások, mint az
fp, az
n (a nev rövidítése) és az
e (az ev rövidítése). Az
fp változó értéke egy függvény, amely megnyitja (vagy ha nincs olyan fájl, elkészíti) azt a fájlt, amit korábban begépeltünk a konzolba. Az
n változó a létrehozott fájlba íratja a nevet, amit korábban megadtunk, valamint az
e változó a kort (amit korábban kiszámoltunk) íratja bele a fájl újabb sorába (erre szolgál az
\\n).
if n == true and e == true then
print(\"Az adatok mentesre kerultek a(z)\",fajl,\"fajlban!\")
else
print(\"Nem sikerult a mentes!\")
end
A következő lépés az, hogy megvizsgáljuk a mentés sikerességét, és ha sikerült, akkor a fenti feliratot és a létrehozott fájl nevét kapjuk meg kimenetként.
press()
fp:close()
A korábban létrehozott
press() függvény segítségével létrehozunk egy pause-t, ami egy gombnyomásra vár, majd lezárjuk a kódot az
fp:close() segítségével.
A teljes kód
function press(szoveg)
if szoveg == nil then
print \"Press any key to continue...\\n\"
else
print(szoveg,\"\\n\")
end
io.read()
end
do
print \"Adj meg egy fajlnevet kiterjesztessel egyutt! (pl.: fajl.txt)\"
local fajl = io.stdin:read()
print \"Add meg a neved!\"
local nev = io.stdin:read()
print \"Add meg a szuletesi eved!\"
local ev = tonumber(io.stdin:read())
local kor = os.date(\"%Y\") - ev
local fp = io.open(fajl, \"w\")
local n = fp:write(\"nev: \",nev,\"\\n\")
local e = fp:write(\"kor: \",kor,\"\\n\")
if n == true and e == true then
print(\"Az adatok mentesre kerultek a(z)\",fajl,\"fajlban!\")
else
print(\"Nem sikerult a mentes!\")
end
press()
fp:close()
end