Operációs rendszerek gyakorlat 10. Gyakorlat Vakulya Gergely
2 Az alapértelmezett változó - I. • Sok függvény és vezérlési szerkezet alapértelmezett változóval tömörebbé tehető • $_ • while, <>, print, stb.
3 Az alapértelmezett változó - I. • Egy egyszerű példa: • while ($sor= ) • { – print $sor; • }
4 Az alapértelmezett változó - II. • Ugyanez alapértelmezett változóval: • while ( ) • { – print $_; • }
5 Az alapértelmezett változó - III. • Tömörebben és egyszerűbben • while (<>) • { – print; • }
6 Reguláris kifejezlések használata • A Perl nagy erőssége a reguláris kifejezések egyszerű használata • Két gyakori művelet: – Illesztés (match, m) – Csere (substitution, s)
7 Reguláris kifejezések illesztése • $sor=”szilva alma korte”; • if ($sor=~m/alma/) • { – print ”Illeszkedik\n”; • } • else • { – print ”Nem illeszkedik\n”; • }
8 Rövidítés alapértelmezett változóval • $_=”szilva alma korte”; • if (/alma/) • { – print ”Illeszkedik\n”; • } • else • { – print ”Nem illeszkedik\n”; • }
9 Illesztési példák • Nem csak szavakat, hanem bármilyen reguláris kifejezést is illeszthetünk. • /alma../ alma után két tetszőleges karakter • /a.*a/ ”a”, tetszőleges karakterek, majd ”a” • /alfa|beta/ alfa vagy beta • /e(r|k)/ e után r vagy k • /[A-Z]*[^A-Z]*/ Akárhány nagybetű után akárhány nem nagybetű • /bu{3,5}/ b után 3-5 u
10 Karakter-osztályok - I. • Perl-ben is használhatók karakter- osztályok: – \w ”word”: Minden kis-és nagybetű, valamint az aláhúzás jel (_) – \s ”space”: Whitespace karakterek (space, tabulátor, stb) – \d ”digit”: Számok
11 Karakter-osztályok - II. • A karakter-osztályok komplementerei is egyszerűen megadhatók: – \W: Minden, ami nem tartozik a \w-be – \S: Minden, ami nem tartozik a \s-be – \D: Minden, ami nem tartozik a \d-be
12 Az illeszkedő rész kinyerése • Előfordulhat, hogy az illesztett kifejezést illeszkedő részét is meg szeretnénk kapni • Illesztés után ez a $& speciális változóban tárolódik
13 Csoport képzése • A reguláris kifejezésen belül használhatunk zárójeleket, így csoportokat alakíthatunk ki. • A csoportra illeszkedő stringet kinyerhetjük – /(\w+) (\w+)/ – print ”Vezeteknev: ”.$1; – print ”Keresztnev: ”.$2;
14 Csere reguláris kifejezéssel • Szintaxis: – s/mit/mire/; (Alapértelmezett változóval) – $var=~s/mit/mire/; (Bármely változóval) • s/Veszpremi Egyetem/Pannon Egyetem/; • A zárójelezés itt is használható: • s/(Glomer)/censored $1/;
15 Globális csere • Az előző módszer csak az első találatot cseréli. • Az összes találat cseréjéhez a következő szintaxis használható: – s/mit/mire/g; (g=global)
16 Tabulált adatbázisok használata - I. • Reguláris kifejezések használatával egyszerűen kezelhetőek tabulált adatbázisok • A tabulált adatbázis egy szövegfájl, hasonló sorokkal: • Domotor Igor Felsoberecki • Bejczy Eva Saska
17 Tabulált adatbázisok használata - II. • Az adatbázis feldolgozása: • open(BE, "lista_nagy.txt") or die("Hiba\n"); • while($sor= ){ • chomp($sor); • $sor=~/(\w+ \w+)\t(\w+)\t(\d+)\t(.*)$/; • print("Nev: ".$1."\n"); • print("Lakhely: ".$2."\n"); • print("Iranyitoszam: ".$3."\n"); • print("Telefonszam: ".$4."\n"); • print("\n");}
18 Tabulált adatbázisok használata - III. • A mezők darabolása után azok szintén darabolhatók, például a név vezeték- és keresztnévre, a telefonszám körzetszámra és egyébre. • Példa: Mobilosok és vezetékesek számlálása
19 Stringek vágása • A stringek darabolása egyszerűbben is megoldható: – split(/elválasztó/,string); • A függvény visszatérési értéke egy tömb lesz, amely az egyes mezőket tartalmazza. • A függvénynek megadható egy limit is: – split(/elválasztó/,string,lim );
20 Példa a split-re ]/,"aaaa bbb\tccccc"); • foreach $a • { • print $a."\n"; • } • Az elválasztó tetszőleges reguláris kifejezés lehet.
21 Mezők összeillesztése • join(elválasztó,tömb); • A függvény visszatérési értéke egy string. • $bejegyzes=join(”\t”,(”név”, ”cím”,”telefon”));