Hej! Det är nog smidigare att läsa in hela filen i en variabel, då jag antar att det rör sig om en liten fil. Har du ens försökt att debugga och se vilka värden du får? VB.net_att läsa en textfil
Jag läser en kurs i VB.net och har problem med en av min lab. Det här programmet ska kunna läsa in en textfil, analysera den och redovisa hur många ettor, tvåor, treor och fyror finns i texten. En funktion ska ta han om detta. Jag har skrivit kod som inte fungerar som det ska vet inte varför. Har försökt att hitta felet men sitter fast och har inngen hjälp hoppas nån kan hjälpa mig med det.
Jag har försökt att erökna siffrorna men hjälp av if sats eller CASE och nu har jag kommenterat bort CASE men ingen av de fungerar.
EN textfil får användas för det.
MVH
Pirooz.
följande är koden:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim filnamnet As String
Dim resultat As Boolean 'fångar värdet från funktion siffror'
Dim ett As Integer 'variabler som ska få värden från sina kompis_variabler i funktinen siffror'
Dim tva As Integer
Dim tre As Integer
Dim fyra As Integer
Dim filtitel As String
filtitel = txtFil.Text 'här fångar man filnamnet från text rutan, .Text gör att man tar bara text och inte all info som finns i text rutan'
resultat = siffror(ett, tva, tre, fyra, filtitel) 'här fås resultaten från funktionen siffror'
If resultat = True Then
txtSvar.Text = CStr("Siffran ett") & CStr(" förekommer ") & CStr(ett) & (" gånger.") & CStr(" Siffran två") & CStr(" förekommer ") & CStr(tva) & CStr(" gånger.") & CStr(" Siffran tre") & CStr(" förekommer ") & CStr(tre) & CStr(" gånger.") & CStr(" Siffran fyra") & CStr(" förekommer ") & CStr(fyra) & CStr(" gånger.")
Else
MsgBox("Ser du inte filen? Skaffa glasögon hihihih inget fel på lagerlof.") 'här får man fel meddelande om filen inte exsisterar'
End If
End Sub
Function siffror(ByRef one As Integer, ByRef two As Integer, ByRef three As Integer, ByRef four As Integer, ByVal filnamnet As String) As Boolean
Dim Fil As IO.StreamReader
Dim myreadline As String
Dim a As Integer
one = 0 'här nollställs variablerna'
two = 0
three = 0
four = 0
If IO.File.Exists(filnamnet) Then ' kollar om filen finns'
Fil = IO.File.OpenText(filnamnet) 'filen öppnas här'
Do While Fil.Peek <> -1 'loop som ska gå runt tills man når end of file Fil.Peek<> -1'
myreadline = Fil.ReadLine()
a = a + 1
myreadline = Mid(filnamnet, a, 1)
If myreadline = CStr(1) Then
one = one + 1
End If
If myreadline = CStr(2) Then
two = two + 1
End If
If myreadline = CStr(3) Then
three = three + 1
End If
If myreadline = CStr(4) Then
four = four + 1
End If
' Select Case myreadline 'Case kontrollerar och räknar sifforrna som finns i filen'
'Case CStr(1)
'one = one + 1
' Case CStr(2)
'two = two + 1
' Case CStr(3)
'three = three + 1
' Case CStr(4)
' four = four + 1
'End Select
Loop
Fil.Close() 'här stängs filen'
Return True 'funktionen returnerar värdet true om filen finns och har ett innehåll'
End If
Return False 'False returneras om filen inte finns'
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Application.Exit() 'stänger programmet'
End Sub
Private Sub txtFil_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFil.TextChanged
End Sub
End ClassSv: VB.net_att läsa en textfil
Sedan skulle jag använda en array. Mycket effektivare än en case sats.
Är talen lagrade som text i filen eller är det binärt?
Lite psuedo kod:
Dim Talet as Integer
Dim Talen(3) as Integer
Fil = new Fil(Filnamn)
Text = Fil.AllText()
Fil.Stäng
For Each Tecken in Text
If Tecken >= 49 AND Tecken <= 52 Then
Talet = Tecken - 49
Talen(Talet) = Talen(Talet) + 1
End IF
NextSv: VB.net_att läsa en textfil
tycker det ser ut som att du gör det mer komplicerat än vad du behöver göra det iaf. Det jag på rak arm tycker ser väldigt mysko ut är:
<code>
myreadline = Fil.ReadLine()
a = a + 1
myreadline = Mid(filnamnet, a, 1)
If myreadline = CStr(1) Then
</code>
Du läser alltså en rad i filen (som kan vara "rad1hejhopp") till variabeln myreadline. Men varför ersätter du texten du har läst in med ett tecken från filnamnet? Det är ju inte i filnamnet du skall kolla hur ofta 1,2, 3 eller 4 finnas...
Edit: rackarns, Andreas hann före... ;-) Nåja, jag hann göra ett projekt under tiden som gjorde detta eftersom jag har "glömt" en del av VB-syntaxen. Alltid lär man sig nåt på det... ;-)