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

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

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

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

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

vstup a výstupv jazyce C

Vstup a výstup datové proudy v C

vstup a výstupy jazyce C

Základy programování (IZP)

Standardní vstup a výstup

VISUAL BASIC. Práce se soubory

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

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

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

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

Úvod do programování. Lekce 1

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

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

POČÍTAČE A PROGRAMOVÁNÍ

Základy programování (IZP)

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

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

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Knihovny funkcí. Chyby v CRT. IUJCE Přednáška č. 9

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

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

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

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

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

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

- tzv. standardní vstupní a výstupní proud (input / output stream)

Sada 1 - Základy programování

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

Ošetřování chyb v programech

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

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

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

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

vstup a výstupy jazyce C

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

Základy programování (IZP)

Operační systémy. Cvičení 4: Programování v C pod Unixem

Jazyk C++, některá rozšíření oproti C

PB071 Programování v jazyce C

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

Základy programování (IZP)

Struktury a dynamická paměť

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

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

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

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

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

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7

Úvod do programování 8. hodina

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

Úvod do programovacích jazyků (Java)

Dynamická vícerozměrná pole. Základy programování 2 Tomáš Kühr

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

Základy PERLu snadno a rychle

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání

SEMESTRÁLNÍ PROJEKT Y38PRO

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

přetížení operátorů (o)

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

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

ALGORITMY A PROGRAMOVÁNÍ V JAZYCE C/C++

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Standardní algoritmy vyhledávací.

Algoritmizace a programování

Operační systémy. Cvičení 3: Programování v C pod Unixem

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

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

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

Základy programování (IZP)

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

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

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

Systém souborů (file system, FS)

Projektč.3dopředmětuIZP. Maticové operace

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

Soubor jako posloupnost bytů

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Práce se soubory v Javě

Stromy, soubory. BI-PA1 Programování a Algoritmizace 1. Ladislav Vagner, Josef Vogel

NPRG030 Programování I, 2016/17 1 / :58:13

Testování prvočíselnosti

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Webový server lapache

Programovací jazyk Pascal

Transkript:

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

Soubory z pohledu C Soubor zjednodušeně chápeme jako posloupnost bytů uložených někde na disku Datový proud (anglicky stream) Ještě obecnější přístup (nejen) k souborům Sjednocuje pohled na soubory a vstupní/výstupní zařízení Přístup k disku je pomalejší než k paměti buffering / bufferování / bufrování Buffering vstupu Do paměti (buffer) se načte blok dat určité a předem dané velikosti Jednotlivé hodnoty se čtou z této paměti Pokud je třeba, načte se do paměti další blok dat Buffering výstupu Data se zapisují do paměti Pokud je paměť plná, zapíše se její obsah na disk

Začátek práce se souborem Všechny funkce, proměnné a datové typy uvedené v této prezentaci jsou definovány v stdio.h (pokud není vysloveně uvedeno jinak) Se soubory pracujeme prostřednictvím ukazatelů na strukturovaný typ FILE FILE *identifikator; Nejprve je potřeba soubor otevřít pomocí funkce fopen FILE *fopen(char *filename, char *mode); První parametr funkce určuje jméno souboru, případně i cestu k souboru Druhý parametr určuje, jak se bude se souborem pracovat (viz další snímek) Funkce vrací ukazatel na soubor nebo NULL, pokud při otevírání dojde k chybě Příklad: FILE *mujsoubor; mujsoubor = fopen("./data/info.txt", "r+t"); if (!mujsoubor) exit(1);

Způsoby otevření souboru Jsou určeny hodnotou řetězce mode Určují další možnosti práce s otevřeným souborem Módy otevření: "r" otevření pouze pro čtení, soubor musí existovat "w" otevření pouze pro zápis, existující soubor bude přepsán, neexistující vytvořen "a" rozšiřování existujícího souboru, neexistující soubor bude vytvořen "r+", "w+", "a+" - rozšířené módy, umožňují jak čtení, tak zápis Za výše uvedenými řetězci může následovat: b pro označení binárních souborů t (nebo nic) pro označení textových souborů

Čtení ze souboru Soubor musí být otevřen v módu podporujícím čtení Čtení jednoho znaku int getc(file *f); Čtení řádku char *fgets(char *str, int length, FILE *f); Do str se ze souboru f načte nejvýše jeden řádek (včetně '\n') Maximálně se ale přečte lenght-1 znaků Formátované čtení int fscanf(file *f, const char *format,...); Po každém čtení se automaticky posouvá pozice v souboru Pokud nelze z datového proudu číst, vrací funkce EOF nebo NULL Chybová návratová hodnota se vrací i v případě čtení na konci souboru

Zápis do souboru Soubor musí být otevřen v módu podporujícím zápis Zápis znaku int putc(int c, FILE *f); Zápis řetězce int fputs(const char *s, FILE *f); Formátovaný zápis int fprintf(file *f, const char *format,...); Každý následující zápis se provede automaticky za dříve zapsaná data Pokud dojde k chybě při zápisu, vrací výše uvedené funkce hodnotu EOF

Ukončení práce se souborem Počet současně otevřených souborů je omezen Pokud při běhu programu dojde k závažné chybě (např. výpadek el. proudu), data zapsaná pouze do bufferu budou ztracena Vyprázdnění bufferu int fflush(file *f); V případě vstupu - zahození obsahu bufferu a načtení nového bloku Toto se používá nejčastěji ve spojení se standardním vstupem (viz dále) V případě výstupu - vynucení zápisu obsahu bufferu na disk Zavření proudu (včetně vyprázdnění bufferu) int fclose(file *f); V případě neúspěchu vracejí obě funkce hodnotu EOF

Standardní datové proudy Načítání z klávesnice a výpis na obrazovku je také realizováno datovými proudy S těmito standardními proudy lze pracovat podobně jako se souborovými proudy V stdio.h jsou definovány proměnné FILE *stdin; FILE *stdout; FILE *stderr; Tyto datové proudy jsou otevřeny již při spuštění programu stdin pro čtení (implicitně z klávesnice) stdout pro zápis (běžný, implicitně na obrazovku) stderr pro zápis (chybový, implicitně na obrazovku) Implicitní nastavení proudů lze změnit za běhu programu I při jeho spouštění z příkazové řádky program.exe < vstup.txt > vystup.txt

Vrácení 1 znaku do bufferu Může se občas hodit... V reálných aplikacích se někdy dozvíme o tom, že máme přestat číst až ve chvíli, kdy jsme přečetli jeden znak navíc Funkce pro virtuální vrácení znaku do bufferu int ungetc(int c, FILE *f); Při úspěšném provedení je návratovou hodnotou vrácený znak c, jinak EOF Doporučuje se nevolat vícekrát po sobě Lze vrátit i jiný znak než ten, který se dříve přečetl

Cvičení Součty řádků Napište v jazyku C funkci int soucty(const char *vstup, const char *vystup), která čte ze vstupního souboru desetinná čísla, počítá součty na jednotlivých řádcích a zapisuje je do výstupního souboru. Na konec výstupního souboru pak navíc vloží sumu všech čísel ve vstupním souboru. Příklad vstupního souboru: 7.134 0.5198 2.436 0.9626 1.27 1.324 0.9639 1.538 0.4995 1.503 4.95 0.3466 0.454 2.367 0.6877 9.057 0.1807 1.112 4.287 8.675 1.511 0.4296 0.2331 Výstup příkladu: 11.0524 5.5954 6.7996 13.8584 15.1357 52.4415