Programozási alapismeretek 3. Szöveges fájlok kezelése, Szöveges funkciók, a PHP nyelv alapjai Kis Balázs
Fájlkezelés Szöveges fájlok kezelése Kis Balázs 2
Fájlkezelés I. A legtöbb program használ fájlokat működéséhez. A fájlok sok funkciót betölthetnek, mint például: Adat szolgáltatást Konfiguráció szolgáltatást Adatkimentést Természetesen a legtöbb modern program manapság már inkább strukturált fájlszerkezetek használ. Amik közül jó néhánynak ugyancsak szöveges fájl az alapja. Kis Balázs 3
Fájlból olvasás I. Fájlból olvasni a StreamReader osztály segítségével tudunk, mely több funkcióval is rendelkezésünkre áll az optimális beolvasás érdekében. A StreamReader osztályt minden esetben példányosítanunk kell, mielőtt elkezdhetnénk a fájlból való olvasást. Fontos, hogy a fájlpointer mindig a fájl elején helyezkedik el létrehozás után, így példányosítás után mindig előröl olvassuk a fájlunkat. Kis Balázs 4
Fájlból olvasás II. Példányosítás: StreamReader file = new StreamReader( fájl ); Példányosítás utáni beolvasás soronként: while (!file.endofstream) { Console.WriteLine(file.ReadLine()); } Fontos, hogy a beolvasás végeztével zárjuk le a fájlt, mivel addig a programunk nyitva tartja azt. file.close(); Kis Balázs 5
Feladat I. Készítsünk programot, mely képes beolvasni neveket és hozzájuk tartozó átlagokat. A fájl elrendezése: Gipsz Jakab 3,3 Matr Ica 4,1 Kovács Béla 4,6 Kis Balázs 6
Feladat II. Az előző órán tanult módszerek segítségével állapítsuk meg az osztályról (a fájlban lévő tanulók) a következőeket: Osztály átlag Legjobb tanuló neve Legrosszabb tanuló neve Írassuk ki az összes tanulót átlagával és év végi jegyével. Tipp: Math.Round(); Kis Balázs 7
Fájlba írás I. Fájlba írni a StreamWriter osztály segítségével tudunk. A StreamWriter példányosítása után elkezdhetjük a fájlba kiírást. Fontos, hogy a Visual C#-os megvalósítás a kiíráskor nem a fájlba ír közvetlen, mivel az teljesítményromlást és biztonsági kockázatot okozna, hanem memóriába írja be a fájlba írandó anyagokat. Így ha nem zárjuk le a fájlunkat, vagy nem dump-oljuk az adatokat a fájl üres marad. Kis Balázs 8
Fájlba írás II. További nagyon fontos információ, hogy az olvasással ellentétben itt példányosításkor nem feltétlen kerülünk a fájl legelejére. Amennyiben a StreamWriter osztályt csak egyszerűen fájlnév megadással példányosítjuk, úgy a Rewrite metódus fut le, mely törli az előzőt, és létrehozza az újat (meglévő fájl írása esetén). Azonban a 4. paraméterezés szerint van lehetőségünk hozzáfűzni a fájlhoz, Append metódus. Kis Balázs 9
Fájlba írás III. Példányosítás: StreamWriter file = new StreamWriter( fájl, true); Beírás: file.writeline( szöveg ); A lezárás: file.close(); Azonnali dump: file.flush(); Kis Balázs 10
Feladat IV. Készítsünk programot, mely bekér EXIT végjelig neveket, majd fájlba kiírja azokat. Kis Balázs 11
Feladat V. Készítsen programot, mely az előző feladat alapján bekér neveket és átlagokat, majd létrehozza azokat olyan struktúrában, hogy az előző olvasó feladat fel tudja azokat dolgozni. Kis Balázs 12
String állományok kezelése I. A C#-ban csak úgy mint a legtöbb nyelvben a string állományok karakter tömbként vannak eltárolva. Ennek technikai előnye, hogy a szövegeket mint tömb tudjuk kezelni. A legtöbb szöveges funkció erre a tulajdonságra épül. Kis Balázs 13
String állományok kezelése II. A következő funkciók lesznek fontosak számunkra: EndsWith(), StartsWith() Teszteli, hogy mire végződik, vagy mivel kezdődik a szöveg. IndexOf() Megadja az adott karakter vagy szöveg helyét a szövegben. Insert() Belefűz egy új string-et a meglévőbe, a megadott pozícióba. LastIndexOf() Utolsó előfordulása a keresett karakternek, vagy szövegnek. Kis Balázs 14
String állományok kezelése III. Length A szöveg hosszát megadó tulajdonság. Remove() Eltávolít a szövegből részeket. Replace() Kicserél a szövegben bizonyos részeket. Split() Szétvágja a szöveget bizonyos tördelési pontoknál. Substring() Egy bizonyos részét vágja ki a szövegnek. Kis Balázs 15
String állományok kezelése III. ToLower(), ToUpper() Kis/nagybetűssé alakítás Trim() Fölösleges szóközök levágása a szöveg elejéről, végéről Kis Balázs 16
Feladat VI. Készítsünk programot, mely URL kompatibilis szöveggé alakítja a beadott szöveget. Pl.: Ez egy új hír ez_egy_uj_hir Kis Balázs 17
PHP nyelv alapjai Hypertext PreProcessor nyelvi alapjai, működése Kis Balázs 18
HTML Hyper Text Markup Language 1980-1990-ben vetődött fel a szükségessége. 1991-ben már HTML Tags néven volt ismeretes. Elsődleges célja, hogy formázott dokumentumokat közöljön az interneten. Referencia: http://www.w3schools.com Kis Balázs 19
HTML hátrányai A HTML hátránya, hogy mivel csak dokumentumokat közöl, semmilyen önműködő rendszert nem lehetett beleépíteni. Sokan felismerték a webben rejlő további lehetőségeket és megjelent a dinamizálásra való törekvés. Megjelentek a dinamikus webfejlesztési nyelvek. Kis Balázs 20
A PHP-ről általánosan Hypertext PreProcessor Ezt a nevet már az izraeli fejlesztő páros adta neki C alapú nyelv, ahogy az elődje a Perl is. Alapvetően sorfolytonos futtatást tesz lehetővé, de objektum orientált kód is fejleszthető benne. Az egyik legjobb funkció kiszolgálással bíró szerveroldali multiplatformos nyelv. Kis Balázs 21
Környezet előkészítése Mivel több platformos nyelv, így a jelenleg ismeretes operációsrendszerek legtöbbjére elérhető a fordító. A webes triumvirátus az egyik legoptimálisabb összeállítás és leggyakrabban ezt is használják. Apache + PHP + MySQL Természetesen IIS és TomCat webszerverekkel, illetőleg más ismertebb adatbázisokkal (MSSQL, PostgreSQL) is kompatibilis. Kis Balázs 22
Lokális futtatás Mivel a PHP szerver oldali nyelvek családjába tartozik, ezért alapvetően lokális futtatásra nincs lehetőség, legalábbis webszerver nélkül. Windows esetében a triumvirátust tartalmazó programcsomag a XAMPP Server és az Wamp Server. Ezekkel a programokkal a saját gépünk localhost-ján (127.0.0.1) tesztelhetjük programjainkat. Linux alatt természetesen az adott programok telepítésével érhetjük el ugyan ezt pl.: apt-get install apache2 php5 php5-cli php5-cgi libapache2-mod-php5 mysqlclient mysql-server php5-mysql Kis Balázs 23
A PHP nyelv Fájlunkban a PHP blokkot egy speciális tag-gel különítjük el a többi résztől. <?php?> de működik a <??> is. (PHP7-től már a második nem.) Nem szigorúan típusos nyelv mint más C alapú nyelvek. Pl. Microsoft Visual C#, Java, C++ A változóink típusa automatikusan kerül megválasztásra. HTML segítségével ábrázoljuk a kimenetet, melyet még a programkódon belül elő kell állítani. A C nyelvekből ismeretes parancs lezárást használja a ; -t így minden egyes parancs után ezt ki kell rakjuk. Kis Balázs 24
HTML gyorstalpaló I. Ahhoz, hogy a weben tudjunk megjeleníteni, minden esetben fontos, hogy legyen egy leíró nyelv mely segítségével tudunk adatot közölni formázva a klienssel. Erre PHP-ban is szükség van, és itt a HTML szolgáltatja a megjelenítés alapját Visual C#-ban is volt ilyen, azonban ott egyedi a felépítése. Kis Balázs 25
HTML gyorstalpaló II. A HTML felépítése: Minden HTML dokumentum XML tagekből épül fel. Azonban itt az XML-el ellentétben a tageket nem mi magunk választjuk meg, hanem már előre definiáltan léteznek. Minden tagnek meg van a maga megjelenése, hogy mit miért, és hogyan hoz létre, a kimeneten. Kis Balázs 26
HTML gyorstalpaló III. A HTML dokumentum általános szabályai: Minden esetben a dokumentum összes része egy <html> </html> tag páros közé kerül. Minden esetben létezik benne minimum 2 féle tag: <head> </head> A fejrész, melyben extra információk, a feldolgozáshoz elengedhetetlen adatok kapnak helyet. <body>..</body> A megjelenített dokumentum része. Kis Balázs 27
HTML gyorstalpaló IV. Számunkra hasznos HTML tag-ek <br> Egy sortörést létrehozó tag. <hr> Egy húrt kihúzó tag, vízszintesen elválasztja az egész teret, amiben benfoglalták. <p>..</p> Egy paragrafus tag, a közé ékelődő szöveg egy paragrafusban lesz megjelenítve. Kis Balázs 28
HTML gyorstalpaló V. <table></table> Egy táblázatot jelző tag <thead>..</thead> A táblázat fejléc sorát megjelenítő tag <th>..</th> A táblázat fejléc sorának egy celláját megjelenítő tag <tr>..</tr> A táblázat egy sorát jelentő tag. <td>..</td> A táblázat egy sorának egy celláját megjelenítő tag. Kis Balázs 29
Feladat VII. Az alábbi apró PHP-s program ki fogja írni oldalunkra, hogy Helló világ!. Mint az ebben a kis kódban is jól látszik, a print() funkció szolgál arra, hogy különböző elemeket megjelenítsünk a kimeneten ugyan ezt a szerepet tölti be az echo funkció is. Kis Balázs 30
HTML PHP-ban Természetesen a PHP lényege, hogy egy a böngészők által értelmezhető kódot adjon vissza. Így az alábbi példában egy Heading1-es címet adunk vissza: Kis Balázs 31
Változók A PHP-ban a változókat $ jellel jelöljük és deklarációra nincs szükség (gyengén típusos nyelv) Az érték adás = jellel történik Az alábbi példában láthatjuk a változó értékadását: Kis Balázs 32
Operátorok Változók operátorai: = legyen egyenlő Pl.: $i=0; i értéke 0 ++; -- érték növelése/csökkentése 1-el Pl.: $i++; i értéke 1 +=, -= érték plusz/mínusz legyen egyenlő Pl.: $i+=5; i értéke 6 Kis Balázs 33
Tömbök I. A tömbök PHP-ban több fajta módon előállíthatók: Kis Balázs 34
Tömbök II. C#-al ellentétben itt a tömbök nem előre meghatározott méretűek. Ennek oka az, hogy a PHP gyengén típusos nyelv, így tehát az optimalizáltságot nem a programozó, hanem maga a nyelv próbálja meg fenntartani. Kis Balázs 35
Tömbök III. A tömbök használatára egy másik példa PHP-ban: A tömbök indexelésére vonatkozó szabályok azonosak a C# tömbjeire vonatkozókkal. Kis Balázs 36
Mátrix A PHP-ban a mátrixok tömbben tömbként jönnek létre, ezáltal vagy elkezdjük használni mint mátrix, vagy előtte deklarálhatjuk is: A mátrix elérése itt azonban C#-al ellentétben valahogy így néz ki: $matrix[0][1] Kis Balázs 37
Konstans Csak úgy, mint a legtöbb programnyelvben az előre definiált értékeknek a PHP-ban is nagy szerepe lehet: Kis Balázs 38
Operátorok II. A C nyelvben használatos operátorokat használhatjuk PHPban is: == egyenlő === egyenlő és a típusuk is ugyan az!= nem egyenlő <; > kisebb, nagyobb <=; >= kisebb, nagyobb egyenlő vagy kapcsolat && és kapcsolat Kis Balázs 39
Elágazások I. Mivel a PHP C alapú nyelv, a C nyelvekben ismeretes szintaktikája lesz. Így tehát egy egyszerű elágazás így néz ki: Kis Balázs 40
Elágazások II. A többszörös elágazás: Kis Balázs 41
Ciklusok Típusai PHP-ban: Elöl tesztelős Hátul tesztelős Számlálós Bejáró ciklus Kis Balázs 42
Elöl tesztelős ciklus (WHILE) Először megnézi, hogy a feltétel adott-e, ha adott, akkor belép a ciklusmagba, lefuttatja, majd újra ellenőrzi, hogy belépjen-e egészen a feltétel teljesüléséig. Példa: Kis Balázs 43
Hátul tesztelős ciklus (DO WHILE) Először lefuttatja a ciklus magot, majd ellenőrzi, hogy le kelle még futnia. Ha még mindig teljesül a feltétel lefut újra. Példa: Kis Balázs 44
Számlálós ciklus (FOR) Addig fut, amíg a ciklusváltozó el nem ér, egy bizonyos értéket. Minden esetben helyettesíthető elöl tesztelős ciklussal. Példa: Kis Balázs 45
Mindenre alkalmazandó (FOREACH) Olyan esetekben használjuk, mikor egy tömb-öt szeretnénk bejárni, és minden egyes elemével csinálni valamit. Példa: Kis Balázs 46
Feladat VIII. Készítsünk programot, melyben előre deklaráltan léteznek jegyek, keressük ki a jegyek közül a legrosszabbat, és a legjobbat. Kis Balázs 47
Feladat XI. Írjunk programot, melyben deklarálva van egy konstans. Ha ebbe a konstansba számot írunk, (0-5) akkor kiírja betűkkel azt és egy változó értékét igazra (true) állítja minden más esetben hamis (false) a változó és kiírja, hogy nem talált! A visszatérés egy paragrafusban legyen. Kis Balázs 48