VISUAL BASIC Práce se soubory
Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit do souboru Výsledky výpočtu, nakreslený obrázek, napsaný dokument Umožňuje to rozsáhlá skupina nástrojů Nástroje pro manipulaci se soubory a adresáři Nástroje ke vstupu a výstupu dat (čtení ze souboru, zápis do souboru)
Práce se soubory 2/2 Práce se soubory má čtyři části 1. Určit soubor včetně cesty 2. Otevřít soubor pro přístup 3. Pracovat se souborem 4. Uzavřít soubor 3
Typy souborů 4 Podle obsahu Textové posloupnost znaků Binární posloupnost jedniček a nul Databázové záznamy s položkami Podle přístupu Sekvenční čtení resp. zápis dat tak, jak jdou za sebou, jako když tiskne tiskárna S libovolným způsobem přístupu čtení záznamů v rozsáhlých databázích
Otevření souboru Příkaz OPEN Otevírá soubor Po otevření je možno k otevřenému souboru přistupovat daným způsobem (číst z něj nebo do něj zapisovat) K otevřenému souboru potom přistupujeme pomocí manipulačního čísla 5
Příkaz OPEN Open název_souboru For režim As# číslo Název_souboru Včetně cesty Režim As# Způsob přístupu k souboru Přiděluje souboru jedinečné manipulační číslo, pomocí kterého se k souboru nadále přistupuje Rozsah čísel je 1..511 6
Režim otevření souboru Určení způsobu přístupu k souboru Input vstup ze souboru do programu Čtení dat ze souboru Output výstup z programu do souboru Zápis dat do souboru - přepisování Append - výstup z programu do souboru Zápis dat do souboru na jeho konec přidávání Random čtení i zápis Binary binární režim pro čtení i zápis 7
Příkaz CLOSE Close # číslo Close Uzavírá otevřený soubor s uvedeným manipulačním číslem Bez udání čísla uzavírá všechny otevřené soubory 8
Důsledky příkazu CLOSE Umožňuje použít soubor pro další použití manipulační číslo pro další přidělení Dokončuje poslední zápisy z vyrovnávací paměti vyprázdní buffer 9
Příklad práce se souborem 10 Dim nazevsoub As String Dim znak As string*1 Private Sub nazevsoub = c:\muj.txt Open nazevsoub For Input As# 1 práce se souborem Close #1 End Sub
Příkaz INPUT 11 Čte data z otevřeného souboru Input #číslo, seznam Číslo manipulační číslo z příkazu OPEN Seznam seznam jednoduchých proměnných (nikoliv polí) Jednotlivé identifikátory jsou odděleny čárkou Data ve čteném souboru musí svým charakterem a polohou odpovídat typu jednotlivých proměnných v seznamu
Příklad na INPUT 12 Vstupní soubor: data.txt Struktura souboru: abcdef 998 3.14159 Dim s As String Dim i As Integer Dim d As Double Sub Open data.txt For Input As #1 Input #1,s,i,d Close #1 Print s=, s Print i=, i Print d=, d End Sub
Řetězcové hodnoty - obecně 13 Úvodní mezery jsou ignorovány Řetězec začíná jiným písmenem než mezera končí posledním znakem před mezerou Pokud začíná uvozovkama, čtou se znaky až do dalších uvozovek, včetně mezer, čísel, čárek a dalších libovolných znaků Příklad vstupních dat: Ahoj světe 998 3.14 Pokud by Ahoj světe nebylo v uvozovkách, muselo by se číst do dvou proměnných
Číselné hodnoty - obecně Úvodní mezery jsou ignorovány Akceptují se znaky, které k číslu patří (znaménka + a -, desetinná tečka) Čtení končí prvním nečíselným znakem (mezera, alfabetický znak) 14
Příkaz LINE INPUT 15 Přečte ze souboru jeden řádek zakončený znakem s kódem 13 /Cariage Return). Znaky konce řádku - Chr(13) a Chr(10) - jsou z řetězce vypuštěny. Line Input #číslo, proměnná proměnná - místo uložení Čteny jsou všechny znaky v daném řádku (včetně mezer, čísel, uvozovek a jiných znaků) a uloženy do proměnné. Další příkaz přečte následující řádek.
Příkaz GET 16 Get #číslo, záznam, proměnná Obdobně jako Line Input přečte jeden řádek (záznam), ale lze specifikovat libovolný záznam (řádek v databázi). číslo - manipulační číslo otevřeného souboru záznam - pořadové číslo záznamu, který chceme přečíst
Příkaz PRINT Print #číslo, seznam 17 zapisuje data do otevřeného souboru oddělovače v seznamu ";" (středník) - znak se zapíše na další pozici "," (čárka) - znak se napíše do další zóny (jedna tisková zóna = 14 znaků) oddělovač použitý na konci seznamu způsobí, že další příkaz print bude zapisovat na stejný řádek (potlačení přechodu na další řádek)
Příkaz WRITE 18 Write #číslo, seznam Výrazy jsou v seznamu odděleny čárkou Každý nový příkaz WRITE píše na nový řádek Řetězcové hodnoty jsou ve výstupním souboru ohraničeny uvozovkami Jednotlivé hodnoty jsou ve výstupním souboru odděleny čárkou
Příkaz PUT Put #číslo, záznam, proměnná Obdoba příkazu GET pro výstup Příkazy GET a PUT jsou vhodné pro jednoduchou obsluhu databází, neboť dovolují manipulovat se záznamy v libovolném pořadí na rozdíl od sekvenčního přístupu. 19
Práce s adresáři ChDir cesta - nastavení pracovního adresáře Dim cesta As String... cesta = "D:\USER\MOJE" ChDir cesta 20 ChDrive disk - mění pracovní (aktuální) logickou jednotku MkDir cesta - vytváří nový adresář
Funkce EOF EOF (číslo) End Of File vrací logickou hodnotu True - zda bylo False - zda nebylo dosaženo konce souboru 21
Příklad na funkci EOF Z otevřeného souboru čte postupně znaky a vypisuje je na obrazovce Dim znak As string*1 Open "data.txt" For Input As #1 Do While Not EOF(1) smyčka do konce souboru 22 Input #1, znak přečte znak ze souboru 1 Print znak Loop Close #1 vypíše přečtený znak
Zadání úlohy 1. Vypsat na obrazovku jmenný kalendář 2. Vypsat dnešní datum a kdo má svátek 3. Vypsat svátky na dalších 7 dní Použijte soubor jmena.txt Najdete jej na serveru v složce tříd Překopírujte jej do C:\jmena.txt Hotový program bude uložen na serveru ve složce třída\vaše jméno\kalendar\vaše soubory 23