Szöveges fájl kezelése (a Caesar-kód feltörése) A kód feltörésének statisztikai háttere

Hasonló dokumentumok
Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

1. feladat Készítse el szövegszerkesztővel, majd mentse osztály.txt néven a következő tartalmú szöveges fájlt:

A fájlkezelés alapjai (titkosítás Caesar kóddal)

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Bánsághi Anna 2014 Bánsághi Anna 1 of 35

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

Programozás alapjai 6. előadás. Wagner György Általános Informatikai Tanszék

BME MOGI Gépészeti informatika 8.

Fájlkezelés. Szöveges fájlok kezelése

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

Programozás alapjai 9.Gy: Struktúra 2.

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

ELTE SAP Excellence Center Oktatóanyag 1

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Kalapácsvetés 2016 szöveges

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

1. Egyszerű (primitív) típusok. 2. Referencia típusok

BME MOGI Gépészeti informatika 13.

Smalltalk 2. Készítette: Szabó Éva

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

length (s): Az s karaklerlánc hossza, substr(s,m,n): Az s mezőben levő karakterláncnak az m-edik karakterétől kezdődő, n darab karaktert vágja ki.

Java gyakorlat feladatai e s megolda sai ( )

Bevezetés a programozásba I.

Tájékoztató. Használható segédeszköz: -

Fájlok, stream-ek. Fájlok és könyvtárak Stream-ek csoportosítása A stream-ek osztályhierarchiája Stream-ek használata

Programozási nyelvek Java

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

Operációs rendszerek gyak.

CSORDÁS JÁNOS: A PROGRAMOZÁS ALAPJAI VISUAL BASIC-BEN

AWK programozás, minták, vezérlési szerkezetek

PROGRAMOZÁS ALAPFELADATOK

Informatika terméktervezőknek

Programozás Minta programterv a 1. házi feladathoz 1.

Makrók használata az Excelben - Makróhibák kezelése, biztonságos jelszavak generálása

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

INFORMATIKAI ALAPISMERETEK

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

QGIS Gyakorló. 1. kép: Koordináta levétel plugin bekapcsolása.

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Objektum elvu alkalmaza sok fejleszte se

dr.xlsx A programról Szövegműveletekhez használható függvények

Listák, szótárak, fájlok Listák, szótárak, fájlok

Programozási nyelvek II. JAVA

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Access gyakorlati feladatok lépésről lépésre

Felvételi tematika INFORMATIKA

BASH SCRIPT SHELL JEGYZETEK

Java és web programozás

BME MOGI Gépészeti informatika 4.

Microsoft Excel 2010

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

7. Strukturált típusok

Egyszerű példaprogramok gyakorláshoz

Entity Framework alapú adatbáziselérés

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Pénzügyi algoritmusok

INFORMATIKA javítókulcs 2016

EGYSZERŰ SZÁMÍTÁSOK TÁBLÁZATKEZELÉS ELINDULÁS SZE INFORMATIKAI KÉPZÉS 1

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

7. gyakorlat Sorozatok, Fájlkezelés

Programozás Minta programterv a 2. házi feladathoz 1.

Informatikai Rendszerek Alapjai

HTML ÉS PHP ŐSZI FÉLÉV

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Adatbázisok II. rész

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Bevezetés a programozásba I.

Regionális forduló november 18.

Maximum kiválasztás tömbben

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Regionális forduló november 19.

Regionális forduló november 19.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Input Output Műveletek

A C# programozási nyelv alapjai

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

Java és web programozás

INFORMATIKAI ALAPISMERETEK

A következő táblázat tartalmazza az egyes fajták jellemzőit.

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

Tájékoztató. Használható segédeszköz: -

Programozási technológia I. 1. beadandó feladatsor

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

Elemi alkalmazások fejlesztése I. Olvassunk be egy fájlból egész számokat egy tömbbe. Keressük meg a tömb valamely

7. Laboratóriumi gyakorlat, 1. rész : Vezérlési szerkezetek II.

Programozási nyelvek Java

Átírás:

Szöveges fájl kezelése (a Caesar-kód feltörése) A kód feltörésének statisztikai háttere Hosszabb szöveg esetén a Caesar-kód feltörése a statisztika módszereivel könnyen megoldható. Az egyes betűk előfordulásának gyakorisága ugyanis jellemző az adott nyelvre, így a titkos szövegben előforduló leggyakoribb karakterekről feltételezhetjük, hogy azok a leggyakoribb betűknek felelnek meg. Az oldalt látható statisztikát az a program készítette, amellyel a következő pontban fogunk megismerkedni. A statisztika egy magyar nyelvű szöveg (Molnár Ferenc: A Pál utcai fiúk első fejezete) Caesar-kóddal titkosított változatának betűgyakoriságát mutatja. Leolvasható, hogy a titkos szövegben a két leggyakoribb betű a H és az L. E két betű távolsága az angol ábécében 4 karakter. A betűgyakoriságot tartalmazó táblázatunk szerint a magyar nyelvben a két leggyakoribb betű az A és az E, ezek távolsága szintén 4 karakter. Ez a kettős csúcs elárulja, hogy felehetően az A-nak a H, az E-nek az L felel meg, vagyis a Caesar-kódnál alkalmazott eltolás 7 karakter. A fenitek alapján tehát sokat segít egy olyan program elkészítése, amely megszámolja az egyes betűk gyakoriságát a szöveges állományban A következő lépésben ezt a programot készítjük el. Példa: Szöveges fájl betűgyakorisága Példánkban megnyitjuk a C:\Titkos.txt fájlt, és megszámoljuk, melyik betűből hány darab van benne. Feltételezzük, hogy a szöveg csak az angol ábécé nagybetűit tartalmazza. Az egyszerűség kedvéért egy konzolalkalmazást készítünk, és a végeredmény is a konzolra írjuk ki. Három változót kell deklarálnunk. A karakterek számát a 256 elemű s tömb fogja tartalmazni, értelemszerűen a 80-as kódú karakterek számát például az s(80) elem. Az előző pont szerint a fájl objektummal fogjuk elérni az adatfájlt a meghajtón, az olvasó objektummal pedig kiolvassuk az adatokat belőle:

Imports System.IO Module Module1 Sub Main() Dim s(256) As Integer Dim fájl As IO.FileStream Dim olvasó As IO.StreamReader fájl = New IO.FileStream("D:\Előadás évfolyamnak\fájlkezelés\titkos.txt", FileMode.Open) olvasó = New IO.StreamReader(fájl) A szövegfolyamot az olvasó objektum Read metódusaival fogjuk karakterenként beolvasni. A szöveg végét a Peek metódussal tudjuk meghatározni. Ez leellenőrzi a következő karaktert, s ha már nincs több karakter, akkor értéke -1 lesz. A ciklus magjába összesen egy utasítás kerül. Az olvasó objektum Read metódusa beolvassa a következő karaktert, és visszaadja annak kódját. Az ennek megfelelő karakterek számát tehát eggyel növelni kell: Do While olvasó.peek > -1 s(olvasó.read) += 1 Loop Végül kiíratjuk a karakterek számát a konzolra. Feltételezésünk szerint ezek mindegyike angol nagybetű: For i As Integer = AscW("A") To AscW("Z") Console.WriteLine(ChrW(i) & " --- " & s(i)) olvasó.close() fájl.close() Console.ReadLine() End Module A StreamReader osztály fontosabb metódusai Metódus Read Peek ReadLine ReadToEnd Close Beolvassa a következő karaktert, és eggyel továbblép. Beolvassa a következő karaktert, de nem lép tovább. Ha nincs több karakter, -1-et ad vissza. Beolvas egy sort, és sztringént adja vissza. Az aktuális pozíciótól kezdve minden karaktert beolvas. Lezárja a szövegfolyam-olvasót A StreamReader és StreamWriter osztály fontosabb tulajdonságai Tulajdonság BaseStream Encoding Current Encoding A szövegfolyamot reprezentálja. A szöveg kódolását adja meg (StreamWriter esetén). A szöveg kódolását adja meg (StreamReader esetén). A StreamWriter osztály fontosabb metódusai

Metódus Write Close Szöveget ír a fájlba mező szövegfolyamba. Lezárja a szövegfolyamírót. Numerikus adatok szöveges állományban: a Split függvény Gyakori megoldás, hogy numerikus adatokat szöveges állományban tárolnak; ennek vitathatatlan előnye, hogy a szövegfájl akár egy egyszerű jegyzettömbbel is könnyen olvasható. A következő adathalmaz például azt tartalmazza, hogy egy adott közlekedési csomóponton a múlt héten hány gépjármű haladt át. Minden nap adatai külön sorba kerültek. Az adatsor elemei rendre az áthaladt motorkerékpárok, a személygépkocsik, a 7,5 tonnásnál kisebb, illetve a 7,5 tonnát meghaladó teherszállító járművek száma: Példaként olvassuk be a fájl adatait, és számítsuk ki, hogy az egyes gépjárműtípusokból hány darab haladt át a héten, majd írjuk a fájl végére egy új sorba! Az adatokat célszerűen a forgalom (7,4) többen fogjuk tárolni. A feladatot két részre bontjuk, a Beolvasás modulban feltöltjük a tömböt, míg a Kiírás modulban összegezzük az adatokat, és kiírjuk a fájlba: Imports System.IO Imports System.Console Module Module1 Private forgalom(7, 4) As Integer Sub Main() Beolvasás() Kiírás() ReadLine() Az adatok beolvasása Az adatok beolvasásához létrehozzuk a fájlbe és az olvasó objektumokat: Sub Beolvasás() Dim fájlbe As FileStream = New FileStream("D:\Előadás évfolyamnak\fájlkezelés\forgalom.txt", FileMode.Open) Dim olvasó As New StreamReader(fájlbe) Az adatokat soronként olvassuk be a ReadLine metódus segítségével. Ez egy sztringet ad vissza, melyet a Split függvény segítségével egy előre megadott karakter, esetünkben a szóköz

mentén szétdarabolhatunk. A Split tehát egy sztringvektrot határoz meg, amely ebben az esetben 4 elemű. Az elemek számozása 0-val indul. Az így kapott sztringeket pl. a CInt függvény segítségével konvertálhatjuk egész számokká, s így a tábla tömb adott sorának elemeivé: Dim str(4) As String For i As Integer = 1 To 7 str = olvasó.readline.split(" ") forgalom(i, 1) = CInt(str(0)) forgalom(i, 2) = CInt(str(1)) forgalom(i, 3) = CInt(str(2)) forgalom(i, 4) = CInt(str(3)) olvasó.close() fájlbe.close() A Split metódus első paramétere adja meg, hogy milyen karakter mentén kell szétvágnunk a sztringet. Tipikus megoldás a táblázatkezelésben a pontosvessző, az így tagolt CSV (Commaseparated values) formátumot szinte minden táblázatkezelő program ismeri. Az összeg kiírása A forgalmi adatok összegezését természetesen az összegezés tételével végezhetjük el, ezúttal a négy adat egy vektor négy eleme lesz. Az adatokat hozzá kell írnunk a már meglévő fájlhoz, így azt Append módban nyitjuk meg. Hozzáíráskor a következő adat az utolsó bájt végére kerül, így ezúttal szükséges előtte egy üres WriteLine is, ami új sort kezd:

Sub Kiírás() Dim fájlki As FileStream = New FileStream("D:\Előadás évfolyamnak\fájlkezelés\forgalom.txt", FileMode.Append) Dim író As New StreamWriter(fájlki) Dim összes(4) As Integer For i As Integer = 1 To 7 For j As Integer = 1 To 4 összes(j) += forgalom(i, j) író.writeline() író.writeline(összes(1) & " " & összes(2) & " " & összes(3) & " " & összes(4)) író.close() fájlki.close() A program helyes lefutása esetén a fájl egy új sorral bővül. Feladatok: 1) Átalakítás 2) Lottó Készítsünk programot, amely egy magyar nyelvű szövegből eltávolítja a szóközöket és írásjeleket, valamint a betűket az angol ábécé megfelelő nagybetűs változatára alakítja! Keressük meg az interneten a korábbi lottószámokat Excel formátumban! Mentsük el a kihúzott számokat CSV kiterjesztéssel, majd olvassuk be az adatokat, és határozzuk meg, melyik számot hányszor húzták ki! Melyik az 5 legritkábban kihúzott szám? Érdemes-e ezekre tippelnünk a jövő héten? 3) Osztálystatisztika Rögzítsük egy osztály tanulóinak év végi osztályzatait tantárgyanként szóközökkel elválasztva egy szöveges állományban! Írjunk programot, amely a táblázat végére beszúrja a tantárgyi átlagokat!