Ošetřování chyb v programech



Podobné dokumenty
Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.

Soubor jako posloupnost bytů

8. přednáška: Soubory a proudy

Zápis programu v jazyce C#

Dědičnost (inheritance)

Úvod do programování 8. hodina

Úvod Informace o prostředí Práce se soubory Regulární výrazy Konec. Programování v C# Soubory a regulární výrazy. Petr Vaněček 1 / 27

SOUBORY, VSTUPY A VÝSTUPY

Textové soubory. alg9 1

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Z. Kotala, P. Toman: Java ( Obsah )

POČÍTAČE A PROGRAMOVÁNÍ

Úvod do programovacích jazyků (Java)

Jazyk C# (seminář 5)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

1. Téma 12 - Textové soubory a výjimky

VISUAL BASIC. Práce se soubory

Práce se soubory. Základy programování 2 Tomáš Kühr

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Tato tematika je zpracována v Záznamy přednášek: str materiál: PrikladyZobrazeniCisel.pdf

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

PREPROCESOR POKRAČOVÁNÍ

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

ADT/ADS = abstraktní datové typy / struktury

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Java Výjimky Java, zimní semestr

7. Datové typy v Javě

Výjimky. v C# a Javě

KTE / ZPE Informační technologie

Algoritmizace a programování

Připravil: David Procházka. Programovací jazyk C++

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

C# - I/O, streamy, práce se soubory

3 KTE / ZPE Informační technologie

- jak udělat konstantu long int: L long velka = 78L;

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

IRAE 07/08 Přednáška č. 7. Začátek (head)

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Úvod do programovacích jazyků (Java)

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Kolekce, cyklus foreach

17. Projekt Trojúhelníky

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Výjimky. Tomáš Pitner, upravil Marek Šabo

DUM 11 téma: Úvod do příkazové řádky

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

2.2 Acronis True Image 19

IUJCE 07/08 Přednáška č. 6

Programování v Javě I. Leden 2008

Metodický list k didaktickému materiálu

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

Java a XML. 10/26/09 1/7 Java a XML

Vstup a výstup datové proudy v C

Datové proudy objektový vstup a výstup v C++

Datové struktury. alg12 1

SEMESTRÁLNÍ PROJEKT Y38PRO

11b Další příklady operací vstupu a výstupu (úvod viz 10)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programování - Java. Cvičení č.4

Algoritmizace a programování

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

C# konzole Podíl dvou čísel, podmínka IF

6. PRÁCE S DATOVÝMI PROUDY

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Programování v Javě I. Únor 2009

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Výjimky (exceptions), generické metody a třídy v C#

Přednáška. Systémy souborů. FAT, NTFS, UFS, ZFS. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Počítačové sítě Systém pro přenos souborů protokol FTP

Java - výjimky. private void vstup() throws IOException {... }

Systém souborů Mgr. Josef Horálek

Profilová část maturitní zkoušky 2017/2018

IRAE 07/08 Přednáška č. 1

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Práce se soubory v Javě

KTE / ZPE Informační technologie

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

vstup a výstupv jazyce C

Práce se soubory. Úvod do programování 2 Tomáš Kühr

10 Práce s řetězci - pokračování

InputStream. FilterInputStream

Systém souborů (file system, FS)

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Textové soubory

Datové typy a struktury

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Transkript:

Ošetřování chyb v programech Úvod chyba v programu = normální záležitost typy chyb: 1) programátorská chyba při návrhu každých 10 000 řádek 1 chyba lze jen omezeně ošetřit (před pádem aplikace nabídnout uložení souborů, zaslání diagnostických informací) 2) nevhodný zásah uživatele např. program vyžaduje zadání čísla uživatel zadá text nutno plně ošetřit běhová chyba (run time error) Způsoby ošetření chyb dány možnostmi programovacího jazyka Varianty: o Chybové (návratové) kódy o Výjimky Chybové (návratové) kódy návratová hodnota metody = informace o běhu metody (typicky bool) vrací bool true = převod se podařil int cislo; bool parseok = Int32.TryParse(Console.ReadLine(), out cislo); if (!parseok) Console.WriteLine("prevod se nepodaril"); Kontrola je dobrovolná, programátora k ní nic nenutí int cislo; Int32.TryParse(Console.ReadLine(), out cislo); Výjimky (Exceptions) = moderní způsob ošetření chyb v OOP jazycích Princip a základní pojmy: 1) V programu dojde k běhové chybě 2) Běh program se přeruší vyhodí se výjimka (throw exception) 3) Program se pokusí výjimku zachytit (catch exception) = ošetřit chybu ve spec. části kódu kód neexistuje program spadne a skončí 1

Příklad vyhození výjimky načítání celého čísla z klávesnice (bude zadáno číslo reálné) nebude zadáno celé číslo int a = Int32.Parse(Console.ReadLine()); vyhození výjimky 1) 2) Ošetření vyjímek příkaz try catch chráněný blok static void Main(string[] args) int x; Console.WriteLine("bezpečný kód"); try výjimka = skok na... int a = Int32.Parse(Console.ReadLine()); // Int32.Parse() několik typu vyjimek x = 255 / a; // možná výjimka typu DivideByZeroException Console.WriteLine("Vysledek deleni je 0", x); zachycení výjimky catch (Exception e) Console.WriteLine("Chyba!!!"); Console.WriteLine(e.Message); Console.WriteLine("program ale pokračuje dál!!!"); string Message popis chyby 2

a další Způsoby reakce na chybu Jen vypíšeme hlášení (a ukončíme program stejně se něco nepovedlo) o Viz. min. příklad o Jen v případech s mizivou pravděpodobností výskytu Po zachycení problém napravíme (program pokračuje) o cyklus dokud se bude vyhazovat výjimka, opakuj double prom; while (true) try prom = Double.Parse(Console.ReadLine()); break; // při chybě se to sem nedostane catch (Exception e) Console.WriteLine("Opakujte zadání, protože:"); Console.WriteLine(e.Message); // vše OK, pokračujeme 3

Souborový vstup a výstup Terminologie Soubor file = soubor; adresář (directory) nebo také složka (folder) jméno souboru (filename) = identifikace souboru na paměťovém médiu, skládá se z: o přípona souboru = vše od poslední tečky ve jménu do konce.doc;.pdf nemusí být o jméno souboru = vše, co není přípona o délka jména: MS-DOS: 8+3 Win32: max. 255 znaků aktuální adresář (current directory) nadřazený adresář (parrent directory) kořenový adresář (root) relativní cesta k souboru (relative path) absolutní cesta k souboru (absolute path) úplné jméno souboru = včetně cesty soubor = data (posloupnost Bytů) uložená na nějakém paměťovém médiu práci se souborem na nízké úrovni zajišťuje operační systém programátor se nemusí o nic starat (např. fyzické uložení souboru apod.) typ souboru co to je za soubor? o = přesný význam každého bytu v souboru pro jeho uživatele o rozlišení dle přípony souboru = název za poslední tečkou základní dělení na textové a binární soubory práce soubory je velmi podobná práci s obrazovkou a klávesnicí Textové vs. binární soubory Textové soubory lze je zpracovat libovolným textovým editorem o mají čitelný obsah o nezaměňovat např. s textovým dokumentem ve Wordu.doc není prostý text!!! přípony: o typicky *.txt o další ryze textové soubory: *.html *.cs jsou organizovány po řádcích 4

Binární soubory o různá délka o končí domluveným znakem: Windows <CR><LF> ("\r\n") Linux <LF> ("\n") Macintosh <CR> ("\r") při běžné práci s PC mnohem častější o obrázky:.bmp.gif.jpg o zvuk:.mp3.wav o video:.avi.mpeg.mov o dokumenty:.doc.xls.pdf vnitřní organizace ( význam jednotlivých bytů) souboru závisí na tvůrci formát souboru o veřejná specifikace formátu video (.avi,.mpg), zvuk(.mp3,.waw), OpenOffice (.rtf) o neveřejná (.doc.xls, AutoCAD) oproti textovým: rychlejší zpracování, paměťově úspornější příklad obsahu souborů uložení dvou čísel typu char: 1 a 255: o textový soubor (každé číslo na samostatném řádku): 31 0d 0A 32 35 35 Proudy (stream) o binární soubor: 1 FF proud = objekt k přenosu dat o přenos dat zvenčí do programu = čtení z proudu o přenos dat z programu ven = zápis z proudu Programátor přístup: <CR><LF> ASCII 2 Program Proud Soubor má nemá princip práce nejenom se soubory např. také síť, paměť, obrazovka (proud jen pro zápis), klávesnice (jen pro čtení) výhoda: stejná logika pro různá zařízení práce se souborem = práce s konzolí o kód může být nezávislý na zdroji/příjemci dat např. lze přesměrovat vstup/výstup z konzole na soubor Proudy s vyrovnávací pamětí (buffered stream) např. zápis souboru na disk po znacích neefektivní 5

lepší: zápis do RAM, a pak najednou větší blok na disk (podobně čtení) Programátor přístup: Program buffer Soubor má nemá problém v programu: zápis do souboru (všechno co jsem chtěl) vše se nemuselo zapsat na disk (něco v bufferu) souborem ukončit o viz. např. vyjmutí flash disku z PC Práce se souborem v C# manipulace na úrovni OS (přesuny, mazání ) práce s obsahem (čtení, zápis ) o základní principy stejné pro oba typy souborů: 1) otevření souboru 2) práce se souborem o čtení, zápis o pohyb po souboru seek 3) uzavření souboru třídy StreamReader a StreamWriter o jmenný prostor System.IO vždy možný výskyt běhové chyby čeština bez problémů Práce se souborem na úrovni OS Třída File statické metody pád programu nutnost korektně práci se nutno using System.IO; veškeré operace se souborem do try void File.Copy(string co, string kam, bool prepsat) void File.Copy(string soubor, string kam) o kopie souboru soubor na místo kam o prepsat pokud false a soubor kam existuje o např. File.Copy(@"c:\dokumenty\pr10.doc", "pr11.doc"); void File.Move(string soubor, string kam) o přesun souboru soubor na místo kam void File.Delete(string soubor) o vymaže soubor bool File.Exists(string soubor) výjimka IOException do aktuálního adresáře 6

Kódování o test existence souboru další metody viz. MSDN (atributy souboru, časy modifikace ) Třída Directory = práce s adresáři (jinak stejné jako File) Existují také FileInfo a DirectoryInfo Detekce Unicode vs. 8b sady bez problémů (dáno principy) unicode volitelně na začátku souboru značka (BOM byte order mask) o Textový soubor s obsahem a kódování Obsah (byty hex) ASCII 61 1250 61 UTF-8 EF BB BF 61 UTF-16 LE FF FE 61 00 UTF-16 BE FE FF 00 61 8b sady nutno vybrat ručně (např. ASCII vs. 1250) Poznámkový blok: o Vytváří 1250 o Čte (= detekuje) 1250, všechny Unicode Čtení z textového souboru Otevření a uzavření souboru Otevření = vytvoření proměnné souboru ručně nastavené kódování StreamReader sr = new StreamReader(string jmeno, Encoding kodovani); 1) jmeno = (cesta +) název souboru (např. @"C:\text.txt") 2) kodovani = použité kódování znaků pro windows 1250 Encoding.GetEncoding(1250) ostatní vlastnosti třídy Encoding (např. Encoding.ASCII) automatická detekce kódování (pro Unicode soubory) StreamReader sr = new StreamReader(string jmeno, bool autodetekce); 1) autodetekce nastavit true 2) 8b sady nelze rozeznat nastaveno UTF-8 Soubor neexistuje výjimka (nutno ošetřit) 7

Uzavření souboru Možnosti čtení Uzavření po skončení práce (viz buffered streams) způsoby: o instanční metoda Close() try StreamReader sr = new StreamReader("aaa.txt", true); // prace se souborem sr.close(); catch (Exception e) Console.WriteLine(e.Message); o příkaz using soubor je uzavřen automaticky preferovaný způsob try using (StreamReader sr = new StreamReader("aaa.txt", true)) // prace se souborem // okamzik uzavreni souboru catch (Exception e) Console.WriteLine(e.Message); nelze náhodný přístup (ruční pohyb po souboru) pouze sekvenčně od začátku do konce vše instanční metody (dále předpokládáme proměnnou sr typu StreamReader) string ReadLine() přečte jeden řádek a posune ukazatel pozice v souboru na další o konec souboru metoda vrací null o příklad: čtení souboru po řádcích a výpis na obrazovku string radek; while ((radek = sr.readline())!= null) Console.WriteLine(radek); přečte jede znak a posune ukazatel pozice v souboru na další o obvyklé použití char znak = (char)soubor.read() int Read() přečte soubor od akt. pozice do jeho konce o příklad: čtení souboru a výpis na obrazovku string ReadToEnd() 8

string obsahsouboru = soubor.readtoend(); Console.WriteLine(obsahSouboru); Zápis do textového souboru Otevření souboru StreamWriter sw = new StreamWriter(string jmeno, bool rezim, Encoding kodovani); kde: o bool rezim = způsob otevření: Možnosti zápisu false a soubor existuje soubor je přepsán true a soubor existuje přidávání na konec jinak vytvořen nový soubor o ostatní viz. čtení sw.writeline(), sw.write() Principy, formátování atd. viz Console 9