step with a file read variable
Blitz3D Forums/Blitz3D Programming/step with a file read variable
| ||
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? |
| ||
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 |
| ||
Thanks ill try it. |
| ||
The constant step value is a pain, but it's understandable why it's like that. |
| ||
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. |
| ||
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. |
| ||
The compiler replaces the label with the value when compiling, so no matter what, you won't be able to change the step value. |
| ||
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 |