Nacitanie 3 externych *.txt   zodpovězená otázka

VB.NET

Potrebujem načítat 3 externé súbory (súbory *.txt obsahujú celé aj desatiné čísla, čísiel môže byť v jednom súbore viac ako 1000), a aby sa tieto čísla s časom menili (napr. po 1 minúte).

niečo som spravil s pomocou stránky http://www.vbnet.cz/clanek--33-vb_net_od..., ale nefunguje mi to tak ako potrebujem.

keď načítam súbor zobrazí sa mi iba pár čísiel, čísla sa nezobrazujú od začiatku (prvé a druhé číslo sa nezobrazí a taktiež aj posledné), po zobrazeni čísiel VB vyhodí chybu: Index je mimo hranice pole.

zdrojový kód:pre jeden súbor

Structure Zaznam
        Dim hodnota As Integer
    End Structure
    Dim i As Integer
    Dim zaznamy() As Zaznam
    'Dim pole() As Integer = {5, 7, 2, 4, 1, 6, 3, 12, 45, 65}
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        i = i + 1
        Label1.Text = (zaznamy(i).hodnota)
        'Label1.Text = pole(j)
    End Sub
    Dim sr As New IO.StreamReader("c:\1.txt", System.Text.Encoding.Default)
    Dim pocet As Integer = CInt(sr.ReadLine())
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ReDim zaznamy(pocet - 1)

        For i As Integer = 0 To pocet - 1
            zaznamy(i).hodnota = CInt(sr.ReadLine())
        Next

        sr.Close()
        Timer1.Interval = 200
        Timer1.Enabled = True
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Do proměnné "počet" načítáte první řádek souboru. V opakovacím cyklu se pak záznamy plní od druhého řádku.

Proměnnou i v Timeru startujete od jedničky (po definici je nulová, ale v Timeru připočtete jedničku). Tak vynecháte hodnotu s indexem 0 v poli zaznamy()

To je důvod nezobrazení prvních dvou hodnot.

Konec čtení s chybou působí chybně stanovený počet...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ten řádek

Dim pocet As Integer = CInt(sr.ReadLine())

je pěkná prasárna a to, že funguje, je pouze souhra náhod.

Pořadí, v němž se inicializují proměnné uvnitř třídy není definováno a nikde se nepíše, že to musí být popořadě. Vy přitom při definici hodnoty proměnné pocet používáte proměnnou sr, která ještě nemusí být zinicializována.

Pokud deklarujete hodnoty mimo proceduru, inicializujte je pouze výrazy, které na ničem jiném nezávisí a které ideálně vrací konstantní hodnotu. Jde o to, že nevíte, kdy přesně se onen kód provede. V tomto případě tedy mimo metodu nechte pouze

Dim pocet As Integer

a v metodě s načítáním souboru dejte

pocet = CInt(sr.ReadLine())

.

Nevím, jestli tomu kódu rozumíte, ale článek, který odkazujete, počítá s tím, že na prvním řádku je v souboru uložen počet položek. Možná to ve své aplikaci nepotřebujete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tipuji, že načtení prvního řádku jako počet nebyl záměr, ale omyl.

Mohlo by pomoct třeba tohle:

Public Class Form1
  Dim i, pocet As Integer
  Dim zaznamy() As String = _
    IO.File.ReadAllLines("c:\1.txt", System.Text.Encoding.Default)

  Private Sub Form1_Load(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles MyBase.Load
    pocet = zaznamy.Length
    Timer1.Interval = 200
    Timer1.Enabled = True
  End Sub

  Private Sub Timer1_Tick(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Timer1.Tick
    i = i + 1
    If i = pocet Then Timer1.Enabled = False
    Label1.Text = CStr(zaznamy(i - 1))
  End Sub

End Class

S "Timer1.Interval = 200" by to vapadalo jako tachometr v akci :-)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

díky moc mi to pomohlo

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback