Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

4. diel - Uloženie objektov do CSV vo VB.NET

V minulom dieli seriálu tutoriálov o VB.NET, Práca s textovými súbormi vo VB.NET , sme si ukázali zápis do textových súborov aj ich čítanie.

Aplikácia bola jednoduchá a skôr učebnicová. Urobme si teraz naozajstnú databázu užívateľov pomocou textových súborov. Ukladať budeme samozrejme objekty, čiže si program ľahko prerobíte na databázu upomienok v diári, databáze najlepších výsledkov v hre, databázu zvierat v chovnej stanici a tak podobne.

Formát CSV

Nebudeme vymýšľať žiadny zložitý spôsob ukladania dát do textových súborov, pretože už jeden osvedčený a štandardné existuje. Volá sa CSV (ako Comma Separated Values), teda hodnoty oddelené čiarkou, prípadne bodkočiarkou. O CSV sme sa zmienili v článku o metódach Split a Join na reťazci, dnes je teda budeme potrebovať.

Poďme sa zhodnúť na tom, ako bude trieda užívateľa vyzerať. Následne si ukážeme, ako jej inštancie do CSV uložíme. Založte si nový projekt typu Windows Forms Application. Pridáme si k nemu triedu Uzivatel. U užívateľa budeme evidovať jeho meno, vek a dátum, kedy bol registrovaný. Konštruktor bude inštanciu tvoriť na základe týchto 3 údajov. Preťažíme si metódu toString tak, aby vypísala meno používateľa. Trieda teda bude vyzerať takto:

Public Class Uzivatel
    Private _jmeno As String
    Public Property Jmeno As String
        Get
            Return _jmeno
        End Get
        Private Set(ByVal value As String)
            _jmeno = value
        End Set
    End Property

    Private _vek As Integer
    Public Property Vek As Integer
        Get
            Return _vek
        End Get
        Private Set(ByVal value As Integer)
            _vek = value
        End Set
    End Property

    Private _registrovan As DateTime
    Public Property Registrovan() As DateTime
        Get
            Return _registrovan
        End Get
        Private Set(ByVal value As DateTime)
            _registrovan = value
        End Set
    End Property

    Public Sub New(jmeno As String, vek As Integer, registrovan As DateTime)
        Me.Jmeno = jmeno
        Me.Vek = vek
        Me.Registrovan = registrovan
    End Sub

    Public Overrides Function ToString() As String
        Return Jmeno
    End Function
End Class

Poďme si ukázať, ako budú používatelia vo formáte CSV vyzerať. Každý riadok bude reprezentovať jedného používateľa. Vlastnosti užívateľa budú oddelené bodkočiarkami. Užívateľ Pavel Slavík, ktorému je 22 rokov a zaregistroval sa 21.3.2000 by vyzeral takto:

Pavel Slavík;22;21.3.2000

Na prvý pohľad vidíme, že je súbor relatívne jednoducho čitateľný aj keď Nezainteresovaný sa môže len domnievať, čo je číslo 22 a na čo sa viaže ono dátum.

V súbore môže byť samozrejme viac užívateľov, teda viac riadkov.

Triedu užívateľa máme, pretože však ctíme objektový návrh, vytvoríme si aj triedu pre našu databázu. Tá bude obsahovať kolekciu užívateľov, tvorenou inštancií triedy List. Kolekcia bude privátne a pridávanie užívateľov (prípadne ich mazanie, vyhľadávanie a podobne) bude realizované verejným spôsobom. Databáza bude konečne obsahovať metódy na načítanie CSV súboru a tiež na uloženie obsahu databázy do súboru. Meno súboru bude ďalší privátnej premenná databázy. Pridajme si teda k projektu ďalšiu triedu Databaze a nápis jej kostru:

Public Class Databaze
    Private uzivatele As List(Of Uzivatel) = New List(Of Uzivatel)
    Private soubor As String

    Public Sub New(soubor As String)

    End Sub

    Public Sub PridejUzivatele(jmeno As String, vek As Integer, registrovan As DateTime)

    End Sub

    Public Function VratVsechny() As List(Of Uzivatel)

    End Function

    Public Sub Uloz()

    End Sub
End Class

VS nám End Function u VratVsechny podčiarkne zelene (pretože nevracia hodnotu), ale toho si zatiaľ nebudeme všímať. Poďme postupne naimplementovať jednotlivé metódy. Začnime konstruktoru.

V konstruktoru vytvoríme inštanciu Listu a uložíme si cestu na databázový súboru:

Public Sub New(soubor As String)
    uzivatele = New List(Of Uzivatel)
    Me.soubor = soubor
End Sub

To bolo veľmi jednoduché a aj na ďalšie metóde nie je čo vymýšľať:

Public Sub PridejUzivatele(jmeno As String, vek As Integer, registrovan As DateTime)
    Dim u As Uzivatel = New Uzivatel(jmeno, vek, registrovan)
    uzivatele.Add(u)
End Sub

Metóda VratVsechny () nám vráti všetkých užívateľov. Podobne môžeme v budúcnosti urobiť metódy pre vyhľadávanie len niektorých užívateľov. Užívateľa vrátime vo forme poľa.

Public Function VratVsechny() As Uzivatel()
    Return uzivatele.ToArray()
End Function

Uloženie užívateľov do CSV

Teraz sa konečne dostávame k práci s CSV súborom. Začneme using blokom s inštanciou StreamWriter. Vnútri proiterujeme náš List užívateľov a pre každého užívateľa vytvoríme pole String z jeho vlastností. Nestringové vlastnosti musíme na String explicitne previesť. Pole potom spojíme na dlhý String, v ktorom budú položky oddelené bodkočiarkami. Spojenie za nás vykoná metóda Join. Tá sa na rozdiel od metódy Split volá priamo na triede String a ako parameter (spojovací text) berie tiež String, nie Char. Pusťme sa do toho:

Public Sub Uloz()
    'Otevření souboru pro zápis
    Using sw As New StreamWriter(soubor)
        'projetí uživatelů
        For Each u As Uzivatel In uzivatele
            'vytvoření pole hodnot
            Dim hodnoty() As String = {u.Jmeno, u.Vek.ToString(), u.Registrovan.ToShortDateString()}
            'vytvoření řádku
            Dim radek As String = String.Join(";", hodnoty)
            'zápis řádku
            sw.WriteLine(radek)
        Next
        'vyprázdnění bufferu
        sw.Flush()
    End Using
End Sub

Keby sme u dátumu registrácie ponechali len toString (), uložil by sa nám aj čas, čo tu nie je príhodné. Poďme si všetko vyskúšať, prejdime k súboru Formuláre (Form1.vb, prípadne v Designeri F7). Zavedieme privátne premennú databazy, do ktorej v konstruktoru formulára vytvoríme inštanciu našej databázy:

Private databaze As Databaze
Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    databaze = New Databaze("uzivatele.csv")

End Sub

Na formulár pridajme nové tlačidlo, pomenujte ho tlacitkoUlozit a Text mu nastavme na Uložiť.

Formulár pre uloženie do CSV vo Visual Basic .NET - Súbory a sieť vo Visual Basic .NET

V jeho Click Handler (vytvorí sa po dvojkliku na tlačidlo) pridáme do databázy 2 používateľa. Bude to teraz pre vyskúšanie, neskôr bude aplikácia vyzerať lepšie. Ďalej celú databázu uložíme do súboru.

Private Sub tlacitkoUlozit_Click(sender As Object, e As EventArgs) Handles tlacitkoUlozit.Click
    databaze.PridejUzivatele("Pavel Slavík", 22, New DateTime(2000, 3, 21))
    databaze.PridejUzivatele("Jan Novák", 31, New DateTime(2012, 10, 30))
    databaze.Uloz()
End Sub

Aplikáciu spustíme a klikneme na tlačidlo. Teraz otvoríme (napr. V notepad) súbor uzivatele.csv (v priečinku s projektom / bin / debug) a vidíme, že má nasledujúci obsah:

Pavel Slavík;22;21.3.2000
Jan Novák;31;30.10.2012

Všetko teda funguje, ako má :) .

Načítanie užívateľov a dokončenie aplikácie si necháme na nabudúce, Uloženie objektov do CSV vo VB.NET časť 2 .


 

Predchádzajúci článok
Práca s textovými súbormi vo VB.NET
Všetky články v sekcii
Súbory a sieť vo Visual Basic .NET
Preskočiť článok
(neodporúčame)
Uloženie objektov do CSV vo VB.NET časť 2
Článok pre vás napísal Michal Žůrek - misaz
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity