Szöveges fájlok kezelése

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Tömbök C#-ban.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Sztringek.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
C A C nyelv utasításai.
Mutatók, tömbök, függvények
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
C# tagfüggvények.
C# tagfüggvények.
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
Összetett adattípusok
Összetett adattípusok a Pascal nyelvben
2012. tavaszi félév Véső Tamás Véső Tamás OE­NIK / 29.
J.Zs.Cs.: Vizuális programozás (c) 2010 Vizuális programozás Fájl- és állományrendszer kezelés Névtér: System.IO.
Fájlkezelés Pascalban
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Visual Basic 2008 Express Edition
Java programozási nyelv Filekezelés
Java programozási nyelv Tömbök
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Egyenesvonalú (lineáris) adatszerkezetek
Programozás I. Matematikai lehetőségek Műveletek tömbökkel
V 1.0 ÓE-NIK-AII, Programozás I. Karaktersorozatok Feladatok.
Programozás III KOLLEKCIÓK.
Operátorok Vezérlési szerkezetek Gyakorlás
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
C Programozási alapok.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
Informatikai gyakorlatok 11. évfolyam
V 1.0 Programozás I. Osztályszintű tagok 1 ÓE-NIK-AII, 2014.
V 1.0 OE-NIK-AII, Programozás I. Szöveges fájlok kezelése String műveletek Feladatok.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
V 1.0 OE-NIK, Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok.
Szöveges fájlok kezelése String műveletek Feladatok
Objektum-orientált programozás Stringműveletek
C# SZINTAKTIKÁJA Az egyes utasítások végén pontosvessző áll
Programozás C# -ban Elágazások.
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Változók.
B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Folyamatok.
Függvénysablonok használata
Előadás másolata:

Szöveges fájlok kezelése Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok ÓE-NIK-AII, 2015

Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. ÓE-NIK-AII, 2015

Szöveges fájlok kezelése Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok ÓE-NIK-AII, 2015

Szöveges fájlok kezelése A szöveges fájlok egyes soraiban stringek találhatók A fájlokat soronként elölről hátrafelé haladva tudjuk bejárni A fájlt háromféle módon nyithatjuk meg Olvasás: Ilyen esetben soronként ki tudjuk olvasni a fájl tartalmát Írás: Ilyenkor új fájl jön létre, melybe soronként írhatunk, vagy a már létező fájl törlődik és egy ugyanolyan nevű új fájlba írhatunk soronként Hozzáfűzés: Ekkor a fájlunk végére tudunk új sorokat írni A fájlkezelés végén a fájlt kötelező bezárnunk A fájlműveletek a System.IO névtérben találhatók OE-NIK-AII, 2015

Fájl olvasása A StreamReader osztályt kell használnunk StreamReader sr = new StreamReader("fajlnev.txt"); Egy sor kiolvasása a fájlból string s = sr.ReadLine(); Fájl végének ellenőrzése sr.EndOfStream Fájl bezárása sr.Close(); StreamReader sr = new StreamReader("fajlnev.txt"); while (!sr.EndOfStream) { string s = sr.ReadLine(); Console.WriteLine(s); } sr.Close(); OE-NIK-AII, 2015

Fájl írása A StreamWriter osztályt kell használnunk StreamWriter sw = new StreamWriter("fajlnev.txt"); Egy sor kiírása a fájlba sw.WriteLine(s); Fájl bezárása sw.Close(); StreamWriter sw = new StreamWriter("fajlnev.txt"); foreach (string s in sTomb) { sw.WriteLine(s); } sw.Close(); OE-NIK-AII, 2015

Hozzáfűzés és karakterkódolás Ha hozzá akarunk fűzni már létező fájlhoz, akkor a fájl megnyitásakor kell ezt megadnunk StreamWriter sw = new StreamWriter("fajlnev.txt", true); false használata felülírást eredményez StreamWriter sw = new StreamWriter("fajlnev.txt", false); A szövegfájlok karakterkódolása a mentő programtól, beállítástól függhet A StreamWriter-t úgy kell megnyitni, hogy a szövegfájlénak megfelelő karakterkódolásban olvasson Alapértelmezetten UTF-8-ban próbál olvasni StreamWriter megnyitása karakterkódolás megadásával: StreamWriter sw = new StreamWriter("fajlnev.txt", Encoding.Default); A Default nem az UTF8-at, hanem a rendszer alapértelmezettjét (ANSI kódtábla) jelenti! OE-NIK-AII, 2015

Elérési út megadása A fájlnév megadásánál megadhatunk abszolút elérési utat: StreamWriter sw = new StreamWriter("c:\\hallgato\\fajlnev.txt"); StreamWriter sw = new StreamWriter(@"c:\hallgato\fajlnev.txt"); Nem ajánlott, más rendszeren nem lesz pontosan azon a helyen a fájl Relatív elérési út megadása: StreamWriter sw = new StreamWriter("fajlnev.txt"); StreamWriter sw = new StreamWriter("szovegek\\fajlnev.txt"); Ez a megadott nevű fájlt a munkakönyvtárban (working directory) keresi A munkakönyvtár egyszerű esetben az a könyvtár, ahol az exe van OE-NIK-AII, 2015

Feladatok Egy string tömbbe olvassa be egy szöveges fájl sorait, majd a sorokat írja ki a konzolra! Határozza meg, hogy hány sora van a beolvasott fájlnak, illetve hány betű található benne. A fájl végére írjon két új sort, mely ezeket az adatokat tartalmazzák! Olvasson be egy fájlt, majd a beolvasott szöveget alakítsa át úgy, hogy csak a betűket és számokat tartsa meg. Az eredménnyel írja felül az eredeti fájlt! OE-NIK-AII, 2015

Feladatok Egy szöveges fájlt alakítson át úgy, hogy minden sor középre legyen rendezve! Egy szöveges fájlt alakítson át úgy, hogy minden sor sorkizárt legyen! Határozza meg, hogy egy szöveges fájlban melyik a leghosszabb szó, illetve melyik szó fordul elő leggyakrabban! OE-NIK-AII, 2015

Szöveges fájlok kezelése Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok ÓE-NIK-AII, 2015

Felsorolás típus Olyan adatszerkezet, amely meghatározott értékek névvel ellátott halmazát kéviseli. enum kulcsszóval definiáljuk Osztályon belül vagy kívül is definiálható enum Napok { Hétfő, Kedd, Szerda, Csütörtök, Péntek, Szombat, Vasárnap } class Program static void Main(string[] args) Napok ma = Napok.Csütörtök; if (ma == Napok.Csütörtök) Console.WriteLine("Ma csütörtök van"); ÓE-NIK-AII, 2015

Felsorolás típus A felsorolás típus elemeit számok reprezentálják. Kezdősorszám: 0 Lehetőség van egyéni számozás használatára is enum Napok { Hétfő = 1, Szerda = 3, Csütörtök = 4 } class Program static void Main(string[] args) Napok ma = Napok.Csütörtök; int x = (int)ma; // x == 4 Napok hétEleje = Napok.Hétfő; x = (int)hétEleje; // x == 1 ÓE-NIK-AII, 2015

Szöveges fájlok kezelése Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok ÓE-NIK-AII, 2015

Objektumtömb Ismétlés: tömblétrehozás int[] t = new int[8]; string[] t = new string[8]; char[] t = new char[8]; Osztaly[] t = new Osztaly[8]; A tömb referenciatípus, így a változóban nem közvetlenül az adat helyezkedik el, hanem egy memóriacím (referencia) Az adott memóriacímen helyezkedik el az adat maga Tömb létrehozásakor a tömb által lefoglalt adatterület kinullázódik a memóriában t 300 300 0000 ... 0000 ÓE-NIK-AII, 2015

Objektumtömb Ismétlés: alapértelmezett érték A tömbelemben a nullázás után a típushoz tartozó alapértelmezett érték van: Ha érték típusú változók tömbje volt, akkor közvetlenül az adat van az elemben: Ha a tömb int[] volt: 0 Ha a tömb char[] volt: \0 (a 0 kódú karakter) Ha a tömb bool[] volt: false Ha viszont referencia típusú változók tömbje volt, akkor ez a csupa 0 valamilyen memóriacím (referencia) Nem érvényes memóriacím null-nak nevezzük null elemre nem lehet hivatkozni t 300 300 0000 ... 0000 Érték típusok esetén egyből érvényes elemek kerülnek bele Nézzék meg egyből VS-ben is (locals) ÓE-NIK-AII, 2015

Objektumtömb Ismétlés: alapértelmezett érték Érték típusú változókat tartalmazó tömbök: A tömbelemek értéke a létrehozás után érvényes, azonnal használható Referencia típusú változókat tartalmazó tömbök: A tömbelemek értéke a létrehozás után null, érvénytelen Ezért értéket kell adni minden tömbelemnek, mielőtt használatba vesszük int[] t = new int[8]; char[] t = new char[8]; int[] t = new int[8]; t[2]++; Console.WriteLine(t[2]); //1 string[] t = new string[8]; Osztaly[] t = new Osztaly[8]; Osztaly[] t = new Osztaly[8]; Console.WriteLine(t[2].Tulajdonsag); //NEM JÓ!!! ÓE-NIK-AII, 2015

Objektumtömb Objektumtömbben példányosítani kell minden elemet class Vektor { private double x; public double X { get { return x; } set { x = value; } } private double y; public double Y { get { return y; } set { y = value; } } ... public Vektor(double x, double y) this.x = x; this.y = y; } Vektor[] tomb = new Vektor[8]; Console.WriteLine(tomb[2].X + " " + tomb[2].Y); //NEM JÓ!!! Vektor[] tomb = new Vektor[8]; for (int i = 0; i < tomb.Length; i++) { tomb[i] = new Vektor(5, 5); } Console.WriteLine(tomb[2].X + " " + tomb[2].Y); //JÓ: 5 5–öt ír ki ÓE-NIK-AII, 2015

Objektumtömb A string is referenciatípus Speciális tulajdonsága miatt számos esetben érték típusként viselkedik Ezért az alapértelmezett érték ott is null A stringtömbben is értéket kell adni minden elemnek: string[] t = new string[8]; Console.WriteLine(t[2].ToUpper()); // NEM JÓ!!! string[] t = new string[8]; for (int i = 0; i < tomb.Length; i++) { t[i] = "ffff"; } Console.WriteLine(t[2].ToUpper()); // FFFF ÓE-NIK-AII, 2015

Szöveges fájlok kezelése Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok ÓE-NIK-AII, 2015

Feladatok Írjon menüvezérelt programot, amely lehetővé teszi egy futó napi edzéseinek eltárolását Új edzés felvitele - Dátum YYYYMMDD formátumban - Táv #,# km formában - Idő HH:MM:SS formátumban Az új edzés bekerül a futónapló fájl végére Edzések listázása A konzolra kilistázza az edzéseket Statisztikák A konzolra és egy statisztika fájlba kiírja az edzések számát, valamint a távok és idők összegét és átlagát Nem feltétlenül szükséges osztályt definiálni a megoldáshoz: A menü egy do-while ciklusban olvas be, amíg nem a kilépés a kiválasztott menüpont Az új edzés hozzáfűzés, a listázás soronkénti feldolgozás (sor.Split() és kiírás) A statisztika soronkénti felbontás és konverzió, átlagolás (összegzés és osztás sorszámmal) OE-NIK-AII, 2015

Gyakorló feladat Csevegőprogramot készítünk, amelyben Személy típusú elemekkel reprezentáljuk a kontaktjainkat. Egy Személynek van neve, születési éve és neme. Hozzunk létre 5 elemű tömböt, amelyet feltöltünk Személyekkel! A Személy osztályban legyen olyan paraméteres konstruktor, amelynek segítségével név és nem ismeretében, de véletlenszerű születési évvel létrehozhatjuk a személyt. Vannak olyan emberek, akiknek ugyanaz a vezeték- vagy keresztnevük, mint a felhasználónak? Ha vannak, akkor listázzuk ki mindet. Listázzuk ki az összes olyan Személyt, aki a felhasználóval ellenkező nemű! Számoljuk meg, hány olyan Személy van, aki a felhasználóval azonos korosztályba tartozik (azaz maximum 5 év van közöttük)! a személy neme megadható boolként, de enumként is! ÓE-NIK-AII, 2015

Feladatok Készítsen szótárprogramot, amely szópárokat tárol, illetve ki is kérdezi a szavakat! Lehessen új szópárokat felvenni, de csak akkor, ha még nincsenek bent a szótárban! Lehessen kilistázni a szótár tartalmát! Tudja kikérdezni a szavakat mindkét nyelv szavai alapján. A kikérdezés végén adja meg, hány helyes válasz érkezett! OO szemléletben érdemes megoldani! OE-NIK-AII, 2015

Feladatok Hozzunk létre egy 20 elemű tömböt, amelyben Zh típusú elemek vannak. Egy ilyen elemmel egy zh-eredményt reprezentálunk. Egy Zh-hoz egy 6 jegyű Neptun-kód és egy 0-100-ig terjedő pontszám tartozik. Egy konstruktor segítségével véletlenszerű Neptun-kóddal és pontszámmal hozzuk létre a tömbben lévő példányokat. Sorolja fel, kik mentek át a zh-n! Írja ki a legjobb eredményű hallgató Neptun-kódját! Ha több embernek is ez az eredménye, akkor mindegyikükét. Listázza ki az eredményeket úgy, hogy a nevek mellett a jegyek szerepelnek! A jegyeket ponthatártömb alapján állapítsa meg. Karakter sorsolása: (char)rand.Next(65, 91) (ASCII kód) Ponthatártömb pl: { 51, 63, 75, 87, 101 } – kikeresi azt az elemet, aminél kisebb a zh-ja. A ponthatárok tömb is lehet static, előadáson már volt. Előjön egy static adattag szükségessége: mivel a zh-k létrehozása egyszerre történik, nem lehet a konstruktoron belül létrehozott Random objecttel randomizálni a neptun-kódot meg a pontot (mert közel azonos időben jönnének létre a Random objectek, így a Seed-jük azonos lenne és azonos számokat sorsolnának – vagyis ugyanazok a nevek meg Neptun-kódok jönnének ki). Megoldás erre, ha a diákok static adattagba kiteszik a randomgenerátort, és azt használják mindig. HA otthoni a feladat, akkor ezt meg kell mutatni. A Neptun-kód egy string, amely kezdetben üres. Mind a 6 karakterét legeneráljuk egyenként, a következőképpen: Véletlenszám sorsolásával eldöntjük, szám jön-e vagy karakter. Ha szám, akkor sorsolunk egy számot 0-9-ig, és hozzáadjuk a stringhez. Ha karakter, akkor sorsolunk egy karaktert, és azt hozzáadjuk a stringhez. Karakter sorsolása: char c = (char)rand.Next(65, 91); OE-NIK-AII, 2015