File Hadnling Once Again...
Blitz3D Forums/Blitz3D Beginners Area/File Hadnling Once Again...
| ||
File line 15 = "Gamma = 0.5" <- in the file However I need to get the value 0.5 and put it in variable "Gamma_Num" and display it in the text field, but I need to able to change it, cause currently I can't get the variable and currently cant change the value in the text box, I got no clue what to do right now :| Make ur explication simple so I can understand :D AppTitle "Coalition Legions Game Commander" Global fileopen = False Global Gamma_Num = 0 Const MAXLINES = 127 ; Create Main Window w% = 300;GadgetWidth(Desktop()) - 100 h% = 300;GadgetHeight(Desktop()) - 100 x% = (ClientWidth(Desktop()) - w) / 2 y% = (ClientHeight(Desktop()) - h) / 2 wndMain = CreateWindow(" Coalition Legions Game Commander", x, y, w, h,0,17) ChildPanel = CreatePanel(2,20,280,220,wndMain,0) MainSlid = CreateSlider(275+1,10,15,228,wndMain,2) SaveBut = CreateButton("Save",5,250,60,20,wndMain) ExitBut = CreateButton("Exit",70,250,60,20,wndMain) lab_Gamma = CreateLabel("Gamma :",15,14,60,15,ChildPanel) txt_Gamma = CreateTextField( 150,8,100,20,ChildPanel) CreatePanel(5,30,255,4,ChildPanel,1) ;CreatePanel(135,5,4,255,ChildPanel,1) CreateLabox("Edit",2,7,270,230,30,1,wndMain) Dim dat$(MAXLINES) ReadCFG = ReadFile ("dfv.cfg") linecount=0 If ReadCFG = 0 Then Notify "Unable to access the file needed!" End Else fileopen=True End If ;------------------------- ; READ While Not Eof(ReadCFG) linecount=linecount+1 dat$(linecount)=ReadLine(ReadCFG) If linecount=MAXLINES Exit Wend CloseFile ReadCFG Gamma_Num = dat$(15) ;------------------------ CreateTimer(60) quit=False Repeat WaitEvent() ; Close Window If EventID()=$803 If EventSource()=wndMain quit=True End If EndIf ; Always Ontop If EventID()=$4001 ActivateWindow wndMain SetGadgetText txt_Gamma,Gamma_Num EndIf ; If EventID()=$401 If EventSource()=SaveBut ; CLICK SAVE BUTTON If fileopen=True ReadCFG=WriteFile("gamefile.txt") For i=1 To linecount WriteLine ReadCFG,dat$(i) Next CloseFile ReadCFG EndIf EndIf If EventSource()=ExitBut ; CLICK EXIT BUTTON quit=True EndIf EndIf Until quit ; LABOX CREATION CODE Function CreateLabox(b_text$,b_x,b_y,b_width,b_height,lab_width,lab_style,b_parent) CreatePanel( b_x, b_y, b_width+3, 4, b_parent, 1) ; Top CreatePanel( b_x, b_y+2, 4, b_height, b_parent, 1) ; Left CreatePanel( b_x, b_y + b_height, b_width+4, 4, b_parent, 1) ; Bottom CreatePanel( b_x + b_width, b_y, 4, b_height+3, b_parent, 1) ; Right CreateLabel( b_text$, b_x+10, b_y-6, lab_width, 16, b_parent, lab_style) ; Text End Function |
| ||
You are setting Gamma_Num to dat$(15). dat$(15) = "gamma=0.5" so converting the string "gamma=0.5" to a number may give you wierd results. You really should set Gamma_Num to equal only the numeral part of dat$(15). To do this you will need to subtract the beginning of the string from it. Something like: dat$(15) = right$(dat$(15), Len(dat$(15) - 6) BTW, I'm at work, so if I didnt' write that line correctly, you'll have to figure it out. |
| ||
wow thanks WolRon ur a really helpful tool ;) (possitive comment) I think I need to learn what right$, length means and does... as I don't know theses command... however... if i dont put the good value... like if theres 4 numbers... and its changed to 6 numbers how can I know how many numbers there is for the gamma value? I dont know if u understand what I mean? |
| ||
you just to find the difference between what the Len$ command returns and where the = is. Look up Len$ and Instr. |
| ||
dat$(15) = right$(dat$(15), Len(dat$(15) - 6) The word "gamma" is 5 characters long and the equal sign (=) is one more, so if we subtract 6 characters from the left side of the string, we will only be left with the numeral part. If the equal sign was not in the 6th position (say, it was in the 7th position (i.e. a space between gamma and the equal sign)) then what I wrote above wouldn't work. It's just a quick and dirty method. If you wanted to know for sure that you only have the numeral part of the string remaining you may have to parse through the line to find which parts you do/don't need. |
| ||
if you have multiple lines where you wan't to change values you can use a procedure that can extract all values of all strings passed to the only req is that the separator is the symbol '='.more generic than using a fixed lenght :) here's a little exemple Graphics 800,600 Global Return_field$ value#=extractnumber("gamma_num=0.05") Text 0,l,"text : "+return_field$:l=l+10 Text 0,l,"value: "+value#:l=l+10 value#=extractnumber("poly_count=555") Text 0,l,"text : "+return_field$:l=l+10 Text 0,l,"value: "+value#:l=l+10 value#=extractnumber("what do you expect to see here =99980.05") Text 0,l,"text : "+return_field$:l=l+10 Text 0,l,"value: "+value#:l=l+10 value#=extractnumber("another exemple=500.99") Text 0,l,"text : "+return_field$:l=l+10 Text 0,l,"value: "+value#:l=l+10 value#=extractnumber("is this helpfull??=4.67") Text 0,l,"text : "+return_field$:l=l+10 Text 0,l,"value: "+value#:l=l+10 Flip WaitKey End Function extractnumber#(st$) Repeat b$=Right$(st$,1)+b$ st$=Left$(st$,Len(st$)-1) Until (Right$(st$,1)="=") Or (Len(st$)=0) Return_field$=Left$(st$,Len(st$)-1) val#=b$ Return val# End Function |
| ||
Just capping off what WolRon and soja have said, I suggest using this: dat$(15) = Trim$(Mid$(dat$(15),Instr(dat$(15),"=")+1)) This is able to be used for any other values you may have in the future. Random Eg: "Window Mode=1" It also works, regardless of formatting (with spaces). Eg: " Gamma = 2.9 " will still return 2.9 [Edit - Or the above (ford escort) (had left comp then replied later)] |