Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Tietojen tallennus ja lataus

Sivun loppuun

ZuuZou [03.01.2010 22:23:12]

#

Eli tarkoituksena on tallentaa selllaiset tiedot jotka on kirjoitettu teksti bokseihin ja ladata ne seuraavan kerran kun ohjelman avaa.

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=vbo_8
Yritin tuon oppaan avulla, mutta se antaa erroria vain minulla.

Eli onko jotain simppeliä komentoa joka korvaa tuon oppaan antaman:

Dim i As Integer
Open "c:\hakemisto\tiedosto.txt" For Output As #1
For i = 1 to 5
   Print #1, "Rivi " & i
Next
Close #1

Kiitos jo näin etukäteen.

Mod. lisäsi kooditagit

Metabolix [03.01.2010 22:29:49]

#

Oppaan koodi on varmasti toimiva oikeassa ympäristössä. Mitä kieltä käytät? VB.Net (VB2005 tai VB2008) toimii hyvin eri tavalla kuin oppaan käsittelemä VB6. Jos käytät VB6:tta, millainen virheilmoitus tulee?

Antti Laaksonen [03.01.2010 22:37:27]

#

Monet opassarjan esimerkeistä eivät toimi VB.NETissä.

Tässä on vastaava koodi VB.NETille:

Dim i As Integer
FileOpen(1, "c:\hakemisto\tiedosto.txt", OpenMode.Output)
For i = 1 To 5
    PrintLine(1, "Rivi " & i)
Next
FileClose(1)

vehkis91 [03.01.2010 22:38:45]

#

Edit: antti laittoikin paremman.

Tuossa koodi, joka kirjoittaa tiedostoon: 12345

Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim FileWriter As StreamWriter

        FileWriter = New StreamWriter("tiedosto.txt", False)

        For i = 1 To 5
            FileWriter.Write(i)
        Next i

        FileWriter.Close()
    End Sub
End Class

ZuuZou [03.01.2010 22:40:27]

#

Elikkä joo olin näköjään aivan unohtanut laittaa että VB2008 käytän ja kiitos vielä Antti että pelastit päiväni!

Edit: Vielä iski ongelmaa ku en osaa tuota oikein käyttää että kuinka saan sen tallentamaan mitä Textbox1 ja Textbox2 lukee? Yritin laittaa Että

Dim i As Integer
FileOpen(1, "c:\hakemisto\tiedosto.txt", OpenMode.Output)
For i = Textbox1.text And Textbox2.text
    PrintLine(1, i)
Next
FileClose(1)

Mutta se herjasi siitä antaen syntax erroria...

ZuuZou [03.01.2010 23:50:19]

#

Niin joo ja mites sitten toimii kun haluasin että kun avaan ohjelman että se tarkistaisi tuon tekstitiedoston ja muuttaisi textbox1.textin ja textbox2.textin?

sankari [04.01.2010 00:09:31]

#

PrintLine(1, Textbox1.Text)
PrintLine(1, Textbox2.Text)

Heität siis kaiken For-silmukan sisältä kaiken itse silmukka mukaanlukien bittitaivaaseen ja laitat noin

groovyb [04.01.2010 00:11:08]

#

FileOpen(1,"C:\hakemisto\tiedosto.txt",OpenMode.Output)

PrintLine(1,Textbox1.text)
PrintLine(1,Textbox2.text)

FileClose(1)

'Tai

Dim SR As StreamWriter

SR = New StreamWriter("C:\Tiedosto.txt",False)

SR.WriteLine(Textbox1.text)
SR.WriteLine(Textbox2.text)

SR.Close

Virhe tuossa oli se että For Next silmukkakäsittely on sulla vähän hakusessa

For silmukassa tehdään jotain x kertaa.

eli vaikka

Dim i as integer 'Eli kokonaislukutyyppiseksi muuttujaksi määritetään i,alueena -32768 - 32768

For i = 1 To 10 'i on ensin 1, sitten 2, 3-4-5 ja päättyy lukuun 10

MessageBox.Show(i.ToString()) 'Ruutuun pamahtaa 10 kertaa viesti-ikkuna, jossa ensin teksti 1, ja päättyen 10

Next

ja tarkistukseen, jos haluat tarkistaa onko tiedosto olemassa, sen voi tehdä näin:

Dim Osoite As String = "C:\Tiedosto.txt"

If IO.File.Exists(Osoite) = True Then

MessageBox.Show("Tiedosto löytyy")

Else

MessageBox.Show("Tiedostoa ei löydy!")

End If

ZuuZou [04.01.2010 00:46:41]

#

Jaa se For oli sitä varten :D en tajunnutkaan tuollaista...

Eli kun tuohon nyt kirjoittaa vaikka jonkun koodin pätkän tuohon Textbox1 niin se tallentaa sen hyvin tuonnne teksti tiedostoon mutta kuinka saan sen tietyn linen tuotua takaisin ohjelmaan?

Edit: Vähän selvennän nyt vielä... Kirjoitan tekstin pätkän textbox1 > Teksti tallentuu Tekstitiedostoon > Ongelma... Millä koodin pätkällä teksti on Textbox1 seuraavallakin kerralla kun avaan ohjelman?

groovyb [04.01.2010 00:57:18]

#

Tämä toimii jos sulla on tekstitiedostossasi vain kaksi riviä, ensimmäisessä textbox1.textiin tarkoitettu teksti, ja toisessa rivissä textbox2:seen tarkoitettu rivi.textbox1:sen tulee myös olla tyhjä.

jos sinulla on jotenkin muuten, sovella vapaasti. laita vaikka rivit merkkijonotaulukkoon ja lue sieltä, ihan miten vaan.

Try
        Dim line As String
        Dim readFile As System.IO.TextReader = New StreamReader("C:\Tiedosto.txt")
        While True
            line = readFile.ReadLine()
             If line Is Nothing Then
                 Exit While
             Else
                 If Textbox1.text = "" Then
                    TextBox1.text = Line
                 Else
                    TextBox2.text = Line
                 End If
             End If
         End While
         readFile.Close()
         readFile = Nothing
Catch ex As IOException
         MsgBox(ex.ToString)
End Try

ZuuZou [04.01.2010 01:22:18]

#

Njoo tuota noin... VB2008 sanoo tuosta StreamReaderistä että "Type 'StreamReader' is not defined."

Eli oliko tuo tarkoitettu VB6 vai teinkö jotain väärin?

vehkis91 [04.01.2010 01:28:47]

#

Tämä alkuun niin toimii

Imports System.IO

ZuuZou [04.01.2010 01:36:31]

#

Ei auttanut Vehkis... Herjaa vieläkin että "Type 'StreamReader' is not defined."

groovyb [04.01.2010 08:56:29]

#

Dim SR As IO.TextWriter = New IO.StreamReader("C:\text.txt")

kokeileppa noin

novice [04.01.2010 12:58:59]

#

Jos kyse ei ole kuin kahdesta merkkijonosta, niin yksi kätevä keino on tallettaa ne sovellus asetuksiin. Tekstitiedoston voi tällöin unohtaa.

Eli tuplaklikkaa Solution Explorerista 'My Project' ja sieltä välilehti 'Settings'. Luo Settings taulukkoon kaksi string muuttujaa, esim. teksti1 ja teksti2.

Formilla kaksi textboxia

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = My.Settings.teksti1
        TextBox2.Text = My.Settings.teksti2
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        My.Settings.teksti1 = TextBox1.Text
        My.Settings.teksti2 = TextBox2.Text
        My.Settings.Save()
    End Sub
End Class

ZuuZou [04.01.2010 17:32:34]

#

No joo kiitos tästä novice! :D Toimii paremmin kuin hyvin!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta