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

Podobné dokumenty
Ošetřování chyb v programech

SOUBORY, VSTUPY A VÝSTUPY

Jazyk C# (seminář 5)

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

Ú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

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

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

Algoritmizace a programování

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

Zápis programu v jazyce C#

Generické programování

17. Projekt Trojúhelníky

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

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

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

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

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

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

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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.

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

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Java Výjimky Java, zimní semestr

Tabulková data. budeme pracovat s CSV soubory položky oddělené středníkem, např.

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

PŘETĚŽOVÁNÍ OPERÁTORŮ

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

PREPROCESOR POKRAČOVÁNÍ

Dědičnost (inheritance)

Soubor jako posloupnost bytů

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

Úvod do programování 8. hodina

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Práce se soubory v Javě

Úvod do programovacích jazyků (Java)

KTE / ZPE Informační technologie

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Iterator & for cyklus

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Základy C++ I. Jan Hnilica Počítačové modelování 18

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

Teoretické minimum z PJV

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

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

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

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

Programování v Javě I. Leden 2008

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Perly code-review z praxe

Jazyk C# - přístup k datům

VISUAL BASIC. Práce se soubory

Datové struktury. alg12 1

Typický prvek kolekce pro české řazení

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

Algoritmizace a programování

Principy objektově orientovaného programování

8 Třídy, objekty, metody, předávání argumentů metod

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

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

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

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

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

6. PRÁCE S DATOVÝMI PROUDY

Jazyk C# (seminář 6)

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

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

Metodický list k didaktickému materiálu

Abstraktní datové typy: zásobník

Abstraktní datové typy

IB111 Úvod do programování skrze Python Přednáška 7

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

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

Regulární výrazy. Vzory

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

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

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

Objekty jako zapozdření dat. začneme vytvářet vlastní objekty a třídy

7. Datové typy v Javě

Jazyk C# (seminář 3)

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

OOPR_05. Případové studie

PB161 Programování v jazyce C++ Přednáška 8

Textové soubory. alg9 1

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

typová konverze typová inference

RMI Remote Method Invocation

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

Bázové třídy platformy.net

KTE / ZPE Informační technologie

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

Transkript:

Základy programování 4 - C# 2. cvičení Radek Janoštík Univerzita Palackého v Olomouci 19.2.2019 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 1 / 19

Reakce na úkoly (1/3) bool vs. Boolean (vs. Java) Rozdělení tříd do souborů Array.Equals vs. Enumerable.SequenceEqual Zbytečné if if (t1.one == t2.one && t1.two == t2.two && t1.three == t2.three) { return true; else { return false; vs. return t1.one == t2.one && t1.two == t2.two && t1.three == t2.three Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 2 / 19

Reakce na úkoly (2/3) Pozor na rozdíl mezi & a && Příklad: int value = 5; bool success = (value == 6) & DoSomething(); bool success2 = (value == 6) && DoSomething(); public static bool DoSomething() { LaunchMissilesToOlomouc(); return true; Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 3 / 19

Reakce na úkoly (3/3) Rozhranní IComparable je v.net nevytvářet vlastní: public interface IComparable { int CompareTo(Tuple obj); Příliš agresivní CompareTo public int CompareTo(object other){ if (this < (Tuple) other) return -1; else if (this == other) return 0; else return 1; Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 4 / 19

Třída DirectoryInfo (1/2) DirectoryInfo di = new DirectoryInfo("E:\\1\\"); Pozor! zadaná cesta v konstruktoru nemusí existovat Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 5 / 19

Třída DirectoryInfo (2/2) Metody pro výčet souborů a složek: EnumerateFiles(), EnumerateDirectories() Vs. pro vrácení seznamu soborů/složek GetFiles(), GetDirectories() Enum FileAttributes Archive, Compressed, Device, Directory, Encrypted, Hidden, IntegrityStream, Normal, NoScrubData, NotContentIndexed, Offline, ReadOnly, ReparsePoint, SparseFile, System, Temporary Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 6 / 19

Třída FileInfo FileInfo fi = new FileInfo("E:\\1\\test.txt"); Atributy stejný význam jako u DirectoryInfo Metody pro vytváření, mazání, zápis (viz. dále) Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 7 / 19

Třída DriveInfo Statická metoda GetDrives() vrací pole DriveInfo[] s informacemi od discích DriveInfo diske = new DriveInfo("E:\\"); Enum DriveType: CDRom, Fixed, Network, NoRootDirectory, Ram, Removable, Unknown Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 8 / 19

Čtení obsahu souboru Statická třída File Načtení celého obsahu do stringu FileInfo f = new FileInfo(@"E:\1\test.txt"); if (f.exists) { string str = File.ReadAllText(f.FullName); Načtení celého obsahu do pole řádků FileInfo f = new FileInfo(@"E:\1\test.txt"); if (f.exists) { string[] array = File.ReadAllLines(f.FullName); Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 9 / 19

Proudy (stream) Obecný mechanismus pro čtení/zápis dat od někud někam I Z venku do našeho programu! čtení z proudu I Z našeho programu někam! zápis do proudu Abstrakce stejný přístup pro různé zdroje a cíle např. I Sít I Soubor I Pamět I... Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 10 / 19

Čtení souboru pomocí proudů FileInfo f = new FileInfo(@"E:\1\test.txt"); if (f.exists) { StreamReader sr = null; try { sr = f.opentext(); string s = ""; while ((s = sr.readline())!= null) { Console.WriteLine(s); catch (Exception e) { Console.WriteLine("Chyba pri cteni souboru"); finally { if (sr!=null) { sr.close(); Případně using (StreamReader sr = new StreamReader(@"E:\1\test.txt")) {... Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 11 / 19

Zápis do souboru (1/4) Vytvoření souboru vrací stream File.Create(path); Zápis StreamWriter sw = null; try { sw = new StreamWriter(File.Create(@"E:\1\test2.txt")); for (int i = 0; i < 10; i++) { sw.writeline($"line {i"); catch (Exception e) { Console.WriteLine("Zapis souboru selhal"); finally { if (sw!=null) { sw.close(); Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 12 / 19

Zápis do souboru (2/4) Komprimovaný soubor pouhé přidání GZipStream StreamWriter sw = null; try { GZipStream gzs = new GZipStream(File.Create(@"E:\1\test2.gzip"), CompressionLevel.Op sw = new StreamWriter(gzs); for (int i = 0; i < 10; i++) { sw.writeline($"line {i"); catch (Exception e) { Console.WriteLine("Zapis souboru selhal"); finally { if (sw!=null) { sw.close(); Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 13 / 19

Zápis do souboru (3/4) binární vs. textový zápis Jak efektivně zapsat sekvenci jedniček a nul Co udělá: sw.writeline($"1110001001000"); Výsledkem je správně řetězec jedniček a nul, ale s velikostí 15B Proč? Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 14 / 19

Zápis do souboru (4/4) binární Lze použít BinaryWriter https://docs.microsoft.com/en-us/dotnet/api/ system.io.binarywriter?view=netframework-4.7.2 Zapisuje se pak binárně, nikoliv textově Soubor pak nepůjde číst klasicky (textový editor zobrazí rozsypaný čaj ) Je to ale efektivněší, ale režie je na vás (oddělovače, přesný formát, počítání bajtů) BinaryWriter sw = null; try { sw = new BinaryWriter(File.Create(@"C:\cs\test2.txt")); sw.write(0b1110001001000); Vyzkoušejte třeba sw.write(0.33f); vs. sw.write(0.33); Bude nějaký rozdíl? Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 15 / 19

Úkol (1/3) Naprogramovat jednoduchou příkazovou řádku s příkazy: I drives vypíše seznam disků s jejich jménem, velikostí a volným místem I dir vypíše seznam adresářů a souborů s datem jejich vytvoření, velikostí(u souborů) a názvem I cd adresar změní současný adresář na zadaný Navrhnout třídu BinaryMatrix, která bude efektivně reprezentovat binární matici Naprogramovat metody WriteMatrix a ReadMatrix pro efektivní uložení a načtení matice ze souboru Vhodně ošetřete vstupy a výstupy Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 16 / 19

Úkol (2/3) Náznak volání > zadejte počáteční adresář: C:\test[enter] C:\test> C:\test>cd test2[enter] C:\test\test2>dir[enter] Directory of C:\test\test2 03.12.2016 19:14 <DIR> app 07.11.2007 07:00 17 734 test.txt 07.11.2007 07:00 45 123 test2.pdf C:\test\test2>exit[enter] Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 17 / 19

Úkol (3/3) Příklad volání BinaryMatrix matrix = BinaryMatrix.ReadMatrix(path); Console.WriteLine(matrix); matrix.set(2,1,0); Console.WriteLine(matrix); matrix.writematrix(path); Výstup 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 1 0 1 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.2019 18 / 19