8. hét: parancssori argumentumok, fájlkezelés

Czirkos Zoltán · 2019.11.07.

Gyakorlófeladatok az előadás anyagához kapcsolódóan.

1. Parancssori argumentumok

Argumentumok kiírása

Írj programot, amely számozva kiírja a parancssori argumentumait a képernyőre!

Mini számológép

Írj programot, amely parancssori argumentumként három valamit vár: az első és a harmadik egy szám, a középső pedig a +, -, *, / műveleti jelek egyike! Írja ki a program a képernyőre az elvégzett művelet eredményét, vagy egy hibaüzenetet, ha az argumentumok bármilyen szempontból nem elfogadhatóak!

Ha Linuxot használsz, a * karaktert a parancssor fájlneveknek fogja értelmezni. Add meg idézőjelben: szamologep 5 "*" 7.

frank@hal9000:~$ szamologep 1 / 2
Az eredmeny: 0.5

frank@hal9000:~$ szamologep b + 2
Az elso es a harmadik argumentum legyen szam!

frank@hal9000:~$ szamologep 1 +xyz 2
A masodik argumentum egy muveleti jel legyen!

2. Szöveges fájlok

Fájl beolvasása

Készíts programot, mely az „adat1.txt” fájl tartalmát beolvassa és kiírja a képernyőre!

Fájl írása

Készíts programot, mely bekéri a felhasználó nevét, és azt az „adat1.txt” fájlba eltárolja! (Ha már létezett a fájl korábban, írja felül.)

Hányszor indult?

Készíts programot, mely induláskor írja ki a képernyőre, hogy hanyadszorra indítják. Az indítások számát tárolja az "indit.ini" fájlban. (Ha a file még nem létezik, akkor ez az első indítás, ha már létezik, akkor olvassa ki belőle az eddigi indítások számát, adjon hozzá egyet, azt írja ki a képernyőre, és tárolja vissza a fájlba.)

Kisbetűk

Készíts programot, amely egy megadott fájlt átolvasva kiírja, hogy az angol ABC kisbetűi közül melyik hányszor szerepel benne.

Köbméter

Egy tóra négyzetrácsot fektetünk, a négyzetrács egyes pontjaiban a tó mélységét tároljuk. 0-val jelöljük a szárazföldet, negatív számmal a mélységet méterben. Készíts programot, amelyik egy ilyen, fájlban adott „térkép” alapján téglatest módszerrel becsli a tó térfogatát. Az egyes mérési pontok távolságát kérdezze meg a program a felhasználótól. A fájl első sorában a táblázat szélessége és magassága (egész számok), a többi sorokban a táblázat egyes sorai; valós számok szóközzel elválasztva.

Szövegfájl titkosítása

Készítsünk egy programot, amelyik egy szövegfájlt titkosít. A titkosítás egyszerű: minden betű helyett az ABC-ben következőt használjuk, 'z' helyett pedig 'a'-t.

Meteorológiai állomás

Egy meteorológiai állomás által rögzített hőmérsékleti értékeket fájlban kapjuk. A fájl első sorában a mérés napja van, év, szóköz, hónap, szóköz, nap formátumban. A fájl többi sora óra, kettőspont, perc, szóköz, hőmérséklet (valós szám) formátumban. Olvassuk be a fájlt, és keressük meg, mikor volt a legmelegebb aznap. Írjuk ki az ehhez tartozó órát és percet, illetve a hőmérsékletet!

Példa bemenet:

2009 09 17
12:45 11.1
12:59 14.3
04:34 -5

Példa kimenet, amely a fenti bemenetre generálódik:

2009.09.17. 12:59 +14.3

Névsor

Egy fájl hallgatók vizsgajegyeit tartalmazza, Neptun-kód, szóköz, jegy, szóköz, név formátumban soronként. Ha a hallgató nem kapott aláírást, a jegy helyén egy mínusz szerepel. Készíts programot, amely statisztikát ír ki a vizsgáról. Például:

AABB12 5 Tehetséges Béla
CC43EF 4 Pedál Tibi
BBCC34 - Lógós Feri
XYYXY1 4 Ezoterikus János

Kimenet:

Jeles: 1 fő
Jó: 2 fő
Nem kapott aláírást: 1 fő

3. Bináris fájlok

Bináris fájlból Python forráskód

Gyakran praktikus, ha a programjaink bizonyos adatokat nem fájlból olvasnak, hanem a lefordított program eleve tartalmazza azokat. Készíts programot, amely bináris fájlt beolvasva Python listát készít abból. Például ha egy 8 bájtos bináris fájl a 98, 21, 17, 58, 255, 0, 7, 1 bájtokat tartalmazza, a program által létrehozott szövegfájl így néz ki:

adat = [
  98, 21, 17, 58, 255, 0, 7, 1,
]

Figyelj arra, hogy a kimeneti fájl tartalmazzon sortöréseket is, vagyis a vesszővel elválasztott számok ne nyúljanak túl a 80 karakteres képernyőn! (A Python a tömbök kezdeti értékének megadásakor megengedi, hogy az utolsó adat után is szerepeljen vessző. A fenti példa is ilyen.)

Fájlok összehasonlítása

Írj olyan programot, amely két fájlt hasonlít össze, és kiírja az eltérések helyét, továbbá az első és második fájlban található különböző bájtokat! Például:

poz.  f1 f2
0456  00 12
0ef3  fe fb

A nem egyforma méretű fájlokat el se kezdje összehasonlítani!

RLE betömörítés

Az RLE (run length encoding) az egyik legegyszerűbb tömörítési algoritmus. Lényege, hogy az egymás után következő egyforma bájtokat elég csak egyszer eltárolni, és megjelölni, hogy hányszor szerepeltek. Ha pedig nem egyforma bájtok követik egymást, azokat simán átmásolja az RLE.

A tömörített adatunkban 0xbf karakterrel jelöljük az ilyen többszörözést. A 0xbf utáni első karakter az ismétlendő bájt, az azutáni pedig az ismétlések száma!

Írj programot, amelyik egy megadott fájlt betömörítve egy másik fájlba ír! Figyelj arra, hogy ha az eredeti fájlban 0xbf szerepel, azt nem szabad egyszerűen átmásolni, mert akkor a kitömörítő algoritmus ismétlés megjelölésének próbálná értelmezni.

RLE kitömörítés

Írd meg a fenti program kitömörítő párját.

RLE tömörítő

Dolgozd össze az előző két feladat megoldását egy komplett parancssori alkalmazássá! Az alkalmazással lehessen betömöríteni és kitömöríteni is fájlokat! Az elvégzendő műveletet az első parancssori paraméter, a két fájlnevet (bemenet és kimenet) pedig a második parancssori paraméter adja meg!

C:\> rle.py betomorit input.dat output.rle

C:\> rle.py kitomorit output.rle input.dat