Soubory s náhodným přístupem Vytváření adresáře
Adresář Úkolem je vytvořit jednoduchý adresář, ve kterém zapisujete jméno a adresu Údaje budou uloženy do textového souboru, pro který zvolíte příponu.adr
Záznam 1 Údaje o každé osobě v adresáři ukládáme jako záznam (record) Tyto záznamy se ukládají do textového souboru otevíraného v módu random Pro vytvoření záznamu musíme nejdříve vytvořit jako uživatelský typ Tento typ nelze vytvořit ve formuláři musíte si otevřít modul
Záznam 2 Záznam může vypadat takto: Používá se typ string*X – řetězec pevné délky Type PokusZaznamType Jmeno As String * 30 Prijmeni As String * 30 Ulice As String * 30 Mesto As String * 30 PSC As String * 5 End Type
Záznam 3 Po vytvoření typu se hned může vytvořit záznam, který bude používán v programu Takto vytvořený záznam, jehož délku určíme pomocí funkce Len, použijeme pro záznam adresy Public PokusZaznam As PokusZaznamType
Potřebné proměnné Pro práci s programem potřebujeme min. 3 proměnné – uložíme je do modulu Určují celkový počet záznamů, ukazují na právě zpracovávaný záznam a oznamují, že byl zpracovávaný záznam změněn Public PocetZaznamu As Integer Public Aktualni As Integer Public Zmenen As Boolean
Start programu Při startu programu nastavujeme pouze to, že soubory, ve kterých ukládáme adresář, mají koncovku.adr – jde o prostý textový soubor Mimo to si připravíme proměnnou, pomocí které budeme sledovat otevřený soubor Private Sub Form_Load() FileNum = FreeFile File1.Pattern = "*.adr" End Sub
Otevření adresáře 1 Po klepnutí na název souboru se vykonají následující funkce: Do proměnné FileName se načte celá cesta k vybranému souboru Do proměnné FileName se načte celá cesta k vybranému souboru Do proměnné RecordLen se vloží délka záznamu pomocí funkce Len Do proměnné RecordLen se vloží délka záznamu pomocí funkce Len FileName = Dir1.Path + "\" + File1.List(File1.ListIndex) RecordLen = Len(PokusZaznam)
Otevření adresáře 2 Otevře se vybraný soubor Otevře se vybraný soubor Vypočte se počet záznamů v souboru Vypočte se počet záznamů v souboru Proměnní Aktualni se nastaví na 1 Proměnní Aktualni se nastaví na 1 Open FileName For Random As #FileNum Len = RecordLen PocetZaznamu = LOF(FileNum) \ RecordLen Aktualni = 1
Otevření adresáře 3 Zobrazí se 1. záznam v adresáři pomocí procedury ShowRecord Zobrazí se 1. záznam v adresáři pomocí procedury ShowRecord Nastaví se ukazovátko na 1. položku v adresáři (Jméno) Nastaví se ukazovátko na 1. položku v adresáři (Jméno) Get #FileNum, Aktualni, PokusZaznam Text1(0).Text = PokusZaznam.Jmeno Text1(1).Text = PokusZaznam.Prijmeni Text1(2).Text = PokusZaznam.Ulice Text1(3).Text = PokusZaznam.Mesto Text1(4).Text = PokusZaznam.PSC Zmenen = False End Sub Text1(0).SetFocus
Změna záznamu Záznam můžeme upravit – přepsat, doplnit Při každé změně se nastaví hodnota proměnné Zmenen na True Poslouží k tomu procedura připojená k události Change Private Sub Text1_Change(Index As Integer) Zmenen = True End Sub
Posun mezi záznamy Při posunu mezi záznamy měníme hodnotu proměnné Aktualni – kontrolujeme, zda nejsme mimo rozsah (1 – (1 – PocetZaznamu) Nejprve ale zkontrolujeme, zda došlo ke změně v předchozím záznamu – zda je proměnná Zmenen nastavena na True Pokud došlo ke změně, voláme proceduru UpravZaznam
Procedura UpravZaznam Procedury ShowRecord a UpravZaznam jsou uloženy jako Public v části General Public Sub UpravZaznam() PokusZaznam.Jmeno = Text1(0).Text PokusZaznam.Prijmeni = Text1(1).Text PokusZaznam.Ulice = Text1(2).Text PokusZaznam.Mesto = Text1(3).Text PokusZaznam.PSC = Text1(4).Text Put #FileNum, Aktualni, PokusZaznam Zmenen = False End Sub
Uzavření adresáře Po kliknutí na tlačítko Konec se Byl-li záznam změněn, uložíme jej Byl-li záznam změněn, uložíme jej Uzavřeme soubor adresáře Uzavřeme soubor adresáře Ukončíme program Ukončíme program Private Sub Konec_Click() If Zmenen Then UpravZaznam Close FileNum End End Sub
Přidání záznamu 1 Při přidávání záznamu uložíme – pokud byl změněn – otevřený záznam, zvýšíme počet záznamů a upravíme Aktualni If Zmenen Then UpravZaznam Text1(0).Text = "" Text1(1).Text = "" Text1(2).Text = "" Text1(3).Text = "" Text1(4).Text = "" PocetZaznamu = PocetZaznamu + 1 Aktualni = PocetZaznamu Zmenen = False Text1(0).SetFocus
Přidání záznamu 2 Do otevřeného prázdného záznamu můžeme zapisovat údaje nové položky adresáře Jestliže přejdeme na jinou položku nebo adresář zavřeme, údaje se zapíší na konec souboru adresáře
Zrušení záznamu 1 Při rušení záznamu musíme vymazat vybraný záznam a zbylé záznamy, které mají větší pořadové číslo než rušený, posunout v souboru o 1 níže Nejprve nadefinujeme potřebné proměnné: Dim Ind As Integer Dim TempVar As PokusZaznamType
Zrušení záznamu 2 Ověříme si, že uživatel opravdu chce položku vymazat V cyklu přesuneme zbylé záznamy Zda = MsgBox("Opravdu chcete zrušit tento záznam?", 65) If Zda = vbOK Then For Ind = Aktualni To PocetZaznamu Get #FileNum, Ind + 1, TempVar Put #FileNum, Ind, TempVar Next Ind
Zrušení záznamu 3 Nakonec upravíme počet záznamů, zkontrolujeme, že ukazovátko Aktualni je v rozsahu a zobrazíme záznam PocetZaznamu = PocetZaznamu - 1 If Aktualni > PocetZaznamu Then Aktualni = PocetZaznamu End If ShowRecord
Vytvoření nového adresáře 1 K programu připojíme druhý formulář (dle obrázku) Otvíráme jej po kliknutí na tlačítko pomocí metody Show Private Sub Command1_Click() Form2.Show End Sub
Vytvoření nového adresáře 2 Po vložení názvu adresáře začneme s vytvářením uzavřením starého a vytvořením adresy nového adresáře S novou adresou otevřeme adresář – soubor se tím vytvoří Private Sub Command1_Click() If Zmenen Then Form1.UpravZaznam Close (FileNum) FileNameNew = Form1.Dir1.Path+ "\" + NewAddress.Text + ".adr" RecordLen = Len(PokusZaznam) Open FileNameNew For Random As #FileNum Len = RecordLen
Vytvoření nového adresáře 3 Nastavíme proměnné – počet záznamů a ukazovátko Uzavřeme formulář, zobrazíme prázdný záznam a obnovíme záznam v adresáři PocetZaznamu = 1 Aktualni = 1 Form2.Hide Form1.ShowRecord Form1.File1.Refresh
Třídění záznamů Velmi užitečnou možností u každého adresáře je vyhledávání podle abecedy Máte-li v adresáři 10 jmen, tak je snadno projdete všechny Ovšem při, řekněme 12O adresách, …
Porovnávání řetězců Většina programovacích jazyků vznikla v prostředí, kde je domovským jazykem angličtina Umějí proto bez problémů rozhodnout, který řetězec je větší, právě v angličtině If Trim(arg1) < Trim(arg2) Then ‘ arg2 je větší než arg1 Else ‘ naopak End If
Porovnávání řetězců Pro češtinu si musíme porovnávací funkci napsat sami
Porovnávání řetězců Základem je komparační řetězec, ve kterém jsou seřazeny všechny znaky abecedy Jednotlivá písmena převádíme pomocí funkce InStr na pořadí písmena v komparačním řetězci Tato čísla pořadí porovnáme a podle toho rozhodneme Dim CompaString As String CompaString = "AÁBCČDĎEÉĚFGHIÍJKLMNOÓPQRŘSŠTŤUÚŮVWXYÝZŽ" a1 = InStr(CompaString, UCase(Mid(arg1, x, 1)))
Setřídění adres Nejprve si připravíme pole Adresar Do tohoto pole si z již dříve otevřeného souboru načteme celý adresář Type PokusZaznamType Jmeno As String * 30 Prijmeni As String * 30 Ulice As String * 30 Mesto As String * 30 PSC As String * 5 End Type Public PokusZaznam As PokusZaznamType Dim Adresar() As PokusZaznamType For I = 1 To PocetZaznamu Get #FileNum, I, Adresar(I) Next
Setřídění adres Pole Adresar setřídíme známým postupem A nakonec všechno zapíšeme zpátky do souboru Do Kontrol = False For I = 1 To PocetZaznamu - 1 If Compare(Adresar(I).Prijmeni, Adresar(I + 1).Prijmeni) Then Temp = Adresar(I + 1) Adresar(I + 1) = Adresar(I) Adresar(I) = Temp Kontrol = True End If Next Loop While Kontrol For I = 1 To PocetZaznamu Put #FileNum, I, Adresar(I) Next
Další možnosti Adresář můžeme doplnit o možnost vkládání poznámek Adresář můžeme spojit s adresářem a zkombinovat vkládání poznámek k osobám a datům A dále co vás napadne…