StreamReader vrácení "cursoru" nahoru   zodpovězená otázka

VB.NET

Ahoj, mám takový problém, použivám StreamReader ktery cte data ze souboru, kdyz uz vsechny radky precetl, potrebuju, aby cetl znovu od shora.

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

Dobrý den,předpokládám ,že dle Vašeho dotazu chcete vrátit kurzor na horu("potrebuju, aby cetl znovu od shora." to jsem moc nechápal co vlastně chcete.)Tak to by mělo jít vyřešit tímto kódem:

      Dim file As New IO.StreamReader("TextFile1.txt")
        TextBox1.Text = file.ReadToEnd
        TextBox1.SelectionStart = 0
        TextBox1.Focus()

Pokud jste chtěl něco jiného tak se ozvěte.Přeji hezký den.

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

ano vlastne potrebuji neco jineho.. Takze takhle, mám program ktery když spustím tak mi z txt souboru nacte jmena serverů, pomocí

    Private Sub reload()
        Dim readl As String
        Dim readl_ch As String
        ComboBox1.Items.Clear()
        While Not (data_reader.EndOfStream)
            readl = data_reader.ReadLine
            data_reader.ReadLine()
            data_reader.ReadLine()
            data_reader.ReadLine()
            ComboBox1.Items.Add(readl)
        End While
    End Sub

Každá čtvrtá řádká od první je jméno serveru, mezi tím jsou pod serverem udáje (adresa, patche, realmlist), to jsou ty tři řadky mezi tím.

Ty nazvy serveru se mi dají do combolistu a pak dělám funkci když vyberu v combolistu nejaky server, tak se mi o něm vypíší informace a status.

Ale mám tu problem že když se mi nahoře už jednou celý ten soubor přečte, tak po druhé pokračuje kde skončil, ale já potřebuju aby začal číst zase od začátku souboru..

Je to program pro změnu realmu ke World of Warcraft.

Doufám, že jsem napsal chápavěji než předtím.. Děkuji za odpovědi

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

Zkuste použít raději MemoryStream, ten má funkci Seek(SeekOrigin.Begin).

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

Asi bych to řešil možná úplně jinak(asi podle množství serverů.

Buď databází(Mělo by to výhodu , že by mohl uživatel krásně přidávat nové info o serverech,nebo upravovat) .Nebo jenom tak , že bych naplnil combobox názvy serverů.A pak podle Select Case Combobox1.selected index vypisoval ostatní info o serveru do textboxů nebo labelu (nevím jak má rozvrhlé uživatelské rozhraní).

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

Na fóru je jiný dotaz, počítám od stejného autora, ze kterého vyplývá, že autor data tahá z webu a (pravděpodobně) nemůže rozhodovat o jejich formě, takže databáze by byla spíše komplikací, jelikož by bylo potřeba ji pravidelně updatovat a nové záznamy by byly pouze lokální. S tím Casem naprosto souhlasím, při vybrání serveru bych asynchroně dotahal potřebná data a seznam serverů by měl refresh řekněme pouze na požádání nebo řekněme každou půlhodinu. Tahat ho pokaždé znovu je nesmysl.

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

Aha tak toho dotazu jsem si nevšiml.Proto jsem viděl databázi za vhodnou.Tak pak je jasné,že je databáze v tomto případě relativně k ničemu.

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

Děkuji za návrhy, zkusím to vymyslet nějak pomoctí Select Case

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

ano vlastne potrebuji neco jineho.. Takze takhle, mám program ktery když spustím tak mi z txt souboru nacte jmena serverů, pomocí

    Private Sub reload()
        Dim readl As String
        Dim readl_ch As String
        ComboBox1.Items.Clear()
        While Not (data_reader.EndOfStream)
            readl = data_reader.ReadLine
            data_reader.ReadLine()
            data_reader.ReadLine()
            data_reader.ReadLine()
            ComboBox1.Items.Add(readl)
        End While
    End Sub

Každá čtvrtá řádká od první je jméno serveru, mezi tím jsou pod serverem udáje (adresa, patche, realmlist), to jsou ty tři řadky mezi tím.

Ty nazvy serveru se mi dají do combolistu a pak dělám funkci když vyberu v combolistu nejaky server, tak se mi o něm vypíší informace a status.

Ale mám tu problem že když se mi nahoře už jednou celý ten soubor přečte, tak po druhé pokračuje kde skončil, ale já potřebuju aby začal číst zase od začátku souboru..

Je to program pro změnu realmu ke World of Warcraft.

Doufám, že jsem napsal chápavěji než předtím.. Děkuji za odpovědi

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

omvlouvám se za ten příspěvek ze je tu 2x, zamrzl mi komp a dalo se to sem 2x :(

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

"když se mi nahoře už jednou celý ten soubor přečte, tak po druhé pokračuje kde skončil" - jak může pokračovat (kam?), když už se načetl celý? Když přečtený soubor zavřu, po novém otevření se čte od začátku.

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

A co takhle přečíst a ZAVŘÍT. Při dalším otevření čtete od začátku. Předpokládám, že texťák má pár vět, pokud hodně, tak třeba tisíc. To je pořád otevřením a zavřením zvládnutelné.

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

To je jedna možnost. Jinou a lepší bude udělat si třídu nebo strukturu, do ní plácnout ty 4 nebo kolik údajů o serveru a poprvé načíst hned vše do nějakého Listu. Pak už to máte v tom seznamu a nemusíte nic řešit. Jediný problém by byl, kdyby se to všechno nevešlo do paměti nebo bylo neúnosně velké, ale v takovém případě bude pomalé i to čtení. Pokud je serverů pár, je to v pohodě.

Tady je příklad:

'deklarace struktury a seznamu serverů
Class ServerInfo
    Public Name As String
    Public IP As String
    ...
End Class
Public servers As New List(Of Server)

'někde uvnitř metody - načítání ze StreamReaderu
While sw.EndOfStream
    Dim s As New ServerInfo()
    s.Name = sw.ReadLine()
    s.IP = sw.ReadLine()
    ...
    servers.Add(s)
    ListBox1.Items.Add(s.Name)
End While

Informace o aktuálně vybraném serveru najdete takto:

Dim s As Server = servery(ListBox1.SelectedIndex)
MsgBox(s.Name)
MsgBox(s.IP)
...

Jinou (lepší) možností je použít databinding, ale to by vydalo na samotný článek.

nahlásit spamnahlásit spam 1 / 1 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