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

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

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

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

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

Metodický list k didaktickému materiálu

POLE. - datová struktura ze složek stejného typu, ke kterým se přistupuje pomocí indexů

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

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

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

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

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

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

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

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

Jazyk C# a platforma.net

Př. program s popojíždějícím autíčkem o 50 pixelů při každém stisku Popojeď

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

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

Desetinná čísla. pro celá čísla jsme používali typ int. pro desetinná čísla používáme typ double

Pokročilá práce s proměnnými

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

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

Jazyk C# a platforma.net

Nejzajímavější jsou události MouseDown a KeyDown.

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

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Metodický list k didaktickému materiálu

Jazyk C# (seminář 5)

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

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

Předdefinované dialogy

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

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

Metodický list k didaktickému materiálu

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

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

Takto chápanému druhu objektů se říká TŘÍDA.

VISUAL BASIC. Práce se soubory

Přehled příkazů pro CLI část aplikace Fits Header Modifier Jan Hlava

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.

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

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

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

zeleně jsou označené funkce, které patří do zlatého fondu Excelu tyto funkce jsou sice zajímavé, ale pravděpodobně je moc často nepoužijete

Větvení programů příkaz IF

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Komponenty v.net. Obsah přednášky

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

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

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

OOPR_05. Případové studie

Zápis programu v jazyce C#

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

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Metodický list k didaktickému materiálu

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

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

Tabulkový procesor. Základní rysy

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

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

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Přehled probírané látky

Obsah. 1.1 Práce se záznamy Stránka Dnes Kontakt se zákazníkem... 5

20. Projekt Domácí mediotéka

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

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

Cvičné příklady Hodina 8 Cvičný 1

soubor dat uspořádaných do řádků a sloupců

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

Dotazy tvorba nových polí (vypočítané pole)

DATABÁZE MS ACCESS 2010

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

Jazyk C# (seminář 6)

PREPROCESOR POKRAČOVÁNÍ

2. Cvičení Formáty dat, jednoduché vzorce

MANUÁL K PROGRAMU JEDNODUCHÝ SKLAD (VER-1.2)

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

Regulární výrazy. Vzory

Standardní algoritmy vyhledávací.

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

Soubor jako posloupnost bytů

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

5 Rekurze a zásobník. Rekurzivní volání metody

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

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

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

INFORMACE. ÚČETNICTVÍ ORGANIZAČNÍCH KANCELÁŘÍ KOMPLEXNÍ SYSTÉM PRO VEDENÍ ÚČETNICTVÍ Naplňování faktury do formuláře PDF.

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

VAŠE NOVÁ APLIKACE NISSAN GROUP EPC PŘÍRUČKA ZAČÍNÁME

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

Knihovna XmlLib TXV první vydání prosinec 2010 změny vyhrazeny

Generické programování

URČITÝM ZPŮSOBEM PODOBNÉ

MANUÁL PRO PRÁCI S INFORMAČNÍM SYSTÉMEM ČESKÉ UNIE SPORTU

Transkript:

Tabulková data budeme pracovat s CSV soubory položky oddělené středníkem, např. Číslo zákazníka;příjmení;jméno;datum narození 17;Novotná;Bohdana;25.11.1982 22;Kender;David;24.12.1986 29;Čihák;Jan;18.3.1969 33;Zdobinská;Vlasta;19.6.1932 43;Pohořalá;Michaela;22.6.1946 51;Brejcha;Jiří;27.4.1945 60;Kubále;Zdeněk;8.10.1943 68;Hemelík;Miroslav;21.6.1973 71;Hessingová;Lucie;12.4.1930 75;Balada;Jakub;2.2.1962 76;Kotýnek;Jaroslav;11.7.1948 78;Popek;Marian;1.12.1963 82;Prokopcová;Jiřina;2.11.1963 91;Šachová;Lucie;6.7.1965

Filtrování program, který načte CSV soubor a vyfiltruje ženy narozené 1970 a dříve http://www.gfp.cz/prg/zakaznici.csv

private void tlačítkoprocházetvýchozí_click(object sender, EventArgs e) if (oknootevřenísouboru.showdialog() == DialogResult.OK) polevýchozí.text = oknootevřenísouboru.filename; private void tlačítkoprocházetvýsledný_click(object sender, EventArgs e) if (oknouloženísouboru.showdialog() == DialogResult.OK) polevýsledný.text = oknouloženísouboru.filename; // Přečtení a zápis prvního řádku (záhlaví) string záhlaví = výchozí.readline(); výsledný.writeline(záhlaví); // Čtení z výchozího, vyhodnocení a případný zápis do výsledného string řádek; while ((řádek = výchozí.readline())!= null) // Částečné dekódování řádku string[] hodnoty = řádek.split(';'); string hodnotapohlaví = hodnoty[3].trim().tolower(); bool žena = hodnotapohlaví == "žena"; string hodnotaroknarození = hodnoty[4].trim(); int roknarození = Convert.ToInt32(hodnotaRokNarození); private void tlačítkovyber_click(object sender, EventArgs e) // Otevření souborů StreamReader výchozí = new StreamReader(poleVýchozí.Text, Encoding.Default); StreamWriter výsledný = new StreamWriter(poleVýsledný.Text, false, Encoding.Default); // Ženy ročník 1970 a starší do výsledného souboru if (žena && roknarození <= 1970) výsledný.writeline(řádek); // Zavření obou souborů výchozí.close(); výsledný.close(); MessageBox.Show("HOTOVO!"); Split(oddělovač) rozdělí řetězec na pole položek Trim() zlikviduje mezery na začátku a konci řetězce ToLower() převede řetězec na malá písmena

Práce s datem http://www.gfp.cz/prg/zakaznici_s_daty_narozeni.csv instance DateTime k uložení jednoho data a času různé varianty konstruktorů rok, měsíc, den rok, měsíc, den, hodina, minuta, sekunda a další DateTime.Today dnešní datum v 0:00:00 DateTime.Now dnešní datum a aktuální čas vlastnosti Year, Month, Day, Hour, Minute, Second, Millisecond, DayOfWeek, DayOfYear AddXXX umí přidat udaný počet dní, hodin dvě instance DateTime lze odečítat a výsledek uložit do instance TimeSpan, která má např. užitečnou vlastnost Days

private void knoflíky_checkedchanged(object sender, EventArgs e) // Pole pro zadání data bude aktivní pouze tehdy, když // uživatel zvolí variantu "Jindy" poledatum.enabled = knoflíkjindy.checked; private void tlačítkoprocházet_click(object sender, EventArgs e) if (oknootevřenísouboru.showdialog() == DialogResult.OK) polesoubor.text = oknootevřenísouboru.filename; private void tlačítkovypiš_click(object sender, EventArgs e) // Které datum se hledá? DateTime dnes = DateTime.Today; DateTime hledanédatum; if (knoflíkdnes.checked) hledanédatum = dnes; else if (knoflíkzítra.checked) hledanédatum = dnes.adddays(1); else int letošnírok = dnes.year; hledanédatum = Convert.ToDateTime(poleDatum.Text + letošnírok.tostring()); // Otevření souboru a přeskočení řádku se záhlavím string jménosouboru = polesoubor.text; StreamReader soubor = new StreamReader(jménoSouboru, Encoding.Default); soubor.readline(); // Čtení položku za položkou a zpracování string řádek, zpráva = null; while ((řádek = soubor.readline())!= null) // Řádek se rozdělí na hodnoty string[] hodnoty = řádek.split(';'); // Separování jednotlivých hodnot string číslozákazníka = hodnoty[0]; string příjmení = hodnoty[1]; string jméno = hodnoty[2]; string datumnarozenítextem = hodnoty[3]; DateTime datumnarození = Convert.ToDateTime(datumNarozeníTextem); // Má narozeniny? if (datumnarození.day == hledanédatum.day && datumnarození.month == hledanédatum.month) zpráva += jméno + " " + příjmení + " (č. " + číslozákazníka + ")" + Environment.NewLine; // Zavření souboru, zobrazení zprávy soubor.close(); if (zpráva == null) zpráva = "V uvedený den nemá narozeniny žádný zákazník"; polezobrazení.text = zpráva;

Editace dat v tabulce v kategorii Data použijeme DataGridView vlastnost Dock dáme na Fill vyplní zbytek okna

definice sloupců se provádí ve vlastnosti Columns

Definice barev v okně editace sloupců vlastnost DefaultCellStyle tam BackColor, ForeColor, SelectionBackColor, SelectionForeColor RowsDefaultCellStyle určuje nastavení barev podle řádků rozlišení na liché a sudé zajistí AlternatingRowsDefaultCellStyle

Vlastnosti ovlivňující, co smí uživatel AllowUserToAddRows uživatel smí přidávat řádky AllowUserToDeleteRows smí mazat AllowUserToOrderColumns smí měnit tažením pořadí sloupců AllowUserToResizeColumns smí měnit velikost sloupců AllowUserToResizeRows smí měnit výšku řádků

Přístup k datům v tabulce vlastnost Rows seznam řádků, pomocí indexu dostupný každý řádek každý řádek je instance DataGridViewRow vlastnost Cells seznam buněk řádku, seznam lze indexovat číslem sloupce nebo názvem sloupce v uvozovkách buňky jsou instance DataGridViewCell zajímavá hlavně vlastnost Value většinou volaná metodou ToString

ulož řetězec ahoj do druhé buňky prvního řádku DataGridViewRow prvnířádek = tabulka.rows[0]; prvnířádek.cells[1].value = ahoj ; z prvního řádku zobraz buňku ze sloupce sloupecbydliště DataGridViewCell buňka = tabulka.rows[0].cells[ sloupecbydliště ]; string hodnota = buňka.value.tostring(); MessageBox.Show(hodnota);

lze přistupovat i pomocí dvojice indexů řádek, sloupec pozn. použito automatické zjištění typu proměnné pomocí var když zapomenu přesný název typu buňky // 2. buňka, 1. řádku tabulka[0, 1].Value = ahoj ; var buňka = tabulka[ sloupecbydliště, 0]; string hodnota = buňka.value.tostring(); MessageBox.Show(hodnota);

Plnění tabulky metoda Add na seznam řádků Rows více variant např. jedna přebírá pole hodnot string[] hodnoty = new string[] Franta, Vomáčka, Neratovice ; tabulka.rows.add(hodnoty);

using System; using System.IO; using System.Text; using System.Windows.Forms; namespace Editace_tabulkových_dat public partial class oknoprogramu : Form string jménosouboru = null; public oknoprogramu() InitializeComponent(); private void nabídkasouborotevřít_click(object sender, EventArgs e) // Zjisti jméno souboru if (oknootevřenísouboru.showdialog()!= DialogResult.OK) return; jménosouboru = oknootevřenísouboru.filename; // Načítej soubor... StreamReader soubor = new StreamReader(jménoSouboru, Encoding.Default); // Hlavičku přečteme, ale v tomto programu nezpracováváme string hlavička = soubor.readline(); // Vymaž stávající hodnoty z tabulky tabulka.rows.clear(); // Postupně načítej řádky a přidávej do tabulky string řádek; while ((řádek = soubor.readline())!= null) string[] hodnoty = řádek.split(';'); tabulka.rows.add(hodnoty); // Zavři soubor soubor.close(); private void nabídkasouboruložit_click(object sender, EventArgs e) if (sender == nabídkasouboruložitjako jménosouboru == null) // Zjisti jméno souboru if (oknouloženísouboru.showdialog()!= DialogResult.OK) return; jménosouboru = oknouloženísouboru.filename; // Zapisuj soubor... StreamWriter soubor = new StreamWriter(jménoSouboru, false, Encoding.Default); // Zapiš hlavičkový řádek string hlavička = "Příjmení;Jméno;Místo bydliště"; soubor.writeline(hlavička); // Zapiš jednotlivé řádky tabulky int početřádků = tabulka.rows.count; int početsloupců = tabulka.columns.count; for (int číslořádku = 0; číslořádku < početřádků; číslořádku++) string řádek = null; for (int číslosloupce = 0; číslosloupce < početsloupců; číslosloupce++) řádek += tabulka[číslosloupce, číslořádku].value.tostring(); if (číslosloupce < početsloupců - 1) řádek += ";"; soubor.writeline(řádek); // Zavři soubor soubor.close(); private void nabídkasouborkonec_click(object sender, EventArgs e) Close(); private void nabídkazákazníknový_click(object sender, EventArgs e) string[] prázdnéhodnoty = new string[3]"", "", ""; tabulka.rows.add(prázdnéhodnoty); private void nabídkazákazníkodstranit_click(object sender, EventArgs e) var aktivníbuňka = tabulka.currentcell; if (aktivníbuňka!= null) int číslořádku = aktivníbuňka.rowindex; tabulka.rows.removeat(číslořádku);

Př. program, který rozloží větu na jednotlivá slova. Interpunkci pro jednoduchost neřešte, tj. použijeme Split na rozdělení dle mezer.

Př. program, který vypíše všechna data letošního roku. Tip: Vyrobte si datum 1. ledna letošního roku (DateTime datum = new DateTime(letošníRok, 1, 1);) a přidávejte dny (AddDays), dokud se nezmění rok. K zobrazení použijte ToLongDateString().

Př. program, který načte z CSV souboru data ve formátu příjmení; jméno; známka z M, známka z ČJ, známka z PRG a uloží do jiného CSV souboru data ve formátu příjmení; jméno; průměrný prospěch

Př. program, který sečte myší označené buňky. Tabulka je vyplněna náhodně. Tip: Seznam vybraných buněk se získá dotazem na hodnotu vlastnosti SelectedCells tabulky.

Kalendář prvek DateTimePicker hlavní vlastnost Value typu DateTime vyzkoušejte

Bublinová nápověda prvek ToolTip dáme do okna potom u dalších prvků nastavujeme vlastnost Tooltip na XXX na požadovanou hodnotu lze měnit barvy, ikonu