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.
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
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?
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)
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
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...
Niin joo ja mites sitten toimii kun haluasin että kun avaan ohjelman että se tarkistaisi tuon tekstitiedoston ja muuttaisi textbox1.textin ja textbox2.textin?
PrintLine(1, Textbox1.Text) PrintLine(1, Textbox2.Text)
Heität siis kaiken For-silmukan sisältä kaiken itse silmukka mukaanlukien bittitaivaaseen ja laitat noin
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
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?
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
Njoo tuota noin... VB2008 sanoo tuosta StreamReaderistä että "Type 'StreamReader' is not defined."
Eli oliko tuo tarkoitettu VB6 vai teinkö jotain väärin?
Tämä alkuun niin toimii
Imports System.IO
Ei auttanut Vehkis... Herjaa vieläkin että "Type 'StreamReader' is not defined."
Dim SR As IO.TextWriter = New IO.StreamReader("C:\text.txt")
kokeileppa noin
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
No joo kiitos tästä novice! :D Toimii paremmin kuin hyvin!
Aihe on jo aika vanha, joten et voi enää vastata siihen.