Práce s binárními 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

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

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

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

vstup a výstupy jazyce C

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

vstup a výstupv jazyce C

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

Vstup a výstup datové proudy v C

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

VISUAL BASIC. Práce se soubory

Úvod do programování. Lekce 1

Lineární spojový seznam (úvod do dynamických datových struktur)

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

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

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

Vícerozměrná pole. Úvod do programování 2 Tomáš Kühr

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

vstup a výstupy jazyce C

Programování v C++, 2. cvičení

Pointery II. Jan Hnilica Počítačové modelování 17

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

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

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.

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

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

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

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

Algoritmizace a programování

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

Standardní vstup a výstup

Práce s pamětí a předávání parametrů. Úvod do programování 1

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

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

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

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

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

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

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

Základy programování (IZP)

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

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

Př. další použití pointerů

Úvod do programování 8. hodina

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

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

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

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

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

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

Struktury a dynamická paměť

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

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

Základy programování (IZP)

Připravil: David Procházka. Vertex Buffer Objects

Základy programování (IZP)

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Práce s řetězci. IUJCE Přednáška č. 10. string.h. vrací: délku řetězce str (bez '\0')

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

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

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Práce se soubory v Javě

Programování v C++ 3, 3. cvičení

PROGRAMOVÁNÍ V C++ CVIČENÍ

Odvozené a strukturované typy dat

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

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

Princip funkce počítače

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Základní datové struktury

Popis funkcí exportovaných z knihovny nddbe.dll

Přerušovací systém s prioritním řetězem

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

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

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

Programování II. Návrh programu I 2018/19

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

Textové soubory. alg9 1

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

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Základy programování (IZP)

Algoritmizace a programování

Základy programování (IZP)

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

2 Datové typy v jazyce C

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

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

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

Spojová implementace lineárních datových struktur

typová konverze typová inference

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

O datových typech a jejich kontrole

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

LZ77 KNIHOVNA PRO KOMPRESI A DEKOMPRESI DAT POMOCÍ ALGORITMU LZ77. Příručka uživatele a programátora

Transkript:

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

Binární soubory Mohou mít libovolnou strukturu Data jsou uložena ve stejné podobě jako v paměti za běhu programu Výhody: Pro uložení je potřeba méně místa než u textových souborů Nejsou potřeba konverze čísel na textové řetězce a naopak Zápis i čtení dat bývají díky tomu rychlejší Nevýhody Nelze je rozumně vytvářet, číst, editovat v textových editorech Binární soubory nejsou obecně přenositelné Po otevření binárního souboru se implicitně neprovádí žádné další akce (např. transformace všech zakódování konce řádků na \n )

Čtení bloků dat daného typu Čtení bloku dat lze provést voláním funkce fread ze stdio.h size_t fread(void *kam, size_t rozmer, size_t pocet, FILE *f) f je datový proud, ze kterého se čte rozmer je velikost jedné položky pocet udává počet položek kam je adresa paměti, do které se data ukládají Vrací počet úspěšně přečtených položek Příklad použití: #define VELIKOST_BLOKU 10... int data[velikost_bloku]; FILE *fr = fopen("a.dat", "rb");... fread(data, sizeof(int), VELIKOST_BLOKU, fr);

Zápis bloku dat daného typu Zápis bloku dat lze provést voláním funkce fwrite ze stdio.h size_t fwrite(void *zdroj, size_t rozmer, size_t pocet, FILE *f) f je datový proud, do kterého zapisujeme rozmer je velikost jedné položky pocet udává počet položek zdroj je adresa dat, která chceme zapisovat Vrací počet úspěšně zapsaných položek Příklad použití: #define VELIKOST_BLOKU 10... int data[velikost_bloku]; FILE *fw = fopen("out.dat", "wb");... fwrite(data, sizeof(int), VELIKOST_BLOKU,fw);

Posunutí se v souboru Běžně se data postupně čtou/zapisují od začátku souboru Občas ale potřebujeme k datům přistupovat jinak než sekvenčně Hodí se tedy funkce pro posouvání se v souboru, definována v stdio.h int fseek(file *f, long posun, int odkud) posun udává, o kolik bytů se posouváme Záporný posun odpovídá směru zpět (k začátku souboru) Kladný posun pak směru dopředu (ke konci souboru) odkud udává výchozí pozici pro výpočet posunu Pozice může být dána jednou z následujících konstant: SEEK_SET (od začátku souboru) SEEK_CUR (od aktuální pozice) SEEK_END (od konce souboru) Funkce vrací nulu v případě úspěchu, jinak nenulovou hodnotu

Zjištění aktuální pozice v souboru Spolu s funkcí fseek se často používá i funkce pro zjištění aktuální pozice long ftell(file *f) Vrací aktuální posunutí od začátku souboru f v bytech Příklad použití: /* navrat na puvodni misto*/ akt_pos = ftell(f); fseek(f, 0L, SEEK_SET); if (hledej(f, "ahoj") == NULL) fseek(f, akt_pos, SEEK_SET); Vstupní operace nesmí přímo následovat po výstupní operaci nebo naopak bez předchozího volání fseek Občas se nic neděje, občas to působí špatně laditelné problémy V případě potřeby stačí fseek(f, 0L, SEEK_CUR);

Změny v nastavení bufferování Jako buffer můžeme proudu přiřadit po jeho otevření jakoukoli alokovanou paměť Lze k tomu použít funkci setbuf, která je deklarovaná v stdio.h void setbuf(file *f, char *buffer) Paměť buffer musí mít velikost minimálně BUFSIZ bytů Pokud má parametr buffer hodnotu NULL, dojde k vypnutí bufferování Existuje i funkce umožňující komplexnější nastavení bufferu (opět ze stdio.h) void setvbuf(file *f, char *buffer, int mode, size_t size) I zde je doporučené volat funkci ihned po otevření proudu mode umožňuje nastavit režim bufferování _IOFBF data se načítají do zaplnění bufferu _IOLBF do konce řádky nebo do zaplnění bufferu _IONBF vypnutí bufferování Parametr size umožňuje zadat velikost bufferu

Další užitečné funkce pro práci s proudy Přesměrování proudu za běhu programu lze provést pomocí FILE *freopen(const char *name, const char *mode, FILE *f) Otevře soubor name v režimu mode Přesměruje do nově otevřeného souboru proud f Používá se pro přesměrování standardních proudů do souborů Při úspěchu vrací ukazatel na proud, jinak NULL Přejmenování souboru int rename(const char *old_name, const char *new_name) V případě úspěchu vrací nulu, jinak nenulovou hodnotu Smazání souboru int remove(const char *name) V případě úspěchu vrací nulu, jinak nenulovou hodnotu

Dočasné soubory Jednoduché vytvoření dočasného souboru provedeme pomocí FILE *tmpfile() Otevře soubor v režimu "w+b" Po uzavření se tento automaticky smaže Vrací ukazatel na vytvořený soubor nebo NULL Pokud chceme dočasný soubor používat jiným způsobem, musíme si jej otevřít sami K tomu se hodí funkce pro generování jmen pomocných souborů char *tmpnam(char *str) Generuje unikátní název souboru v daném adresáři Funkce uloží vygenerovaný řetězec do str a vrací jej jako návratovou hodnotu Pokud má str hodnotu NULL, alokuje funkce i paměť pro výsledná řetězec

Cvičení Databáze osob Zadání úlohy včetně základního zdrojového souboru a příkladu použití naleznete na stránce: http://jazykc.inf.upol.cz/prace-s-binarnimi-soubory/databaze-osob.htm.