step with a file read variable

Blitz3D Forums/Blitz3D Programming/step with a file read variable

sting(Posted 2008) [#1]
Hey there. I can't seem to get blitz to assign a variable read from a file to a const so that I can use it with a for-step-next loop.

a$ = Input$("Specify Source:")
Global img=LoadImage(a$+".jpg") 
Global file$ = a$ + ".txt"
Global linkfile = ReadFile(file$)

Const steps = ReadInt (linkfile)

For y = 0 To ImageHeight(img) Step steps
	WriteLine( fileout, "..."  )
	For x = 0 To ImageWidth(img) Step steps
		If y <= ImageHeight(img)
			If x <= ImageWidth(img)
				WriteLine( fileout, "...stuff..."  )
			EndIf
		EndIf	
	Next
	WriteLine( fileout, "...."  )
Next


It keeps saying "expression must be constant"
Is there any way I can use a file variable to change the step amount?


Stevie G(Posted 2008) [#2]
Firstly, you shouldn't be looking outside the image buffer ... it goes from 0...(width-1) etc.. If you start reading the RGB values outwith you could get a mav.

There is no way to assign a constant from a variable read from a file. This should work though ..

For y = 0 To ImageHeight(img)-1 
       if ( y mod steps ) = 0
        	WriteLine( fileout, "..."  )
 	        For x = 0 To ImageWidth(img)-1 
                     if ( x mod steps ) = 0		        
  		         WriteLine( fileout, "...stuff..."  )
		     EndIf
  	        Next
	        WriteLine( fileout, "...."  )
        endif
Next



sting(Posted 2008) [#3]
Thanks ill try it.


Ross C(Posted 2008) [#4]
The constant step value is a pain, but it's understandable why it's like that.


Floyd(Posted 2008) [#5]
The most flexible way is to use a While loop instead of For-Next.

If you know the step size is positive then the equivalent loops look like this:

; Set values for xFirst and xLast here. xStep must be constant.

For x = xFirst To xLast Step xStep
	; do something
Next



; Set values for xFirst, xLast and xStep here.

x = xFirst

While x <= xLast
	; do something
	x = x + xStep
Wend

If xStep is negative then you would use "While x >= xLast".

If you don't know the sign of xStep in advance then you must write code to handle both cases.
This complication is the reason For-Next insists on a constant step value.


PowerPC603(Posted 2008) [#6]
Is it really important to have "Steps" as a constant?
You can use a global and that will work too.

A constant is assigned a specific value before compiling, and when the compiler sees that constant anywhere in your code, it is replaced with the value assigned to it.
A constant cannot be changed during execution of your program, so you can't store a value in it that you've read from a file.


_33(Posted 2008) [#7]
The compiler replaces the label with the value when compiling, so no matter what, you won't be able to change the step value.


Warner(Posted 2008) [#8]
You could also avoid using step by multiplying the For variable by a step value:
stp = 5
For i = 0 To 50/stp
  x = i * stp
  Print x
Next