A Turing programozási nyelv

Fájlkezelés

Fájl megnyitása

Fájllal kapcsolatot létrehozni (azaz fájlt megnyitni) az open paranccsal lehet, ennek 3 paramétere van:


Példa kód:
open : stream, "example", put open : stream, "example", get
Érdemes minden egyes fájl megnyitás után valamiféle ellenőrzést végezni, hogy sikerült-e a megnyitás.
Példa kód:
assert stream > 0
Ha a stream integer értéke nagyobb mint 0, az azt jelenti hogy a megnyitás sikeres, ekkor a program folytatódik. Ha viszont stream=0, akkor program leáll és a következő hibaüzenetet küldi:
"assert condition false"

Fájl olvasása/írása

Fájlból olvasni a get, fájlba írni a put paranccsal lehet, értelemszerűen ezekhez mindig a megfelelő módon kell a fájlt megnyitni, tehát ha olvasunk (írunk) a fájlból, akkor olvasásra (írásra) kell megnyitni, azaz az open harmadik paramétere get (put) kell hogy legyen.
Fájlba írás úgy történik, hogy a put első paraméterének átadjuk a fájl kapcsolat változóját, a második paraméter pedig hogy mit akarunk a fájlba írni (ez lehet string,integer,real,...)

Példa kód:
put : stream, name put : stream, age
Fájlból olvasás tehát a get-tel. Ennél is az első paraméter a kapcsolat leírására szolgáló változó, a második pedig hogy milyen változóba várjuk a fájlból az értéket. Ez a változó típusa megadja hogy milyen értéket várunk a fájlban. (Fontos hogy a típusok "megfelelőek" legyenek különben hibajelzést kapunk.)
Példa kód:
get : stream, name : * get : stream, age ahol name string, age pedig integer
Mi van akkor ha a fájl nem egészen úgy épül fel, ahogy azt mi várnánk? Például van benne néhány nem várt space, new line karakter. Erre az esetre a következő parancs lehet megoldás:
get : stream, skip
Ez a parancs átugarja az összes ilyen karaktereket (pl:space, new line, new page,...) és a beállítja a olvasó 'pointert' a következő olvasandó adat elejére. Azt is tudnunk kell fájlok olvasásákor, hogy meddig olvashatunk, mikor van vége a fájlnak. Ehhez segítséget a következő parancs ad:
eof (stream) egy turing fájl végéhez egy fájl vége jel van hozzáfűzve. Ez a jel azt jelzi, hogy már nincs több adat amit olvasni lehet. eof(stream) -> értéke true lesz, ha a fájl vége jelet megtaláltuk, ez azt jelenti, hogy nincs több adat amit olvasni lehetne a fájlban Ha a fájl eltér attól, amilyennek mi "be szeretnénk olvasni", akkor hiba léphet fel. Ennek kiküszöbölésére az előző két dolgot fel lehet használni. A megoldás az hogy minden egyes olvasás elé betesszük a következőket:
get : stream, skip
exit when eof (stream)
Ez biztosítja azt hogy egyrészt a fölösleges karaktereket átugorjuk, másrészt ha az átugrások után fájl végére érnénk, akkor se próbáljunk meg beolvasni már.
A beolvasások tehát így néznek ki:
Példa kód:
get : stream, skip exit when eof (stream) get : stream, name : * get : stream, skip exit when eof (stream) get : stream, age ...

Fájl zárása

Fálj lezárása, azaz a kapcsolat megszüntetése a close paranccsal történik:
close : stream
Egy paramétere van, méghozzá a fájl kapcsolat változója. Akár olvasásra, akár írásra nyitottunk meg egy fájlt a lezárás ugyanúgy történik. Nézzünk most akkor egy kis példát. Először létrehozunk egy fájlt, aztán meg felolvassuk:

Példa kód:
var stream, age : int var income : real var name : string open : stream, "example", put assert stream > 0 loop put "Baratod neve vagy \"stop\" a kilépéshez" get name : * exit when name = "stop" put name, " eletkora" get age put name, " fizetese" get income> put : stream, name put : stream, age put : stream, income end loop close : stream

A program segítségével egy fájlt hozunk létre és töltjük fel a begépelt adatokkal. Név, életkor, fizetést írhatunk be, amíg egyszer "stop"-ot nem írunk névhez. Ezeket egy fájlba beírja, a fájl valahogy így néz ki a futás után:
Bármi Áron
37
23234.12
Beviz Elek
86
1123.67
Kukor Ica
35
11235.6
Nagyonit Tas
22
3425.67

A következő kis Példa pedig ezt a fájlt olvassa és a tartalmát kiírja:
Példa kód:
var stream, age : int var income :real var name : string open : stream, "example", get assert stream > 0 loop get : stream, skip exit when eof(stream) get : stream, name : * get : stream, skip exit when eof(stream) get : stream, age get : stream, skip exit when eof(stream) get : stream, income put name:30, age:10, "$",income:0:2 end loop close : stream

Fájl módosítása

Fájlok módosítása, bár nagyon egyszerű egy kissé "fárasztó". A következő eljárással oldható meg fájlok módosítása.
Először is amit módosítani akarunk fáljt azt megnyitjuk olvasásra és egy ideiglenes fájlba (amit persze írásra nyitunk meg) átmásoljuk az eredeti fájl teljes tartalmát. Ezután a módosítandó fájlt nyitjuk meg írásra, és a temp fájlt pedig olvasásra. A temp fájlból az adatokat olvasva, azokon a kívánt műveleteket, módosításokat elvégezve az így kapott, esetleg megváltozott eredményt írjuk bele a fájlba.
Mindezek után már egyszerűen egy olyan kis programot írni, ami mondjuk fájlok írásánál / olvasásánál látott fájlt módosítja. Legyen a feladat a következő: módosítsuk úgy a fentebb látott example fáljt, hogy az összes benne szereplő embernek növeljük meg az életkorát 1-gyel és a fizetését 5000-rel.

Példa kód:
var stream1, stream2, age : int var income :real var name : string open : stream1, "example", get open : stream2, "temp", put assert stream1 > 0 assert stream2 > 0
% example masolasa temp-be loop get : stream1, skip exit when eof (stream1) get : stream1, name : * get : stream1, age get : stream1, income put : stream2, name put : stream2, age put : stream2, income end loop close : stream1 close : stream2
% most valtoztatjuk meg az adatokat es irjuk vissza a fajlba
open : stream1, "temp", get open : stream2, "example", put assert stream1 > 0 assert stream2 > 0 > loop get : stream1, skip exit when eof (stream1) get : stream1, name : * get : stream1, age get : stream1, income put : stream2, name put : stream2, age+1 put : stream2, income+5000 end loop close : stream1 close : stream2