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: LC_ALL – nastaví všechno najednou LC_kategorie – nastaví konkrétní kategorii 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" csh/tcsh: setenv VARIABLENAME "value" Zobrazení hodnoty proměnné: echo $VARIABLENAME echo $SHELL echo $LC_ALL

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

6 Otevírání souborů 2 způsoby pro čtení (vstupní soubor)
open(VSTUP,"ptaci.txt"); Lze otevřít více souborů pro čtení. 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
-r soubor lze číst -w do souboru lze zapisovat -x soubor je spustitelný -e soubor existuje -f jde o soubor -d jde o adresář -z soubor má nulovou délku -s soubor 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 = <VSTUP>; # do $prom se uloží 1. řádek ze souboru "ptaci.txt" my $cislo_radku = 1; while(<VSTUP>) # totéž jako while($_ = <VSTUP>) { print $cislo_radku++, " ", $_; } close VSTUP;

12 Zápis do souboru Tady není čárka !!!
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 Pole @ARGV
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 polem @ARGV foreach $s (@ARGV) { 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 = <VSTUP>) print VYSTUP $cislo_radku++, " ", $prom; }

16 Použití @ARGV 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 -n příkaz se obalí cyklem while -p jako -n, navíc se řádky vytisknou na STDOUT -v vypíš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