Kódování znaků vnitřní reprezentace znaků v paměti počítače pomocí čísel zobrazení mezi písmeny (pro lidi) a čísly (pro počítače) Zpočátku jen pro angličtinu,

Slides:



Advertisements
Podobné prezentace
Základy ukládání dat v počítači
Advertisements

Standardní knihovní funkce pro práci s textovými řetězci
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Kryptografie Šifrování
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Obecně o operačních systémech
HyperText Markup Language
Vytváření, použití dávkových souborů
VISUAL BASIC Práce se soubory.
Aplikační a programové vybavení
Internetové publikování Doc. Ing. Petr Zámostný, Ph.D. místnost: A-72a tel.: 4222, 4167 (sekretariát ústavu 111)
Algoritmy I. Cvičení č. 10.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
UŽITEČNÉ PROGRAMY – MŮJ PRVNÍ SKRIPT Spustíme více prográmků najednou. SPŠ Teplice - 3.V.
Materiály k přednášce Úvod do programování Ondřej Čepek.
( vstupy a výstupy v Matlabu na konzolu [ do Command Windows]
Informatika pro ekonomy II přednáška 4
17.Tabulkový procesor (filtrování a řazení dat, formuláře, podmínky a podmíněné formátování, export a import dat) Barbora Skoumalová 4.A.
Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49 Výukový materiál zpracovaný v rámci projektu „Učíme moderně“ Registrační číslo projektu:
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Základy číslicové techniky
Základy Číslicové Techniky
Jiří Znoj - zno Tvorba konkordace Algoritmy II 3. projekt, 5. zadání Jiří Znoj - zno
Tabulkové procesory Pelikánová Lucie 2002.
Maturitní okruh 22: Úvod do HTML. Značkovací a klasické jazyky Klasické: převládá strukturovaný text (programovací kód), skripty jsou prováděny na straně.
JavaScript Podmínky, cykly a pole.
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Vstupy a výstupy znaků a) Terminálový vstup a výstup ( getchar(), putchar() ) Přečtěte znak pomocí systémové funkce getchar() a vypište ho pomocí putchar().
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Práce se šablonami v MS Word 2007
Příkaz "echo" Příkaz "echo" Příkaz "echo" se používá pro zobrazení daných informací na monitoru. Příkaz "echo" se používá pro zobrazení daných informací.
UNIX — doplňky Informatika pro ekonomy II přednáška 9.
Aplikační a programové vybavení
Výkresové soubory Přednáška č.6. Témata přednášky Typy výkresových souborů –*.dwt, *.dwc, *.dwg, *.dxf DXF formát Ochrana souborů před poškozením Export.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Milan Kryl(c) 2004 MFF UK Databáze Caché NLS national language settings.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
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.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
14. června 2004Michal Ševčenko Architektura softwarového systému DYNAST Michal Ševčenko VIC ČVUT.
Balíky Hlavní balík - main - zatím jsme s jiným nepracovali Rozdělují tzv. namespaces = množiny jmen pro proměnné $lemma = "cukr"; znamená $main::lemma.
Hranice slov a vět (němčina) Ondřej Dušek. Základní schéma token.pl  dělení slov (s ohledem na data, URL, maily, A$,...)‏ sentrain.pl  hledání zkratek.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Ovladače souboru a funkce glob Přiřazení ovladače souboru – Nelze VSTUP = INPUT – Ale *VSTUP = *INPUT Vše, co se jmenuje INPUT bude přejmenováno na VSTUP.
Číselné soustavy VII ASCII kódování Jana Bobčíková.
Doporučená literatura
filtrování a řazení dat, podmíněné formátování,
Algoritmizace a programování Soubory. Oč jde? Vytvoření externího souboru Vytvoření externího souboru Tento soubor může být: Tento soubor může být: Textový.
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Reprezentace dat v počítači. základní pojmy  BIT označení b nejmenší jednotka informace v paměti počítače název vznikl z angl. BINARY DIGIT (dvojkové.
Import dat Access (16). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro tělesně.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Programovací jazyk C# 4. část - cykly.
Úvod do Pythonu – IO operace se soubory.
Vypracoval-Matěj Šmíd
Textové vstupy UIS Jiří Rybička
Ukládání dat v paměti počítače
Vytváření dokumentace algoritmů
Databázové systémy a SQL
Algoritmizace a datové struktury (14ASD)
Command line nástroje Jednoúčelové, ale mocné nástroje pro transformace textu Jak získat: Linux (a Mac) – součást operačního systému Windows – musí se.
Transkript prezentace:

Kódování znaků vnitřní reprezentace znaků v paměti počítače pomocí čísel zobrazení mezi písmeny (pro lidi) a čísly (pro počítače) Zpočátku jen pro angličtinu, tj. stačilo 7 bitů ASCII - American Standard Code for Information Interchange řídicí znaky písmena anglické abecedy znaménka (<>;:"/, apod.)

ASCII American Standard Code for Information Interchange

Neviditelné znaky ASCII Prvních 32 znaků tabulky – řídicí znaky Původně pro řízení dálnopisu nebo tiskárny Nejčastěji používané speciální znaky: SPC space, mezera, „prázdný znak“ HT Horizontal Tab - tabulátor LF Line Feed- odřádkování CR Carriage Return - návrat vozíku BS Back Space

ASCII – začátek tabulky Dec Hex Zkratka Význam 00 NUL Null character 1 01 SOH Start of Header 2 02 STX Start of Text 3 03 ETX End of Text 4 04 EOT End of Transmission 5 05 ENQ Enquiry 6 06 ACK Acknowledge 7 07 BEL Bell 8 08 BS Backspace 9 09 HT Horizontal Tab 10 0a LF Line Feed 11 0b VT Vertical Tab 12 0c FF Form Feed 13 0d CR Carriage Return 14 0e SO Shift Out 15 0f SI Shift In 16 DLE Data Link Escape Dec Hex Zkratka Význam 17 11 DC1 (XOn) 18 12 DC2 19 13 DC3 (XOff) 20 14 DC4 21 15 NAK Negative Acknowledge 22 16 SYN Synchronous Idle 23 ETB End of Transmission Block 24 CAN Cancel 25 EM End of Medium 26 1a SUB Substitute 27 1b ESC Escape 28 1c FS File Separator 29 1d GS Group Separator 30 1e RS Record Separator 31 1f US Unit Separator

ASCII nestačí - kódové stránky jen 7 bitů, pro angličtinu bez problémů osmý bit se využil „živelně“ pro národní abecedy – různé znakové sady, např. čeština: ISO Latin2, Windows 1250, Kamenických, ... Prvních 7 bitů VŽDY stejné, tj. ASCII „code page”, česky: kódová stránka, kódování, znaková sada

Norma ISO 8859 Latin-1 zaopatří většinu západoevropských jazyků přidáno 96 písmen kódování Windows-1252 dalších 27 Latin-2 – pro středoevropské a východoevropské jazyky (ne azbuka) jen částečně kompatibilní s Latin-1 Latin-3, Latin-4, Latin-5, … Latin-10

Kódové stránky nestačí - Unicode Problémy: Více znaků v 1 dokumentu Převod mezi kódovými stránkami Přenositelnost textů Unicode „The Unicode Standard is a character coding system designed to support the worldwide interchange, processing, and display of the written texts of the diverse languages and technical disciplines of the modern world. In addition, it supports classical and historical texts of many written languages.“

Unicode Standard Zodpovědný za interpretaci znaků Nedefinuje grafickou podobu znaků Prvních 128 znaků je ASCII Prvních 256 znaků ze sady ISO Latin 1 Jednoznačné pojmenování každého znaku Znaky se mohou (jenom) přidávat – stabilita

How Many Different Characters? a A à á â ã ä å ā ă ą a a a a a a a a a a a

Unicode Každému znaku je přiřazen název číselný kód, tzv. „code point“, např. A je U+0041 Celkem 1 114 112 znaků s kódy 016 až 10FFFF16 17 částí, každý o velikosti 216 První část = Basic Multilingual Plane (BMP) obsahuje znaky běžně používaných abeced

Unicode a jeho kódování UTF-32 všechny znaky ve 4 bytech Výhoda: stejná délka všech znaků Nevýhoda: plýtvání místem UTF-16 kompromis mezi úsporností a kompaktností nejčastější znaky (BMP) ve 2 bytech, ostatní ve 4

UTF-8 Unicode Transformation Format-8. ASCII znaky (code points 0-127) mají stejný kód, tj. jen v 1 bytu, (v Americe si toho vůbec nevšimnou) ostatní znaky ve 2 až 6 bytech bitů hex min hex max zapsaná posl. bytů ve dvojkové soustavě 0-7 00000000 0000007F 0vvvvvvv 8-11 00000080 000007FF 110vvvvv 10vvvvvv 12-16 00000800 0000FFFF 1110vvvv 10vvvvvv 10vvvvvv

UTF-8 příklady Char. Binary code point Binary UTF-8 Hexadecimal UTF-8 $ U+0024 0100100 00100100 24 ¢ U+00A2 000 10100010 11000010 10100010 C2 A2 € U+20AC 00100000 10101100 11100010 10000010 10101100 E2 82 AC 𤭢 U+24B62 00010 01001011 01100010 11110000 10100100 10101101 10100010 F0 A4 AD A2

Kódování, konverze Každá aplikace pracující s textem musí bezpodmínečně vědět, v jakém kódování je text zapsán Jinak se kódy špatně interpertují - i zobrazí Konverze mezi kódováními existuje-li příslušný znak v obou kódováních – OK neexistuje-li – zobrazí se např. jako ?, nebo �, nebo jiný znak, nebo se vypíše kód, ... příkaz iconv

Nastavení kódování - 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

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í).

Jak nastavit UTF-8 Příkaz less proměnná LESSCHARSET hodnota: "utf-8" (místo "ascii", "latin1", ...) Perl proměnná PERL_UNICODE hodnota: SAD

Proměnná PERL_UNICODE Musí být nastavena na SAD: S … STDIN, STDOUT i STDERR budou v UTF-8 D … všechny vstupy i výstupy budou otevřeny v UTF-8 A … prvky pole @ARGV se interpretují jako řetězce v kódování UTF-8 Lze zadat i přepínačem -C na 1. řádce skriptu: #!/usr/bin/perl -CSAD use utf8;

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

Nastavení proměnné prostředí v shellu bash: export LESSCHARSET="utf-8" bez mezer! csh/tcsh: setenv LESSCHARSET "utf-8"

Nastavení locales Obecný formát hodnot: Pro češtinu: Nebo alias: bash: de_DE.utf8@euro Nastavení locales Obecný formát hodnot: jazyk[_teritorium[.znaková_sada]][@modifikátor] Pro češtinu: Nebo alias: cs_CZ.ISO-8859-2 cs_CZ.UTF-8 czech bash: export LC_ALL="cs_CZ.ISO-8859-2" csh/tcsh: setenv LC_ALL "cs_CZ.ISO-8859-2"

Další příklady locales de_DE.utf8@euro Další příklady locales Obecný formát hodnot: jazyk[_teritorium[.znaková_sada]][@modifikátor] Pro angličtinu jich je několik, např: en_US.UTF-8 en_NZ.UTF-8 Pro němčinu: de_DE.UTF-8 de_DE.UTF-8@euro

Problémy s češtinou Je-li kódování nastaveno „špatně“, potom: Znaky s diakritikou se ne vždy považují za alfanumerické znaky Vadí to nejen při zobrazování, ale i při třídění vyhodnocování regulárních výrazů (později) převodu na velká / malá písmena ... Je třeba použít use locale; Nefunguje dobře pro UTF-8 !!! ... viz dále

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

Unicode Třeba explicitně uvést, že pracujeme v kódování UTF-8: #!/usr/bin/perl -CSAD use utf8; Otevírání textových souborů v kódování UTF-8: open(VSTUP, "<:utf8" , "pearl.txt"); open(OUT, ">:utf8", "prijmeni.out"); open(OUT, ">>:utf8", "prijmeni.out"); Je-li nastaveno #!/usr/bin/perl -CSAD nebo proměnná PERL_UNICODE, není třeba 2.argument

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]);

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")

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.

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

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 !!!

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";

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

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; }

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

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/"

Perl z příkazového řádku - Unicode Další volba -C pro práci s kódováním UTF-8 stejné jako pro první řádku skriptu – hodnota SAD perl -CSAD -pe "use utf8; ..." perl -CSAD -ne "use utf8; print if/aby/" soubor.txt perl -Mlocale -ne "print if/aby/" soubor.txt