How to read text file into array?
BlitzMax Forums/BlitzMax Beginners Area/How to read text file into array?
| ||
I'm trying to read a text file into an array without a whole lot of luck (still learning BMX). Here is an example of what I'm trying to do:
Type TTextFile
Field lines:String[] 'an array of strings
Method ReadTextFile(thisFile:String)
Local fs:TStream
Local fileString:String 'store the entire file as a string so we can split it later
fs=ReadStream(thisFile)
If Not fs Then RuntimeError("Could not find file: " + thisFile)
While Not Eof(fs)
fileString = fileString + ReadLine(fs)
Wend
lines=fileString.Split("~n") ' now make the array
Print lines.length ' for some reason, this always = 1, when the text file I'm loading has 100+ lines
CloseStream(fs)
End Method
End Type
I'm sure I'm missing something simple (This is my first experience with BMX Arrays). Anyone care to point me in the right direction? thanks |
| ||
| Ok, i see part of the problem... Readline discards terminating characters.. How do I preserve them? Or should I just insert a delimiting character manually each iteration of the ReadLine loop? |
| ||
| Or should I just insert a delimiting character manually each iteration of the ReadLine loop? Bingo. |
| ||
| you don't even have to worry about any of that you can write text as lines using WriteLine such as s$ = "line one" writeLine(file,s$) s$ = "and line two" writeLine(file,s$) to read all you have to do is: local s$[2] s$[0] = readline(file) s$[1] = readline(file) edited: sorry misunderstood ignore the above but you can do it like this fileString = fileString + ReadLine(fs)+"~n" |
| ||
You could store the lines in a list and then convert the list into an array.Type TTextFile
Field lines:String[] 'an array of strings
Method ReadTextFile(thisFile:String)
Local fs:TStream
fs=ReadStream(thisFile)
If Not fs Then RuntimeError("Could not find file: " + thisFile)
Local stringlist:TList = New TList
While Not Eof(fs)
stringlist.AddLast(ReadLine(fs))
Wend
CloseStream(fs)
lines = String[](stringlist.ToArray())
End Method
End Type |
| ||
Local f:TStream = ReadFile("test.txt")
Local lines:String[] = f.ReadString(f.size()).split("~n")
KERPLOW! |