Szerző Téma: [Leírás] Fájlkezelés  (Megtekintve 1667 alkalommal)

[Leírás] Fájlkezelés
« Dátum: 2015. november 01. - 18:58:09 »
0 Show voters
Sziasztok!
Ebben a tutorialban a Lua-ban elérhető fájlkezelésről lesz szó. A fájl fordításához le kell töltenetek a Lua for Windows projektet, mely tartalmaz egy SciTE szerkesztőt is, beépített fordítóval. Ide kattintva letölthetitek.
A Lua önmagában is egy kényelmes, könnyen tanulható, átlátható kódot eredményező script alapú programozási nyelv. A fájlkezelés sem túl bonyolult, egy kis logikával pedig egyszerűen készíthetünk látványos dolgokat.
 
A példákban használt függvények
 

print() -- Kiíratásra szolgáló függvény
io.stdin:read() -- A konzolba írt string típusú tartalmat olvassa be
tonumber(io.stdin:read()) -- A konzolba írt number (float, integer, double) típusú tartalmat olvassa be
os.date(\"%Y\") -- Az aktuális évet visszaadó függvény
io.open(\"fájlnév\", \"r\") -- Beolvassa a megadott fájlt
io.open(\"fájlnév\", \"w\") -- A fájl írását teszi lehetővé
valtozonev:write(\"szöveg\") -- Ír valamit a fájlba
press() -- Egy általam létrehozott függvény, ami ha nem írsz semmit a függvénybe, kiírja, hogy \'Press any key to continue...\', vagy ha az értéke nem \'nil\' (írsz valamit a függvénybe), azt adja vissza, és kirak egy io.read() függvényt
valtozonev:close() -- A valtozonev:open() függvény zárópárja

 

A press() függvény kódja:
 

function press(szoveg)
if szoveg == nil then
print \"Press any key to continue...\\n\"
else
print(szoveg,\"\\n\")
end
io.read()
end

 

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
« Utoljára szerkesztve: 2015. november 01. - 19:01:26 írta ReSIk »

Nem elérhető Xenius

  • 668
    • Profil megtekintése
[Leírás] Fájlkezelés
« Válasz #1 Dátum: 2015. november 01. - 19:35:23 »
+1 Show voters
Az mta többségében nem kezeli ezeket amiket most ide leírtál. Viszont hasznos lehet annak aki máshol is használja/használná a lua nyelvet.

[Leírás] Fájlkezelés
« Válasz #2 Dátum: 2015. november 01. - 20:48:47 »
0 Show voters
Értem. Hát biztos van itt olyan, aki használja más területen a Lua-t. Én például C helyett is Lua-t használok, akár konzolos applikációk elkészítésére is, mert sokkal egyszerűbb vele dolgozni. :) A programozóközössége viszont kisebb, mint mondjuk a PHP-nak vagy a Pythonnak.
« Utoljára szerkesztve: 2015. november 01. - 20:52:38 írta ReSIk »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal