Adatfolyamok kezelése
4. előadás
IMPERATÍV PROGRAMOZÁS © Bánsághi Anna
[email protected]
4. ELŐADÁS - ADATFOLYAMOK KEZELÉSE
2014 © Bánsághi Anna
1 of 35
Adatfolyamok kezelése
4. előadás
TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma Procedurális paradigma Generikus paradigma III. STRUKTÚRÁLT PROGRAMOZÁS Moduláris paradigma Objektumorientált paradigma
2014 © Bánsághi Anna
2 of 35
Adatfolyamok kezelése
4. előadás
II. IMPERATÍV PROGRAMOZÁS IMPERATÍV PARADIGMA 1. 2. 3. 4. 5. 6.
2014 © Bánsághi Anna
Jelkészlet Lexikális elemek Utasítások, vezérlési szerkezetek Elemi és összetett típusok Programozási tételek Adatfolyamok kezelése
3 of 35
Adatfolyamok kezelése
4. előadás
6. ADATFOLYAMOK KEZELÉSE az adatfolyam nem feltétlenül struktúrált adatok összefüggő, azok sorrendjét megtartó halmaz, mely írható és olvasható pl.: konzol képernyő, billentyűzet, fájl, hálózati csatorna a nyelv az adatfolyamokat hasonló módon kezeli, ugyanazon műveletek (írás, olvasás) és hasonló viselkedés várható el
2014 © Bánsághi Anna
4 of 35
Adatfolyamok kezelése
4. előadás
ADATFOLYAMOK MŰVELETEI adatfolyamokból egyenként olvashatunk ki adatokat Read egyetlen karakter olvasása ReadLine egyetlen sor olvasása ReadBlock adott számú karakter olvasása adatfolyamokba egyenként írhatunk adatokat Write egyetlen karakter írása WriteLine egyetlen sor írása WriteBlock adott számú karakter írása
2014 © Bánsághi Anna
5 of 35
Adatfolyamok kezelése
4. előadás
VÉGJELIG TÖRTÉNŐ FELDOLGOZÁS ha tetszőleges számú adatot akarunk elemenként feldolgozni, akkor az olvasást végezhetjük egy adott végjelig általában a végjelet már nem akarjuk feldolgozni, ezért ellenőriznünk kell, hogy végjelet olvastunk-e be előreolvasás + elöltesztelő ciklus hátultesztelő ciklus
2014 © Bánsághi Anna
6 of 35
Adatfolyamok kezelése
4. előadás
ELŐREOLVASÁSI TECHNIKA Beolvas( adat ) ciklus amíg adat != végjel Feldolgoz( adat ) Beolvas( adat ) ciklus vége
HÁTULTESZTELŐ CIKLUSOS TECHNIKA ciklus eleje Beolvas( adat ) Feldolgoz( adat ) ciklus amíg adat != végjel
2014 © Bánsághi Anna
7 of 35
Adatfolyamok kezelése
4. előadás
ADATFOLYAM FAJTÁK konzol képernyő és billentyűzet szekvenciális fájlok
2014 © Bánsághi Anna
8 of 35
Adatfolyamok kezelése
4. előadás
KONZOL KÉPERNYŐ ÉS BILLENTYŰZET Olvassunk be a billentyűzetről egy sort, majd írjuk ki a képernyőre using System; namespace KonzolAlkalmazasok { public class Pelda { public static void Main() { string bemenet = Console.ReadLine(); Console.WriteLine( "be: " + bemenet ); } } }
2014 © Bánsághi Anna
9 of 35
Adatfolyamok kezelése
4. előadás
Olvassunk be a billentyűzetről egy sort, majd írjuk ki a képernyőre, hogy valós szám volt-e Használjuk a TryParse metódust public static void Main() { string bemenet; double valos; bemenet = Console.ReadLine(); if( double.TryParse( bemenet, out valos )) { Console.WriteLine( "Valós számot adtál meg: {0}", valos ); } else { Console.WriteLine( "Nem valós számot adtál meg" ); } }
2014 © Bánsághi Anna
10 of 35
Adatfolyamok kezelése
4. előadás
Olvassunk be a billentyűzetről egy sort. Ha egész számot kaptunk, akkor írjuk ki a rákövetkezőjét Szüntessük meg az előző példában használt bemenet nevű változót public static void Main() { int szam; if( int.TryParse( Console.ReadLine(), out szam )) { Console.WriteLine( ++szam ); } else { Console.WriteLine( "Nem egész számot adtál meg" ); } }
2014 © Bánsághi Anna
11 of 35
Adatfolyamok kezelése
4. előadás
Olvassunk be karakterenként a billentyűzetről az ENTER leütéséig, és írjuk is ki elemenként Használjuk az előreolvasási technikát public static void Main() { ConsoleKeyInfo billentyu = Console.ReadKey(); while( billentyu.Key != ConsoleKey.Enter ) { Console.WriteLine( " és tényleg: {0}", billentyu.KeyChar ); billentyu = Console.ReadKey(); } }
2014 © Bánsághi Anna
12 of 35
Adatfolyamok kezelése
4. előadás
Olvassunk be karakterenként a billentyűzetről az ENTER leütéséig, és írjuk is ki elemenként Használjuk a hátultesztelő ciklusos technikát public static void Main() { ConsoleKeyInfo billentyu; do { billentyu = Console.ReadKey(); Console.WriteLine( " és tényleg: {0}", billentyu.KeyChar ); } while (billentyu.Key != ConsoleKey.Enter ); }
2014 © Bánsághi Anna
13 of 35
Adatfolyamok kezelése
4. előadás
Írjuk ki a beolvasott szám rákövetkezőjét. Ha nem számot ad meg a felhasználó, akkor kérjük be újra Az ellenőrzéshez használjuk az előreolvasási technikát public static void Main() { int szam; Console.WriteLine( "Kérek egy számot" ); bool megfelelo = int.TryParse( Console.ReadLine(), out szam ); while( ! megfelelo ) { Console.Clear(); Console.WriteLine( "Kérek egy számot" ); megfelelo = int.TryParse( Console.ReadLine(), out szam ); } Console.WriteLine( ++szam ); }
2014 © Bánsághi Anna
14 of 35
Adatfolyamok kezelése
4. előadás
Írjuk ki a beolvasott szám rákövetkezőjét. Ha nem számot ad meg a felhasználó, akkor kérjük be újra Az ellenőrzéshez használjuk a hátultesztelő ciklusos technikát public static void Main() { int szam; do { Console.Clear(); Console.WriteLine( "Kérek egy számot" ); } while( ! int.TryParse( Console.ReadLine(), out szam )); Console.WriteLine( ++szam ); }
2014 © Bánsághi Anna
15 of 35
Adatfolyamok kezelése
4. előadás
Adjuk meg, hogy hány páros számot olvastunk a bemenetről, a beolvasás végjele a 0 A Számlálás programozási tételhez használjuk az előreolvasási technikát public static void Main() { int szam; int.TryParse( Console.ReadLine(), out szam ); int darab = 0; while( szam != 0 ) { if( szam % 2 == 0 ) { ++darab; } int.TryParse( Console.ReadLine(), out szam ); } Console.WriteLine( "A számok közül {0} páros volt", darab ); }
2014 © Bánsághi Anna
16 of 35
Adatfolyamok kezelése
4. előadás
SZEKVENCIÁLIS FÁJLOK hasonlóan tudunk írni és olvasni, mint konzol képernyő vagy billentyűzet esetén a billentyűzetről olvasás helyett egy előre rögzített tartalmat olvasunk be, és dolgozunk fel a képernyőre írás helyett egy újonnan létrehozott fájlba írunk a fájl típusa szerint sokféle lehet: szöveges, bináris, összetett ha az adatokat sorban olvassuk és sorban írjuk, akkor szekvenciális fájlról beszélünk
2014 © Bánsághi Anna
17 of 35
Adatfolyamok kezelése
4. előadás
SZEKVENCIÁLIS FÁJLOK VÉGJELEI az elemenkénti feldolgozáshoz meg kell tudnunk különböztetni a fájl elemeit minden fájl végén van egy fájl vége (EOF) végjel minden sor végén van egy sor vége (EOL) végjel
2014 © Bánsághi Anna
18 of 35
Adatfolyamok kezelése
4. előadás
FÁJLOK A HÁTTÉRTÁRON ÉS A PROGRAMBAN fizikai fájl a háttértáron, elérési útvonallal adott tartalom logikai fájl a programkódban, adott típusú változó értéke a programban a fizikai és a logikai fájlt össze kell rendelni
2014 © Bánsághi Anna
19 of 35
Adatfolyamok kezelése
4. előadás
LOGIKAI FÁJLTÍPUSOK a fájlkezelés szabványos könyvtára a System.IO általában megkülönböztetjük egymástól a kizárólag írható, a kizárólag olvasható és a módosítható fájlokat System.IO.FileStream
tetszőlegesen paraméterezhető
System.IO.StreamReader olvasható fájl System.IO.StreamWriter írható fájl
2014 © Bánsághi Anna
20 of 35
Adatfolyamok kezelése
4. előadás
A FELDOLGOZÁS LÉPÉSEI 1. 2. 3. 4.
2014 © Bánsághi Anna
Fizikai és logikai fájl összerendelése Fizikai fájl megnyitása a logikai fájlon keresztül Fizikai fájl feldolgozása a logikai fájlon keresztül Fizikai fájl bezárása a logikai fájlon keresztül
21 of 35
Adatfolyamok kezelése
4. előadás
SYSTEM.IO.FILESTREAM szekvenciális fájlok byte-onkénti feldolgozásának típusa
FÁJL HOZZÁFÉRÉSI MÓDOK az összerendelés során megadható a fájl hozzáférési módja Read adatok kizárólag olvasáshatók a fájlból Write adatok kizárólag írhatók a fájlba ReadWrite adatok írhatók és olvasáshatók a fájlból
2014 © Bánsághi Anna
22 of 35
Adatfolyamok kezelése
4. előadás
FÁJL ÜZEMMÓDOK az összerendelés során megadható a fájl üzemmódja Append létező fájl megnyitása úgy, hogy a soron következő írás a fájl végére történik Create fájl létrehozása, ha létezik, akkor törlése és újralétrehozása CreateNew fájl létrehozása, ha létezik, akkor kivétel váltódik ki Open létező fájl megnyitása OpenOrCreate ha nem létezik a fájl, akkor létrehozása, ha létezik, akkor megnyitása Truncate létező fájl megnyitása és tartalmának törlése
2014 © Bánsághi Anna
23 of 35
Adatfolyamok kezelése
4. előadás
A fájl feldolgozásának négy lépése using System.IO; ... public static void Main() { string fajl = "adat.txt"; FileStream fs; if( File.Exists( fajl )) { Console.WriteLine( "Létezik a fájl" ); fs = new FileStream( fajl, FileMode.Open, FileAccess.ReadWrite ); } else { Console.WriteLine( "Mostanáig nem létezett a fájl" ); fs = new FileStream( fajl, FileMode.CreateNew, FileAccess.Write ); } fs.Close(); }
2014 © Bánsághi Anna
24 of 35
Adatfolyamok kezelése
4. előadás
EGYSZERŰBB FELDOLGOZÁS LÉPÉSEI a fájl megnyitásához és bezárásához kapcsolódó feladatok kiválthatók egyetlen utasítással a using utasítás feltételezi, hogy létezik a fizikai fájl
using( Fizikai és logikai fájl összerendelése ) { Fizikai fájl feldolgozása a logikai fájlon keresztül }
2014 © Bánsághi Anna
25 of 35
Adatfolyamok kezelése
4. előadás
Fájl feldolgozása a using utasítással using System.IO; ... public static void Main() { string fajl = "adat.txt"; if( ! File.Exists( fajl )) { Console.WriteLine( "Nem létezik a fájl" ); } else { using( FileStream fs = new FileStream( fajl, FileMode.Open, FileAccess.Read )) { Console.WriteLine( "Létezik a fajl" ); } } }
2014 © Bánsághi Anna
26 of 35
Adatfolyamok kezelése
4. előadás
SYSTEM.IO.STREAMWRITER kizárólag írható szekvenciális fájlok soronkénti feldolgozása Hozzunk létre egy fájlt, soronként egy-egy egész számmal A számok generálásához használjuk a véletlenszám generátort public static void Main() { Random rand = new Random(); using( StreamWriter sw = new StreamWriter( "szamok.txt" )) { for( int i = 1; i <= 10; ++i ) { sw.WriteLine( rand.Next(0, 100) ); } } }
2014 © Bánsághi Anna
27 of 35
Adatfolyamok kezelése
4. előadás
SYSTEM.IO.STREAMREADER kizárólag olvasható szekvenciális fájlok soronkénti feldolgozása Irassuk ki egy fájl tartalmát soronként public static void Main() { string fajl = "szamok.txt"; if( ! File.Exists( fajl )) { Console.WriteLine( "Nem létezik a fájl" ); } else { using( StreamReader sr = new StreamReader( fajl )) { while( sr.Peek() != -1 ) { Console.WriteLine( sr.ReadLine() ); } } } }
2014 © Bánsághi Anna
28 of 35
Adatfolyamok kezelése
4. előadás
Adjuk meg egy fájlban tárolt egész számok összegét. Feltételezzük, hogy a fájl helyes adatokat tartalmaz. Az Összegzés programozási tételhez használjuk az előreolvasási technikát public static void Main() { int osszeg = 0; using( StreamReader sr = new StreamReader( "szamok.txt" )) { while( sr.Peek() != -1 ) { osszeg += int.Parse( sr.ReadLine() ); } } Console.WriteLine( osszeg ); }
2014 © Bánsághi Anna
29 of 35
Adatfolyamok kezelése
4. előadás
Kérjünk be egy fájl nevet, és írjuk ki a sorai hosszát public static void Main() { Console.WriteLine( "Adja meg a fájl nevét:" ); string fajl = Console.ReadLine(); if( ! File.Exists( fajl )) { Console.WriteLine( "A fájl nem létezik" ); } else { using( StreamReader sr = new StreamReader( fajl )) { while( sr.Peek() != -1 ) { Console.WriteLine( sr.ReadLine().Length ); } } } }
2014 © Bánsághi Anna
30 of 35
Adatfolyamok kezelése
4. előadás
Olvassunk a billentyűzetről egy sort, és írjuk ki egy szöveges fájlba Ha létezik a fájl, írjuk felül. public static void Main() { Console.Write( "Írjon ide valamit: " ); string szoveg = Console.ReadLine(); using( StreamWriter sw = new StreamWriter( "ujfajl.txt" )) { sw.WriteLine( szoveg ); } }
2014 © Bánsághi Anna
31 of 35
Adatfolyamok kezelése
4. előadás
Adott egy egész számokat tartalmazó fájl. Paritás szerint válogassuk szét egy fájl elemeit két új fájlba. Használjuk a Szétválogatás programozási tételt public static void Main() { using( StreamWriter sw1 = new StreamWriter( Path.Combine( dir, "paros.txt" )), sw2 = new StreamWriter( Path.Combine( dir, "prtln.txt" ))) { using( StreamReader sr = new StreamReader( "szamok.txt" )) { while( sr.Peek() != -1 ) { int szam = int.Parse( sr.ReadLine() ); if( szam % 2 == 0 ) { sw1.WriteLine( szam ); } else { sw2.WriteLine( szam ); } } } } }
2014 © Bánsághi Anna
32 of 35
Adatfolyamok kezelése
4. előadás
ELSŐ BEADANDÓ FELADATCSOPORT C# Fundamentals for Absolute Beginners channel9.msdn.com/Series/C-Fundamentals-for-Absolute-Beginners
Mod 03: Hello World Mod 04: Release könyvtár Mod 05 Mod 06: változók Mod 07: elágazás Mod 08: miért ad szintaktikai hibát az "x + y;" sor? Mod 09: számlálásos ciklus Mod 10: tömbök Mod 12: fájlok
2014 © Bánsághi Anna
33 of 35
Adatfolyamok kezelése
4. előadás
PROGRAMOZÁSI TÉTELEK KOMBINÁCIÓJA Készítsen egy 10 sorból álló adatfájlt, soronként egy-egy természetes számmal. Számítsa majd írja ki a konzolra az átlagnál nagyobb elemek számát. Segítség: három részből fog állni a program. Az elsőben használatba vesszük a fájlt az Összegzési tételt alkalmazva, a másodikban kiszámítjuk az átlagot, a harmadikban újra használatba vesszük a fájlt a Számlálás tételét alkalmazva.
2014 © Bánsághi Anna
34 of 35
Adatfolyamok kezelése
4. előadás
BEADÁS FORMAI KÖVETELMÉNYEI Hallgató_Neve_1.zip mod_03.cs Release könyvtár mod_06.cs mod_07.cs mod_08.txt mod_09.cs mod_10.cs mod_12.cs Program.cs
2014 © Bánsághi Anna
35 of 35