Upload failed. Maybe wrong permissions?

User Tools

Site Tools



15. Adatállományok

15-0.jpg
  

27:27
1985. április 24.
MTV 2. csatorna, 19:30

Bevezető

15-1.jpgDr. Kocsis András Commodore 64
  0:41 Köszöntöm önöket. A két adás között a stúdió leltározását befejeztük, az adatállományunkat elkészítettük, és készen áll a feldolgozásra. Ebben az adásban a feldolgozást és a módosítást fogjuk megtárgyalni. Az alapfeladatunk az volt, hogy a stúdióban levő anyagokról egy készletjelentést készítsünk. Mit tartalmaz egy készletjelentés? Az egyes anyagoknak az adatait, tehát hogy hívják az anyagot, mennyi van belőle, és mi az értéke. Tehát ez azt jelenti, hogy az adatállománynak minden rekordja egy sort fog képviselni a készletjelentésben. Hogyan tudjuk ezt a programot elkészíteni, milyen műveletekből fog állni ez a program? Először is az adatállományt meg kell nyitni, tehát kapcsolatot kell létrehoznunk a program és a file között – így is mondhatjuk az adatállományt. 15-2.jpgUtána beolvassuk az első rekordot, kiírjuk, utána a következő rekordot olvassuk be, megint kiírjuk. Tehát egy ciklikus műveletet fogunk végrehajtani.
  15-3.jpg
  Az a kérdés, hogy ezt a ciklust meddig kell ismételni. Hát mindaddig, amíg van rekord az adatállományban. De honnan tudjuk, hogy hol az adatállomány vége? Amikor létrehoztuk az adatállományt, akkor mi mondtuk meg a gépnek, hogy mikor fejezze be az adatállomány készítését. Most viszont a gép fog nekünk szólni, hogy mikor van vége az adatállománynak, vagyis tudatja velnk, hogy most már több rekordot nem tud beolvasni. Ilyenkor ezt a ciklust be kell fejezni és az adatállományt le kell zárni. Valamennyi feldolgozási műveletnek ez a lényege. Nagyon fontos megjegyezni azt, hogy az adatállomány feldolgozása során az adatállomány tartalma nem változik meg. Most pedig nézzük meg részletesen a készletjelentés-készítő programot.

Készletjelentés

15-4.jpgPinkert László Commodore 64
  2:37 Ahogyan a múltkor ígértük, leltároztunk a stúdióban és létrehoztunk egy adatállományt, ezt fogjuk majd olvasni a következő program segítségével. Készlet, vagyis készletjelentés a program címe, az első végrehajtható utasítás pedig egy OPEN utasítás, amely egyetlen betűben különbözik attól, amellyel a múltkor az állományt írásra nyitottuk meg. Itt ugyanis nem írni akarunk az állományba, hanem olvasni azt, és ezért nem W, hanem R jelet használunk ezen a pozíción.
  

15-5.jpg15-6.jpg

  R angolul read, vagyis olvas rövidítése. A többi paraméter ugyanaz és ugyanazt jelenti, mint a múltkor. Emlékeztetőül szaladjunk végig rajtuk. Az első szám logikai hivatkozási szám. A PRINT utasítás, és mint majd látni fogjuk, az INPUT utasítás is ezzel a számmal hivatkozik a megnyitott állományra. A következő, a nyolcas itt ismét a lemezegységnek a logikai száma. A kettes csatornaszám – amint említettem, erről többet nem érdemes megjegyezni. ANYAG, ez az állománynak a neve. Szükségképpen, mert hiszen a múltkor ezzel a névvel írtuk fel a lemezre. És szekvenciális állományról van szó, ezt jelzi az S betű.
  Ezek után következik az adatok beolvasása. Nem meglepő, hogy itt is INPUT utasítással történik, ugyanazzal a kiegészítéssel, amit a múltkor a PRINT utasításnál láttunk, vagyis egy kettőskereszt és utána a logikai hivatkozási szám jelzi, hogy melyik állományból akarunk olvasni. Ezek után változónevek következnek vesszővel elválasztva, felsorolásszerűen, pontosan ugyanúgy, ahogy a képernyőn, illetve a billentyűzeten használatos INPUT utasításnál. Tehát először egy azonosítót olvasunk be, ez kerül az A változóba, ezután a nevet, a mennyiségi egységet, a mennyiséget és az árat. A kiíráshoz készítettünk egy fejlécet, amely PRINT utasításból áll, AZONOSÍTÓ és NÉV a fejléc, ezek után következik az azonosító és a név kiírása valójában, egy elválasztó üres sor, felirat: EGYSÉG és MENNYISÉG – itt egy számítást is el kell végezni, mert ebben a sorban még az értéket szeretnénk feltüntetni, ez nyilván a mennyiségnek és az árnak a szorzata lesz, ez lesz az ER, vagyis az érték változó. Ezeket is kiíratjuk a képernyőre, majd hagyunk három üres sort. És következik egy vizsgálat. Itt ugyanis a gépnek kell megvizsgálni, illetve ebben az esetben a programnak, hogy van-e még újabb rekord, újabb sor ebben az adatállományban. A számítógépnek (ti. konkrétan a Commodore-nak – L. A. D.) erre van egy változója, ami semmi másra nem használható, ez az ST (státusz) változó, amelyről itt most csak annyit érdemes megjegyezni, hogy amennyiben ez 64-gyel egyenlő egy bizonyos beolvasási utasítás után, tehát az INPUT utasítás után, akkor ennek az adatállománynak a végére értünk, több rekordot már nem tudunk beolvasni. Tehát ahogy láttuk, amennyiben ez 64, akkor a 260-as utasításra, vagyis a lezárásra ugrunk. Amennyiben nem, akkor itt még két egyszerű kiegészítő sort látunk, hogy ne fusson a programlista a képernyőn, ezért beraktunk egy GET utasítást és egy visszaugrást ugyanerre a sorra, vagyis amíg nem nyomunk meg egyetlen billentyűt sem a billentyűzeten, addig a gép áll, nem ír újabb adatrekordot a képernyőre. Nézzük meg most ezek után a lezárást: a lezárás pontosan ugyanúgy történik, mint írás után, CLOSE és a logikai hivatkozási szám, itt kettő.
  Megemlítem még, hogy ahogy felhívtam a figyelmet, hogy írás után ezt a lezáró utasítást nem szabad elfelejteni, úgy itt megemlítem, hogy itt nem annyira veszélyes, hogyha elfelejtjük a CLOSE utasítást, vagyis hogyha nem zárjuk le az állományt, ezzel az állomány maga nem sérül meg, legfeljebb a program futásában keletkezhet logikai hiba. Ha esetleg egy le nem zárt állományt kívánnánk újra megnyitni.
  15-7.jpgMost pedig, a hosszú, de szükséges magyarázat után, nézzük meg, hogy valójában működik-e ez a program. A lemezmeghajtó megindult… és fölírta az első rekordot a képernyőre. Az első rekord olyan sok mezőből állt, hogy egy sorba nem tudtuk kiírni, ezért ami a lemezen volt, az ugye az 1-es, az azonosító, a név, a Commodore, a darab, a 2, vagyis a mennyiség, és a 100 000, mert ugye kétszer 50 000, a múltkor ötvenezret adtunk meg értéknek. Ez került a képernyőre, most egyetlen billentyű lenyomásával láthatjuk a következő, négy sorba kiférő állományrészletet, és így tovább. Amennyiben a billentyűt folyamatosan nyomom, a meghajtó időnként megindul, és a számítógép folyamatosan képernyőre listázza az adatállományt.
  
15-8.jpg15-9.jpg

  
15-10.jpg15-11.jpg

  
15-12.jpg15-13.jpg

  Most pedig egy rövid kiegészítésre kanyarodjunk vissza ismét a programlista elejére, oda, ahol az OPEN utasítást láttuk. Szó volt róla, hogy az S itt a szekvenciális típusú adatállománynak a rövidítése. Felmerül a kérdés, hogy milyen lehet még. Hát létezik úgynevezett direkt vagy közvetlen elérésű adatállomány. A kettő közötti alapvető különbség az elérés módjában van, ahogyan ezeket a rekordokat írni, illetve olvasni tudjuk. Amennyiben S-sel, vagyis szekvenciális típusú állománnyal foglalkozunk, akkor a rekordok írása-olvasása csak sorrendben történhet, az elsőnél elkezdve és haladva folytonosan, mindig tovább és tovább, az adatállomány végéig. Direkt elérésű állományban azonban az egyes rekordoknak van valamilyen azonosítójuk, címük, amely szerint nem kell sorban haladni az eléréskor, hanem például kiválaszthatjuk, hogy most azt a bizonyos rekordot szeretnénk olvasni, aminek az azonosítója mondjuk 314, és a gép, illetve a lemezegység együttműködve kikeresi ezt a rekordot az adatállományból, anélkül, hogy az előző mondjuk 313-at végigolvasná. Ilyen módon tehát egészen másfajta programok írására alkalmas a direkt elérésű állomány, mint a szekvenciális. Még talán annyit hozzá lehetne ehhez tenni, hogy ahol nagy tömegű adat egyszerű lemezen való tárolásáról van szó, mint például ebben az esetben, itt elegendő a szekvenciális típusú állományt használni, amennyiben viszont olyan adatállományt használunk, amelyet gyakran kell módosítani, vagyis ki kell venni egyes rekordokat, elő kell keresni, akkor szimpatikusabb, egyszerűbb a direkt elérés. Természetesen ennek technikai feltételei is vannak.

Módosítás

15-14.jpgDr. Kocsis András Commodore 64
  10:28 Mi történik akkor, ha valaki ezt a Commodore számítógépet kiviszi innen a stúdióból? Ebben az esetben az adatállományunk elveszti érvényét, hiszen nem a tényhelyzetnek megfelelő adatokat tartalmaz. Ebben az esetben nyilvánvalóan módosítanunk kell az adatállományt, hogy a tényleges helyzetnek megfelelő adatokat tartalmazza. De hogyan hajtható ez végre? Nyilvánvalóan arról van szó, hogy az adatállományon belül meg kell keresni azt a rekordot, amelyben a Commodore adatait tároljuk, és itt a darabszámot eggyel csökkentve vissza kell írni, s az összes többi rekordot az adatállományban változatlanul kell hagyni. Soros adatállományok esetén ez sajnos közvetlenül nem végezhető el, csak több lépésben. Direkt címzésű adatállományok esetében viszont ez egyetlen művelettel elvégezhető. Hogyan tudjuk akkor mi soros adatállományok esetén ezt a műveletet elvégezni? Tudjuk azt, hogy egy adatállományt vagy írásra, vagy olvasásra nyithatunk meg, mind a kettőre nem. Tehát azt kell tennünk, hogy a meglévő adatállományunkat, amelynek a neve ANYAG, megnyitjuk olvasásra, hiszen arról be tudunk olvasni adatokat, és ezzel egyidejűleg megnyitunk egy másik adatállományt, nevezzük ezt ÁTMENETI adatállománynak, azt viszont írásra nyitjuk meg. Az ANYAG adatállomány rekordjait egymás után átmásoljuk erre az ÁTMENETI adatállományra, mindaddig, amíg meg nem találjuk a Commodore számítógépnek a rekordját. Ha ezt megtaláltuk, akkor itt a darabszámot eggyel csökkentve, de átmásoljuk az ÁTMENETI adatállományra, majd az összes többi rekordot szintén változatlanul átmásoljuk az ÁTMENETI állományra. Ezzel tulajdonképpen a műveletet végrehajtottuk. Mit kaptunk eredményül? 15-15.jpgKaptunk két adatállományt, az ANYAG nevezetű adatállomány az érvényét vesztette, és van egy ÁTMENETI nevű adatállomány, amely érvényes, viszont más néven szerepel a mágneslemezen, mint amit a feldolgozóprogramok ismernek. Tehát ennek a nevét meg kell változtatni ANYAG-ra. Hogyan tudjuk ezt elvégezni? Ezt is csak két lépésben, hiszen nem tudjuk most közvetlenül átváltoztatni a nevét ANYAG-ra, mert akkor két ilyen nevű file lenne. Ezért azt kell csinálnunk, hogy a régi ANYAG állományt töröljük előbb egy utasítással, majd az ÁTMENETI adatállománynak a nevét megváltoztatjuk az ANYAG névre. Ezzel elvileg a műveletet be is fejeztük, és most nézzük meg, hogy program szintjén hogy tudjuk ezt megoldani.

A Módosítás program

15-16.jpgPinkert László Commodore 64
  13:24 Az adatállományt módosító programban megtaláljuk az előbb említett funkcionális egységeket. A program egy INPUT utasítással kezdődik, amelyben kéri annak a rekordnak az azonosítóját, amelyet módosítani kívánunk. Ezután következik a két állomány megnyitása. 15-17.jpgAz egyik az, amelyikből olvasunk, vagyis az ANYAG nevű állomány, a másik pedig egy ÁTMENETI, amelybe a kiolvasott rekordokat módosítás nélkül vagy módosítással átírjuk. Egy INPUT utasítással olvasunk az ANYAG állományból, és egy PRINT utasítással pedig írunk az ÁTMENETI állományba. A kettő között vizsgáljuk meg, hogy egyenlő-e a két azonosító, vagyis a beolvasott rekord azonosítója a keresett rekord azonosítójával. Amennyiben egyenlő, akkor a módosítást a 320-as sornál fogjuk kezdeni. Ha nem egyenlő, akkor változatlanul kiírjuk, és megvizsgáljuk, hogy a státusz… mert ebben a VJ változóban, a vége jelben a státuszt tároltuk el; azért történt ez, mert a PRINT# utasítás ezt a változót megváltoztatja, nekünk pedig arra van szükségünk, hogy az olvasott állomány, vagyis az ANYAG nevű állománynak a végét figyeljük. Amennyiben tehát ez véget ér, akkor kiírjuk, hogy nincs ilyen azonosító, nem találtunk ilyen rekordot, az állományt lezárjuk és új azonosító kérésével kezdjük újra a programot.
  15-18.jpgMost pedig nézzük meg azt az esetet, amikor megtaláltuk a kérdéses rekordot és módosítani kívánjuk. Ez a részlet úgy kezdődik, hogy PRINT utasításokkal az egész rekordot képernyőre írjuk, hogy meggyőződhessünk róla, hogy valóban ez az, amit módosítani kell. Ezek után megkérdezzük, hogy mennyi a kivett mennyiség, ez egy szám lesz; ki kell vonni a beolvasott mennyiségből, és az új mennyiséget egy MM változóban tároljuk; az új adatállományba már ezt az MM változót írjuk ki mennyiségként. Ezzel gyakorlatilag a módosítást lényegileg befejeztük. Következik a módosítás nélkül átmásolandó rekordoknak a másolása. INPUT utasítás és PRINT utasítás egymás után, teljesen változatlan formában. Itt is szükség van a státuszváltozónak a tárolására külön, amit megvizsgálunk itt az 530-as utasításban; amennyiben az olvasott, vagyis az ANYAG állománynak a végére értünk, mind a kettőt le kell zárni.
  Most értünk el ahhoz a ponthoz, hogy van két állományunk a lemezen, az egyik a régi, rossz, ez az ANYAG nevű, és van egy új, egy helyes, az ÁTMENETI. Ezért meg kell nyitni a lemeznek (ti. a lemezegységnek – L. A. D.) az úgynevezett parancscsatornáját, a parancscsatorna a tizenötös – ez a tizenötös szám (az 550. sor végén álló – L. A. D.) jelzi a csatornának a számát –, ezen a csatornán lehet parancsokat adni a lemezmeghajtónak. Ebben az esetben azt a parancsot adjuk, hogy törölje – ez az S a törlésnek a jele (560. sor – L. A. D.) –, törölje az ANYAG nevű állományt. A következő parancsunk pedig az, hogy adjon új nevet az ÁTMENETI nevű állománynak, és ez az új név legyen ANYAG. 15-19.jpgTehát letöröltük az ANYAG nevűt, és most már ugyanezt a nevet, vagyis az ANYAG nevet átadhatjuk egy másik állománynak. Ezek után ezt a parancscsatornát lezártuk, és ezzel a módosítás befejeződött.
  Próbáljuk ki a programot. Például úgy, hogy egy Primo számítógépet kiviszünk a teremből – ebben az esetben, ha jól emlékszem, kettő volt, de ezt majd meg fogjuk látni –, szóval eggyel csökkenteni kell a darabszámot. Az anyag azonosítója hatos volt.
  15-20.jpg
  15-21.jpgMost természetesen ki kell várni, hogy a gép megkeresse, meg is találta, azonosító hatos, név PRIMO, két darab, ára húszezer. A kivett mennyiség, hát egyet mondtam, hogy kiveszünk. Most történik a javított és a módosítatlanul átírásra kerülő rekordoknak a rögzítése… kivárjuk a program végét… ezzel befejezte. Természetesen most meg lehetne győződni arról, hogy valóban ez az új állomány megfelelő, át van-e javítva benne a rekordnak a mennyisége, ehhez azonban az lenne szükséges, hogy betöltsük azt a programot, amely ezt a felsorolást meg tudja csinálni. Nyilván észrevették, hogy mind a három művelethez külön-külön egy-egy programot töltöttünk a gépbe, vagyis az állománykezeléshez, minden egyes művelethez külön program szükséges. Ez természetes is, hiszen nincsen egy időben szükség arra, hogy az állományt bővítsük, módosítsuk és mondjuk töröljük, mert hiszen ez is egy funkció lehet, hanem egyszerűbb lemezen ezeket a rövid programocskákat tárolni, s minden alkalommal egyet-egyet szükség szerint betölteni a gépbe.

Menüprogram

15-22.jpgHerneczki Katalin Commodore 64
  19:07 Korábbi adásainkban csak olyan feladatokkal találkoztunk, amelyeket egy programmal lehetett megoldani. Ez volt az első olyan alkalom, ahol egy feladatot nem egy, hanem több programmal oldottunk meg, jelen esetben hárommal, az állománylétrehozó programmal, a készletnyilvántartással, illetve az anyagok kiadását elvégző módosítóprogrammal. Természetesen előfordulhat az is, hogy ezen kívül más funkciókat is el kell látni a feladatnak, tehát például nemcsak anyagkiadással, hanem anyagbevétellel is foglalkozni kell. (Erre valójában a Módosítás program is alkalmas: ha kivett mennyiségként negatív számot adunk meg, a nyilvántartott készlet nem csökkenni, hanem nőni fog. – L. A. D.) Tehát a programrendszerünk – nyugodtan nevezhetjük ezt már programrendszernek – tovább kell, hogy bővüljön. A gyakorlati életben, bonyolultabb feladatok esetében szinte mindig programrendszereket kell írnunk. Természetesen az sem kikötés, hogy csak egy adatállományunk lehet, gyakran több adatállományt kell kezelni, több programnak. 15-23.jpgNos, ahhoz, hogy igazán áttekinthető legyen a program működtetése, üzemeltetése során, hogy mit mikor kell elvégezni, és persze hogy spóroljunk egy kis munkát is magunknak, célszerű egy olyan programot írni, amely kiírja számunkra a lehetséges programok címét és megkérdezi, hogy melyiket óhajtjuk lefuttatni, és nem nekünk kell betölteni, hanem a begépelés után a gép automatikusan betölti és futtatja a programot, majd ismét megkérdezi, hogy óhajtunk-e más programot futtatni, és azt is lefuttatja, ha annak a kódját begépeljük. Mi is írtunk egy ilyen menüprogramot, amely kiírja a Készletjelentés, Bevételezés, illetve Kiadás programoknak a nevét, ezeket futtathatjuk, egyes, kettes, illetve hármas begépelésének hatására betölti és futtatja. Nézzük meg a program működését.
  15-24.jpg
  Tehát RUN. Válasszuk ki az első műveletet, a Készletjelentés program végzi el, tehát az egyest begépeljük, és ilyenkor a gép elkezdi betölteni a programot. Betöltés után pedig várhatjuk az eredményt. Meg is jelent az első sor, és ezután szépen egymás után kiírathatjuk az eredményeket.
  A program futása befejeződött. Ilyenkor ismét a menüprogramot tölti vissza a rendszer (nyilván időközben beírták az egyes részprogramok végére, hogy töltse vissza – L. A. D.), és várja tőlük, hogy begépeljük az újabb programot, amit kiválasztunk. Hát van egy négyes funkció is, a befejezés. Nos, ha többet nem akarunk választani, akkor a négyest kell begépelni, és ezután a menüprogram futása befejeződött.
  A gyakorlati életben azért is hasznos az ilyen menüprogram használata, mert nem mindig olyan embereknek kell kezelni a számítógépet, használni a számítógépet, akik a programozásban járatosak, tehát nem nekik kell betölteni a programot, hanem nekik csak ki kell választani, hogy a gép mit töltsön be.

Alkalmazások

15-25.jpgKiss Donát Commodore 64
  22:13 Ilyen és ehhez hasonló adatállomány-kezelő programokra az élet nagyon sok területén szükség van, és igen elterjedten használják is őket. A közhiedelemmel ellentétben azonban ezeket nem csak bérszámfejtésre és különböző munkaügyi programokra, műveletekre lehet használni, hanem sokkal szélesebb körökben is alkalmasak az életünk megkönnyítésére. Gondoljunk csak például a készletgazdálkodási problémákra, amelyek valószínűleg mindannyiunk számára nagy vállalati készleteket jelentenek, de ez egészen emberi méretekben, mondjuk egy cukrász kisiparos környezetében vagy nagyságrendjében is probléma, és igen sok adminisztrációt igényel. Valószínűleg sokat segíthet mondjuk a nyári fagylaltidőszakban különösen egy cukrász életén, ha van egy olyan programja, amelynek segítségével mindennap pontosan tudja, hogy éppen a következő nap vagy a következő héten milyen alapanyagokat kell beszereznie. Vagy vegyük például a repülést és a légiforgalmat. Ebben már nagyon régen, ezen a szakterületen már több éve használják a számítástechnikai adatállományokat kezelő programokat, hiszen ezek nélkül nem valószínű, hogy lebonyolítható lenne a maihoz hasonló forgalom. Igen sok példát lehetne mondani például az orvosok feladatköréből is. Gondoljuk csak meg, hogy ha a fogorvosnak mondjuk módja van egy ilyen vagy ehhez hasonló adatállomány-kezelő programot használnia, akkor bármikor elő tudja hívni azt az adatot, hogy például Kiss József, a páciensnek a bal felső hármas foga mikor volt legutoljára idegkezelve, s ennek megfelelően lehet dönteni majd a további kezelésről.
  Természetesen a személyi számítógépek világában is igen sok ilyen program van, és egyre több hasonló programcsomagot lehet látni a piacon. Ezek használata ugyan nem minden esetben jelent spórolást, hiszen a gyakran talán kicsit túlzottan is hirdetett kiadás-nyilvántartó programcsomagok valószínűleg nem vezetnek takarékossághoz, hiszen ha vettünk egy liter tejet, nem valószínű, hogy hazaérve az lesz az első dolgunk, hogy betöltjük a floppyról – különösen esetleg egy lassú kazettás magnetofonról – az adatállományunkat, és azt felfrissítjük. Ugyanakkor hasznos lehet ez jó néhány területen, például a karácsonykor megajándékozandók vagy hát „üdvözlőlapot kinek kell küldeni” című adatállomány, hiszen ez énnekem például minden évben komoly fejtörést okoz, és nem beszélve arról, hogy ezt az adatállományt is fel kell frissíteni, kezelni kell, hiszen akitől már két éve egy árva sort sem kaptunk, annak az idén már mi sem írunk valószínűleg.
  Ily módon arra számítunk, hogy ez a fogalomkör – úgy is, mint adatállomány-kezelés – igen hasznos lesz majd ezen ismeretek sorában, és mindazok, akik ezek után nem fognak távolodni, hanem közeledni fognak a számítástechnikához, valószínűleg találkozni fognak majd egyre több ilyen programmal, és a bátrabbak remélhetőleg – először talán egyszerűbb programok révén – maguk is vállalkoznak majd ilyenek megírására.
  Evvel a témakörrel tulajdonképpen le is zártuk – vagy eljutottunk a sorozat tartalmi, hát, végéhez. A következő adásban a vizsgára készülésnek a módjáról, illetve az ehhez kapcsolódó tanácsokról lesz majd szó.
  25:39