probelm on Reading txt file..??
-
i'm not sure i did it right, but i think not cause it's not working. I had already save some line in the txt file, where now i trying to retrieve those infomation line by line to the other form. For the for loop section, anyone can tell me am i doing it right? ----- Dim strmw As StreamReader Dim myInputString As String Dim filePath As String = Path.GetDirectoryName(Application.ExecutablePath) & "\save\testing.txt" Dim x, num As Integer Dim respond As MsgBoxResult respond = MsgBox("Load file???", MsgBoxStyle.Question + MsgBoxStyle.YesNo) If respond = MsgBoxResult.Yes Then strmw = File.OpenText(filePath) 'loop the line for different person detail num = strmw.ReadLine() For x = 1 To Val(num) ' write detail in the record x = strmw.ReadLine() wpname(x).Text = strmw.ReadLine() wPP(x).Text = strmw.ReadLine() wcounter(x).Text = strmw.ReadLine() Next form2.PTurn.Text = strmw.ReadLine() 'get whos turn strmw.Close() MsgBox("Loading sucess", MsgBoxStyle.OKOnly) Else: Exit Sub End If
-
i'm not sure i did it right, but i think not cause it's not working. I had already save some line in the txt file, where now i trying to retrieve those infomation line by line to the other form. For the for loop section, anyone can tell me am i doing it right? ----- Dim strmw As StreamReader Dim myInputString As String Dim filePath As String = Path.GetDirectoryName(Application.ExecutablePath) & "\save\testing.txt" Dim x, num As Integer Dim respond As MsgBoxResult respond = MsgBox("Load file???", MsgBoxStyle.Question + MsgBoxStyle.YesNo) If respond = MsgBoxResult.Yes Then strmw = File.OpenText(filePath) 'loop the line for different person detail num = strmw.ReadLine() For x = 1 To Val(num) ' write detail in the record x = strmw.ReadLine() wpname(x).Text = strmw.ReadLine() wPP(x).Text = strmw.ReadLine() wcounter(x).Text = strmw.ReadLine() Next form2.PTurn.Text = strmw.ReadLine() 'get whos turn strmw.Close() MsgBox("Loading sucess", MsgBoxStyle.OKOnly) Else: Exit Sub End If
campbells wrote:
but i think not cause it's not working
So what's not working about it? Have you traced the code in debug mode to see what is happening? ...Steve 1. quod erat demonstrandum 2. "Give a man a fish and you've fed him for a day. Teach him how to fish and you've fed him for life." I read that somewhere once :-) (Translation: I'll show you the way, but not write the code for you.)
-
i'm not sure i did it right, but i think not cause it's not working. I had already save some line in the txt file, where now i trying to retrieve those infomation line by line to the other form. For the for loop section, anyone can tell me am i doing it right? ----- Dim strmw As StreamReader Dim myInputString As String Dim filePath As String = Path.GetDirectoryName(Application.ExecutablePath) & "\save\testing.txt" Dim x, num As Integer Dim respond As MsgBoxResult respond = MsgBox("Load file???", MsgBoxStyle.Question + MsgBoxStyle.YesNo) If respond = MsgBoxResult.Yes Then strmw = File.OpenText(filePath) 'loop the line for different person detail num = strmw.ReadLine() For x = 1 To Val(num) ' write detail in the record x = strmw.ReadLine() wpname(x).Text = strmw.ReadLine() wPP(x).Text = strmw.ReadLine() wcounter(x).Text = strmw.ReadLine() Next form2.PTurn.Text = strmw.ReadLine() 'get whos turn strmw.Close() MsgBox("Loading sucess", MsgBoxStyle.OKOnly) Else: Exit Sub End If
num = strmw.ReadLine()
- i assume you have a number on the first line of your textfileFor x = 1 To Val(num)
- then you read another number and modified x, where x is your loop control counter - the loop itself is pretty much destroyed with the next statement**x = strmw.ReadLine()code>**
**`wpname(x).Text = strmw.ReadLine() wPP(x).Text = strmw.ReadLine() wcounter(x).Text = strmw.ReadLine() Next` you probably need to change your loop control. use `**while .. do .. loop**` instead or you could post a sample of your data(textfile) so we could help you better and probably suggest a working snippet. Marvin N. Guerrero - Taje Kage_bunshinNunJutsU**
-
num = strmw.ReadLine()
- i assume you have a number on the first line of your textfileFor x = 1 To Val(num)
- then you read another number and modified x, where x is your loop control counter - the loop itself is pretty much destroyed with the next statement**x = strmw.ReadLine()code>**
**`wpname(x).Text = strmw.ReadLine() wPP(x).Text = strmw.ReadLine() wcounter(x).Text = strmw.ReadLine() Next` you probably need to change your loop control. use `**while .. do .. loop**` instead or you could post a sample of your data(textfile) so we could help you better and probably suggest a working snippet. Marvin N. Guerrero - Taje Kage_bunshinNunJutsU**
the game maybe have 1-4 player, so let said in this round have 3 players player:1 NAme:A Position:10 Movestep:2 player:2 NAme:B Position:8 Movestep:2 player:3 NAme:C Position:7 Movestep:2 -- so i was thinking to use the x value to loop 3 times since got 3 player and read 4 line accordinly.... am not sure can it work but i only know a bit on using the readline.
-
the game maybe have 1-4 player, so let said in this round have 3 players player:1 NAme:A Position:10 Movestep:2 player:2 NAme:B Position:8 Movestep:2 player:3 NAme:C Position:7 Movestep:2 -- so i was thinking to use the x value to loop 3 times since got 3 player and read 4 line accordinly.... am not sure can it work but i only know a bit on using the readline.
This is a really inefficient way of doing this. You'd be better off writing it in a CSV format (commna delimited):
Name,Age,Sex,Something
"Amy",17,"F",123456
"Bobby",18,"M",123456This will make it easier to parse and easier to recover from a lightly corrupted file. Better yet, use XML! RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-
This is a really inefficient way of doing this. You'd be better off writing it in a CSV format (commna delimited):
Name,Age,Sex,Something
"Amy",17,"F",123456
"Bobby",18,"M",123456This will make it easier to parse and easier to recover from a lightly corrupted file. Better yet, use XML! RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-
?????? noo... actually thats example only wat i mean is i need to loading those information into some label.text, so that the form can perform some task according to the function.
And you didn't create this file? It's comming from an outside source that you don't control? If you did, then my suggestion still stands. It in no way change what you want to do with this in relation to the forms controls. RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-
And you didn't create this file? It's comming from an outside source that you don't control? If you did, then my suggestion still stands. It in no way change what you want to do with this in relation to the forms controls. RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
??nonono i had already create the file here how i save it, so now i want to load the information back. ...................... respond = MsgBox("Save game ???", MsgBoxStyle.Question + MsgBoxStyle.YesNo) If respond = MsgBoxResult.Yes Then strmw = OpenStreamWriter(filePath) strmw.Write(vbCrLf) 'loop all the player status For x = 1 To Val(NumPlayer.Text) ' write detail in the record strmw.WriteLine(String.Format("Player:" & (x), Now)) strmw.WriteLine(String.Format(" Name: " & wpname(x).Text, Now)) strmw.WriteLine(String.Format("position:" & wPP(x).Text, Now)) strmw.WriteLine(String.Format(" MoveStep:" & wcounter(x).Text, Now)) savegamesound() Next strmw.WriteLine(String.Format("whosturn: " & PTurn.Text, Now)) strmw.Close() MsgBox("Game Saved", MsgBoxStyle.OKOnly) Else : Exit Sub End If
-
??nonono i had already create the file here how i save it, so now i want to load the information back. ...................... respond = MsgBox("Save game ???", MsgBoxStyle.Question + MsgBoxStyle.YesNo) If respond = MsgBoxResult.Yes Then strmw = OpenStreamWriter(filePath) strmw.Write(vbCrLf) 'loop all the player status For x = 1 To Val(NumPlayer.Text) ' write detail in the record strmw.WriteLine(String.Format("Player:" & (x), Now)) strmw.WriteLine(String.Format(" Name: " & wpname(x).Text, Now)) strmw.WriteLine(String.Format("position:" & wPP(x).Text, Now)) strmw.WriteLine(String.Format(" MoveStep:" & wcounter(x).Text, Now)) savegamesound() Next strmw.WriteLine(String.Format("whosturn: " & PTurn.Text, Now)) strmw.Close() MsgBox("Game Saved", MsgBoxStyle.OKOnly) Else : Exit Sub End If
Nonononono!!! Since you control writing the file, you're doing it in such a way that makes it easy to write but also makes it very tedious to read it back in. What's up with these
Now
's?? Since your Format's don't have any parameters, calling Now all the time isn't doing anythis. And using String.Format doesn't benefit you either!strmw.WriteLine(String.Format("Player:" & x, Now)) '?????????
If I was in your position, I'd be saving all my Player data into a collection of Player objects. Then you can just serialize the collection out to an XML file and read it back in just as easy.
Public Class Player
Private _PlayerName As String
Private _Position As Integer '? I don't know what data type you're using
Private _MoveStep As Integer '? I don't know what data type you're using
Public Property PlayerName As String
Get
Return _PlayerName
Eng Get
Set(ByVal value As String)
_PlayerName = value
End Set
End Property
.
. ' Same thing for your other Player properties
.
Public Sub New()
End Sub
Public Sub New(ByVal playerName As String, ByVal position As Integer, ByVal moveStep As Integer)
Me.PlayerName = playerName
Me.Position = position
Me.MoveStep = moveStep
End SubThen, to maintain a collection of Players, in an appropriate place in your code:
Dim Players() As Player
(This is quik and dirty mind you! I'd actually create another class to maintain the Players collection and put the SaveData and LoadData methods in this class). Now, to save your Player data, all you need to do is something like this:
Public Sub SavePlayerData()
Dim sw As New StreamWriter(Path.Combine(Application.StartupPath, "PlayerData.xml"))
Dim xmls As New XmlSerializer(Players.GetType())
xmls.Serialize(sw, Players)
sw.Close()
End SubTo load that data:
Public Function LoadPlayerData()
Dim sr As New StreamReader(Path.Combine(Application.StartupPath, "PlayerData.xml"))
Dim xmls As New XmlSerializer(Players.GetType())
Players = CType(xmls.Deserialize(sr), Player())Done! You don't have to do any parsing of lines or data because the Serializer does it all for you! RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-
Nonononono!!! Since you control writing the file, you're doing it in such a way that makes it easy to write but also makes it very tedious to read it back in. What's up with these
Now
's?? Since your Format's don't have any parameters, calling Now all the time isn't doing anythis. And using String.Format doesn't benefit you either!strmw.WriteLine(String.Format("Player:" & x, Now)) '?????????
If I was in your position, I'd be saving all my Player data into a collection of Player objects. Then you can just serialize the collection out to an XML file and read it back in just as easy.
Public Class Player
Private _PlayerName As String
Private _Position As Integer '? I don't know what data type you're using
Private _MoveStep As Integer '? I don't know what data type you're using
Public Property PlayerName As String
Get
Return _PlayerName
Eng Get
Set(ByVal value As String)
_PlayerName = value
End Set
End Property
.
. ' Same thing for your other Player properties
.
Public Sub New()
End Sub
Public Sub New(ByVal playerName As String, ByVal position As Integer, ByVal moveStep As Integer)
Me.PlayerName = playerName
Me.Position = position
Me.MoveStep = moveStep
End SubThen, to maintain a collection of Players, in an appropriate place in your code:
Dim Players() As Player
(This is quik and dirty mind you! I'd actually create another class to maintain the Players collection and put the SaveData and LoadData methods in this class). Now, to save your Player data, all you need to do is something like this:
Public Sub SavePlayerData()
Dim sw As New StreamWriter(Path.Combine(Application.StartupPath, "PlayerData.xml"))
Dim xmls As New XmlSerializer(Players.GetType())
xmls.Serialize(sw, Players)
sw.Close()
End SubTo load that data:
Public Function LoadPlayerData()
Dim sr As New StreamReader(Path.Combine(Application.StartupPath, "PlayerData.xml"))
Dim xmls As New XmlSerializer(Players.GetType())
Players = CType(xmls.Deserialize(sr), Player())Done! You don't have to do any parsing of lines or data because the Serializer does it all for you! RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
does it need any loop?? cause wat in my mind is the game maybe have 1-4 player, so let said in this round have 3 players player:1 NAme:A Position:10 Movestep:2 player:2 NAme:B Position:8 Movestep:2 player:3 NAme:C Position:7 Movestep:2 -- so i was thinking to use the x value to loop 3 times since got 3 player and read 4 line accordinly.... am not sure can it work but i only know a bit on using the readline, i never write it in xml b4..not really understand how it work ..
-
does it need any loop?? cause wat in my mind is the game maybe have 1-4 player, so let said in this round have 3 players player:1 NAme:A Position:10 Movestep:2 player:2 NAme:B Position:8 Movestep:2 player:3 NAme:C Position:7 Movestep:2 -- so i was thinking to use the x value to loop 3 times since got 3 player and read 4 line accordinly.... am not sure can it work but i only know a bit on using the readline, i never write it in xml b4..not really understand how it work ..
campbells wrote:
does it need any loop??
Nope. You don't need to worry about how many players are in the file or parsing each and every line. The Serializer takes care of all of this for you. RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-
campbells wrote:
does it need any loop??
Nope. You don't need to worry about how many players are in the file or parsing each and every line. The Serializer takes care of all of this for you. RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-
campbells wrote:
does it need any loop??
Nope. You don't need to worry about how many players are in the file or parsing each and every line. The Serializer takes care of all of this for you. RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-
i wonder is i have 3 player i do i read the first line to get how many player at that time??? cause i jsut understand is will recall the player status part but how it know how many times to loop it?
Your not listening... Doing it using a Serialization method frees you having to loop anything while reading the file. The Serializer takes care of that for you!! All you need to do is check the Bounds of the array to get the number of Players in it after the Players array is recreated. RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome