How to read text file into array?

BlitzMax Forums/BlitzMax Beginners Area/How to read text file into array?

jondecker76(Posted 2010) [#1]
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


jondecker76(Posted 2010) [#2]
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?


Ked(Posted 2010) [#3]
Or should I just insert a delimiting character manually each iteration of the ReadLine loop?

Bingo.


Jesse(Posted 2010) [#4]
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"


Czar Flavius(Posted 2010) [#5]
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



Warpy(Posted 2010) [#6]
Local f:TStream = ReadFile("test.txt")
Local lines:String[] = f.ReadString(f.size()).split("~n")


KERPLOW!