A faster way to read Files?

BlitzMax Forums/BlitzMax Beginners Area/A faster way to read Files?

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

6ms at command prompt when reading floats vs 123ms with strings
'''''''''''''''''
' USING STRINGS '
'''''''''''''''''

Local fileStream:TStream = ReadStream("c:\test.txt")', True, False)
Local myBank:TBank = New TBank
Local bankStream:TBankStream = CreateBankStream(myBank)

CopyStream(fileStream, bankStream, StreamSize(fileStream))
CloseStream(fileStream)
SeekStream(BankStream, 0)
Local coord:T3DCoord = New T3DCoord

Local floatStream:TStream = WriteStream("c:\testfloat.bin")

start=MilliSecs()

While Not Eof(bankStream)
	Local LineofData$ = ReadLine(bankStream)
	'Print lineofData$
	coord = GetCoords(LineOfData)
	WriteFloat(floatStream, coord.X)
	WriteFloat(floatStream, coord.Y)
	WriteFloat(floatStream, coord.Z)
	'Print coord.X+", "+coord.Y+", "+coord.Z
	FlushMem

Wend

Print "Time taken: " + (MilliSecs()-start) + "ms when reading strings"
CloseStream(floatStream)
CloseStream(bankStream)






''''''''''''''''
' USING FLOATS '
''''''''''''''''


Local fFileStream:TStream = ReadStream("c:\testfloat.bin")', True, False)
Local fmyBank:TBank = New TBank
Local fbankStream:TBankStream = CreateBankStream(fmyBank)

CopyStream(ffileStream, fbankStream, StreamSize(ffileStream))
CloseStream(ffileStream)
SeekStream(fBankStream, 0)
Local fCoord:T3DCoord = New T3DCoord

'Local floatStream:TStream = WriteStream("c:\testfloat.bin")

start=MilliSecs()

While Not Eof(fbankStream)
	fCoord.X = ReadFloat(fBankStream)
	fCoord.Y = ReadFloat(fBankStream)
	fCoord.Z = ReadFloat(fBankStream)
	'Print coord.X+", "+coord.Y+", "+coord.Z
	FlushMem

Wend

Print "Time taken: " + (MilliSecs()-start) + "ms when reading floats"

CloseStream(fbankStream)

















Type T3DCoord
	Field X:Float
	Field Y:Float
	Field Z:Float
End Type



Function GetCoords:T3DCoord(inData:String)
	Local tempCoord : T3DCoord = New T3DCoord
	Local currentChar : String = ""
	Local count : Int = 0
	Local TokenStart : Int = 0
	Local cDone:Int = 0
	Local Delim:String=","
	
	If Len(Delim)<>1 Then Return Null
	
	inData= Trim(inData)
	
	
	For count = 0 Until Len(inData)
		If inData[count..count+1] = delim Then
			Select cDone
				Case 0
					tempCoord.X=Float(Trim(inData[TokenStart..Count]))
				Case 1
					tempCoord.Y=Float(Trim(inData[TokenStart..Count]))
			End Select
			TokenStart = count + 1
			cDone :+1
		End If
	Next
	
	tempCoord.Z=Float(inData[TokenStart..Count])
	
	Return tempCoord
End Function