Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při –třídění –vyhodnocování regulárních výrazů Je třeba použít.

Podobné prezentace


Prezentace na téma: "Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při –třídění –vyhodnocování regulárních výrazů Je třeba použít."— Transkript prezentace:

1 Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při –třídění –vyhodnocování regulárních výrazů Je třeba použít use locale; nebo z příkazového řádku - přepínač Mlocale perl -Mlocale.... Je ale třeba mít locale správně nastavené v shellu.

2 Odbočka - Locale(s) je soubor jazykových, národních a kulturních pravidel, jako jsou znaková sada, formáty data, času a měny, pravidla pro abecední třídění, a také jazyk zpráv a uživatelského prostředí vůbec. Locale je třeba napřed nastavit v shellu. Důležité proměnné prostředí pro správné zobrazení češtiny: 1.LC_ALL – nastaví všechno najednou 2.LC_kategorie – nastaví konkrétní kategorii 3.LANG – použije se, není-li nastavena kategorie

3 LC_kategorie LC_kategorie nastavují jednotlivé kategorie. Standardní jsou tyto: LC_COLLATE (pravidla třídění), LC_CTYPE (vlastnosti znaků, malá a velká písmena), LC_MONETARY (formát měny), LC_NUMERIC (formát čísel), LC_TIME (formát data a času), LC_MESSAGES (jazyk zpráv a uživatelského rozhraní).

4 Nastavení proměnné prostředí v shellu bash: export VARIABLENAME="value" setenv VARIABLENAME "value" csh/tcsh: Zobrazení hodnoty proměnné: echo $VARIABLENAME echo $SHELLecho $LC_ALL

5 Nastavení locales Obecný formát hodnot: export LC_ALL="cs_CZ.ISO " setenv LC_ALL "cs_CZ.ISO " csh/tcsh: bash: Pro češtinu: Nebo alias: cs_CZ.ISO czech cs_CZ.UTF-8

6 Otevírání souborů 2 způsoby 1.pro čtení (vstupní soubor) open(VSTUP,"ptaci.txt"); Lze otevřít více souborů pro čtení. 2.pro výpis (výstupní soubor) open(OUT,">/export/home/hlava/prijmeni.out"); open(OUT,">>/export/home/hlava/prijmeni.out"); Lze otevřít více souborů pro výpis.

7 Unicode Třeba explicitně uvést, že pracujeme v kódování UTF-8: use encoding "utf-8"; Otevírání textových souborů v kódování UTF-8: open(VSTUP, "<:utf8", "ptaci.txt"); open(OUT, ">:utf8", "prijmeni.out"); open(OUT, ">>:utf8", "prijmeni.out");

8 Ovladač souboru (filehandle) Standardní – vždy k dispozici –STDIN –STDOUT –STDERR – výpis chyb Ostatní je třeba explicitně otevřít pomocí funkce open([ovladač souboru],[mode],[jméno souboru]); Ovladač souboru se tradičně píše velkými písmeny Zavírání souboru: close([ovladač souboru]);

9 Testování souborů Otevření souboru může být problematické => testy -rsoubor lze číst -wdo souboru lze zapisovat -xsoubor je spustitelný -esoubor existuje -fjde o soubor -djde o adresář -zsoubor má nulovou délku -ssoubor má nenulovou délku if(! (–e "soubor")) { open(S,">soubor") } if(-s "vstup" and -r "vstup") { open(V,"vstup") }

10 Příkaz die Perlovský idiom: open(SOUBOR,"s.txt") or die "Soubor s.txt nejde otevřít."; die ukončí program a vypíše hlášku na STDERR. Co to znamená? Umíte to zapsat jinak? Speciální proměnná $! pro výpis chybových hlášek: open(SOUBOR,"s.txt") or die "Problém: $!\n"; Když se neotevře soubor, vypíše se např. Problém: Permission denied.

11 Čtení ze souboru Příklad open(VSTUP,"ptaci.txt"); $prom = ; # do $prom se uloží 1. řádek ze souboru "ptaci.txt" my $cislo_radku = 1; while( ) # totéž jako while($_ = ) { print $cislo_radku++, " ", $_; } close VSTUP;

12 Zápis do souboru Do příkazu print napíšeme ovladač souboru, do kterého se má zapisovat print VYSTUP "toto se zapíše do výstupního souboru.\n"; Nezapíše-li se ovladač, zapisuje se do STDOUT print "toto se zapíše na standarní výstup.\n"; totéž jinak (většinou): print STDOUT "toto se zapíše na standarní výstup.\n"; Tady není čárka !!!

13 Zápis do více souborů (ne najednou) Lze otevřít více souborů a zapisovat pokaždé do jiného –např. ladicí tisky na STDOUT nebo do zvláštního jiného souboru (např. LOG), ostatní výstupy do výstupního souboru open(LOG,">log.txt"); open(VYSTUP,">ven.txt"); print LOG "toto se zapíše do souboru log.txt.\n"; print VYSTUP "toto se zapíše do souboru ven.txt.\n"; Ale máme i příkaz select: select LOG; print "toto se zapíše do souboru log.txt, ne na STDOUT!\n";

14 Parametry souboru Při spouštění programu se parametry píšou za jméno souboru Příklad: přepis souboru s očíslovanými řádky –program, který přečte všechny zadané soubory a vypíše je tak, že každý řádek předchází jeho pořadí –nevíme předem, kolik bude souborů Spuštění programu:./pocitej.perl soubor_1 soubor_2... soubor_n parametry jsou odděleny mezerami

15 Příklad s foreach $s { my $cislo_radku = 1; open(VSTUP, $s) or die "Nelze otevřít soubor $s\n"; open(VYSTUP, ">${s}.out") or die "Nelze otevřít...."; print "---- $s ----\n"; while($prom = ) { print VYSTUP $cislo_radku++, " ", $prom; }

16 Jméno souboru, který se má zpracovat (vstupní soubor) –může jich být víc Jméno souboru, který má být výsledkem (výstupní soubor) –i těch může být víc Číselné parametry – př.: sečíst čísla od N do M Příklad : jednoduchá kalkulačka

17 Perl z příkazového řádku Krátké prográmky na jedno použití není třeba uchovávat, lze je spustit přímo z příkazové řádky perl volba Volby -e "příkaz(y)"provede se příkaz -npříkaz se obalí cyklem while -pjako -n, navíc se řádky vytisknou na STDOUT -vvypíše verzi Perlu perl -pe "s/\r//" W_soubor.txt > U_soubor.txt perl –ne "print if/aby/"


Stáhnout ppt "Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při –třídění –vyhodnocování regulárních výrazů Je třeba použít."

Podobné prezentace


Reklamy Google