VISUAL BASIC Práce se soubory
Práce se soubory 1/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
Typy souborů Podle obsahu Podle přístupu 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
Příkaz OPEN Open název_souboru For režim As# číslo Název_souboru Režim Včetně cesty Režim Způsob přístupu k souboru As# Přiděluje souboru jedinečné manipulační číslo, pomocí kterého se k souboru nadále přistupuje Rozsah čísel je 1..511
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
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
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
Příklad práce se souborem 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 Č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 ‘ 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ě Ú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)
Příkaz LINE INPUT 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 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 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 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.
Práce s adresáři ChDir cesta - nastavení pracovního adresáře Dim cesta As String ...... cesta = "D:\USER\MOJE" ChDir cesta ChDrive disk - mění pracovní (aktuální) logickou jednotku MkDir cesta - vytváří nový adresář
Funkce EOF vrací logickou hodnotu dosaženo konce souboru EOF (číslo) End Of File vrací logickou hodnotu True - zda bylo False - zda nebylo dosaženo konce souboru
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 Input #1, znak ‘přečte znak ze souboru 1 Print znak ‘vypíše přečtený znak Loop Close #1
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