@t[Rekord]~~META:date created = 2016.05.18., 12:14~~ Egy vadonatúj [[https://www.antikvarium.hu/konyv/angerhausen-becker-a-basic-programozas-magasiskolaja-a-c-64-esen-422393|könyvet]] olvasgatok, és feltűnt valami. Egy címnyilvántartó programot terveznek a szerzők, és először is megtervezik a rekordszerkezetet. Vezetéknév 15 karakter, keresztnév 15 karakter, utca 15, irányítószám 4, telefon 13, megjegyzés 25, összesen 87 karakter. Aztán nekiállnak kiszámolni, hogy hány rekordot tárolhatunk így; a program méretét persze még nem tudjuk, de ha mondjuk 29 568 byte szabad helyünk van, akkor 339 cím fér el a tárban. Én pedig elgondolkodtam. De hisz ezt ma se így csináljuk, pedig már az se lenne gond, ha az egész emberiség címjegyzékét kellene tárolni egy gépen (ezzel a rekordmérettel 609 milliárd byte, egy egyterás wincsin elférne). Mi a csodának lefoglalni tizenöt byte-ot Kis Pál vezetékneve és még tizenötöt a keresztneve számára? És ha valakihez nem is írtunk megjegyzést, minek elhasználni huszonöt byte-ot? És ha Uzunkavakaltındayataruyuroğlu úr is bekerülne az adatbázisba, alakítsuk át az egészet? Teljesen nyilvánvalóan flexibilis rekordszerkezetet kell használni. Több megoldás is van. 1. Egy mezőhatár-jelölő karaktert tenni a mező utolsó karaktere után. 2. Mezőjelölő karaktereket alkalmazni, amik nemcsak azt jelzik, hogy vége az előző mezőnek, hanem azt is, hogy a következő mező micsoda – ha például Ferenc pápa kerül az adatbázisba, a vezetéknevet egyszerűen kihagyjuk, sőt a Vatikánban bizonyára irányítószámok sincsenek. Ez akkor jön nagyon jól, ha egyes mezők csak ritkán fordulnak elő. Azt is megtehetjük, hogy egyes mezőknek kétféle jelet adunk, a másik azt jelenti, hogy a rekord utolsó mezője az illető, így a rekordhatárt sem kell külön byte-tal jelölnünk. 3. A rekord elején közöljük az összes mező hosszát, külön-külön. Ha a példa szerint járunk el és nem tervezünk 32 karakternél hosszabb mezőt, akkor egy ilyen hossz tárolása öt bit; hat mezőhöz harminc bit kell, vagyis négy byte, kettővel kevesebb, mint ha minden mezőt külön byte-tal vezetnénk be, és két bitünk még marad is, két bittel rengeteg mindenfélét lehet csinálni. Például jelezhetik akár azt is, hogy a következő rekord a mostani folytatása. 4. A rekord elején a mezők hosszát és típusát egyaránt közöljük, vagyis kis tartalomjegyzéket adunk. Például mezőnként öt bit lehet a hossz, három pedig a mező típusa, amit így nyolcféléből választhatunk ki. Ezek között lehet olyan, ami jelzi, hogy a következő mező ezt folytatja (és a valódi típust majd ott jelezzük), vagyis a 32 karakteres mezőhosszkorlátot el is töröltük. Ha a nyolcféle típus nem elég, levehetjük a korlátot tizenhat karakterre, és akkor négy bitünk van a típusoknak. 5. Egyes mezőtípusokat jobban megéri binárisan kódolni, például az irányítószámot. A mező típusa jelzi, hogy így olvasandó. Négyjegyű irányítószámokon két, ötjegyűeken három byte-ot takaríthatunk meg; ha vannak 65 535-nél nagyobb számok is, akkor persze már csak kettőt. Hogy lehet ezeket commodore-os környezetben kezelni? Nagyon egyszerűen. 1. Az egész rekordot betesszük két idézőjel közé és INPUT# utasítással olvassuk, szövegként. Rekordonként két byte pocséklás, de jó gyors, és különben is már a sokszorosát megtakarítottuk annak a két byte-nak. 2. Szektoronként olvassuk a floppyról, gépi kódban, legalább olyan gyors. Azt nem jelöljük, hogy a szektorhatáron vége van-e a rekordnak, mert minek, sőt ha az egész lemezt az adatbázisunknak tartjuk fönn, akkor a következő szektorra se kell linkelni, egyszerűen fölveszünk egy rögzített sorrendet és aszerint haladva írunk-olvasunk. @blogf[számtech Commodore_64 programozás]