Writing an array to a file

Blitz3D Forums/Blitz3D Beginners Area/Writing an array to a file

Aussie(Posted 2010) [#1]
G day all.
Its taken me a long time but i have finally got my head around
arrays. Now i would like to write an array to a file. I have tried a couple of ways but i am not getting it the way i would like.

Here is what i am trying to achieve.

I would like the .dat file to look this:

1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,

here is my first code.
output = WriteFile("level.dat")

Dim grid(9,4)

	For rows = 0 To 9
		For cols = 0 To 4
			grid(rows,cols) = 1
			Write grid(rows,cols)
			WriteLine output,grid(rows,cols) + "," ; writline here gives me the number 1 repeated down
		Next									   ; the .dat file
		Print""
	Next
	
Print ""
Print "Press any key to continue"

CloseFile(output)

WaitKey()
End


this gives me this in the .dat file.
1,
1,
1,
1,
1,
1,
........

and here is the second way i tried which gives me an array index out of bounds
output = WriteFile("level.dat")

Dim grid(9,4)

	For rows = 0 To 9
		For cols = 0 To 4
			grid(rows,cols) = 1
			Write grid(rows,cols)
		Next
		WriteLine output,grid(rows,cols) + ","	; & wrteline here causes an array index out of bounds
		Print""
	Next
	
Print ""
Print "Press any key to continue"

CloseFile(output)

WaitKey()
End


Any help would be much appreciated.

Cheers :)


_Skully(Posted 2010) [#2]
use writebyte for each cell instead... then just read back the same way

maybe write a little header that says how many rows/columns..


Aussie(Posted 2010) [#3]
Thanks

I have tried replacing writeline with writebyte & now my .dat file looks weird.

i have a 9,9 which is from another piece of code i added which i want, but following that i get a line of blue rectangles any chance i could get an example.
Cheers :)




Aussie(Posted 2010) [#4]
Cheers _Skully
I have done a bit more looking around & trials have managed to get it working the way i want.
Here it is if anyone wants a look at how iv'e done it or any sugestions on how it could be done better.
output = WriteFile("level.dat")	;Will write to a file called level.dat when called.

r = Input$("Input rows: ")
c = Input$("Input coloumns: ")

WriteLine output,r + "," + c	; Use this to write values fo array dimentions to the .dat file
WriteLine output,""				; Creates a new line in the .dat file

temp$=""						; Creates an empty string
r = r - 1
c = c - 1

Dim grid(r,c)					; Uses c & r to define array dimentions

For rows = 0 To r
	For cols = 0 To c
	grid(rows,cols) = 1
	Next									   
Next
	
	
For rows = 0 To r
	temp = "Data "				; This adds the Data command to the start of the lines in the .dat file
	
	For cols = 0 To c
	
		If cols < c Then		; I use this to check loops to see if i need a comma
			
			Write grid(rows,cols)+","; I only use this to get a visual desplay of what i am writing out
			
			temp = temp + Str$(grid(rows,cols) + ",") ; places a comma after a number if it is needed
													  ; & converts the array into a string for writing
													  ; out
													
		Else If cols >= c Then ; I use this to check loops to see if i don't need a comma
		
			Write grid(rows,cols) ; I only use this to get a visual desplay of what i am writing out
			
			temp = temp + Str$(grid(rows,cols)) ; converts the array into a string for writing
												; out without the comma
												
		End If
		Next
											   
	WriteLine (output,temp) ; Writes the current line stored as temp to the .dat file
	Print""					; Gives a new line
	temp = ""				; Clears the temp$ string to get ready for the next string to be created.
Next

WriteLine output,""				; Creates a new line in the .dat file
CloseFile(output)

Print ""
Print "Press any key to continue"


WaitKey()
End