So, ich habe das ganze jetzt hin und her probiert und bin zum entschuss gekommen das hier ein
Käfer haust.
Die ini wird nicht korrekt ausgelesen.
Wenn man die Arrays auskommentiert funktioniert das auslesen.
Bei einem Dim gehts auch noch, aber sobald ein weiteres Dim dazukommt werden beim Auslesen zeilen ausgelasen,
bzw. nicht an die Variablen übergeben.
Es spielt auch keine rolle ob die Array's vor oder nach der ini abarbeitung gestellt werden, nur welche Variable einen wert bekommt ändert sich!?
// --------------------------------- //
// Project: bug
// Start: Monday, February 09, 2009
// IDE Version: 6.156
GLOBAL mycache$
GLOBAL mysystem$
GLOBAL mytextures$
GLOBAL mystaticmeshes$
GLOBAL mymaps$
GLOBAL myanimations$
GLOBAL mysounds$
GLOBAL cachepath$
GLOBAL sysini$ = "sys.ini"
DIM a1$[0]
DIM a2$[0] /// einfach mal aukommentieren oder nach der Ini verarbeitung setzen
IF DOESFILEEXIST(sysini$) = 0
KILLFILE sysini$//zur sicherheit
INIOPEN sysini$ // ini öffnen und auslesen
INIPUT "cache","mycache","../Cache/cache.ini"
INIPUT "maps","mymaps","../Maps/"
INIPUT "system","mysystem","../System/"
INIPUT "staticmeshes","mystaticmeshes","../Staticmeshes/"
INIPUT "sounds","mysounds","../Sounds/"
INIPUT "textures","mytextures","../Textures/"
INIPUT "animations","myanimations","../Animations/"
INIOPEN ""
INIOPEN sysini$ // ini öffnen und auslesen
mycache$ = INIGET$("cache","mycache")
mymaps$ = INIGET$("maps","mymaps")
mysystem$ = INIGET$("system","mysystem")
mystaticmeshes$ = INIGET$("staticmeshes","mystaticmeshes")
mysounds$ = INIGET$("sounds","mysounds")
mytextures$ = INIGET$("textures","mytextures")
myanimations$ = INIGET$("animations","myanimations")
INIOPEN ""
ELSE
INIOPEN sysini$ // ini öffnen und auslesen
mycache$ = INIGET$("cache","mycache")
mymaps$ = INIGET$("maps","mymaps")
mysystem$ = INIGET$("system","mysystem")
mystaticmeshes$ = INIGET$("staticmeshes","mystaticmeshes")
mysounds$ = INIGET$("sounds","mysounds")
mytextures$ = INIGET$("textures","mytextures")
myanimations$ = INIGET$("animations","myanimations")
INIOPEN ""
ENDIF
cachepath$ = REPLACE$(mycache$,"cache.ini","")
Bei mir geht das (aktuelle Version).
Was genau geht nicht?
Hi Gernot,
hier mal ein kleines Flash Video wo zeigt was nicht Funktioniert.
http://rapidshare.com/files/195916908/bug.zip (http://rapidshare.com/files/195916908/bug.zip)
Ich hab's kapiert.
Das tritt scheinbar nur auf, weil Deine Inhalte läner sind.
Schick doch bitte Deine .ini Datei mal.
k.A. ob das ein Debuggerfehler ist, oder ein echter. Ich befürchte Letzteres.
Moin moin :)
hier mal die ini wie ich sie auf der platte habe:
Rechtsklick->Speichern unter.
http://www.deuteriumoxid.com/glbasic/sys.ini (http://www.deuteriumoxid.com/glbasic/sys.ini)
Brauchts Du eigendlich nicht, da eh einer erstellt wird wenn keine vorhanden ist.
Aber hier ist mir gerade aufgefallen:
Die erstellte ini wird korrekt erstellt, alle werte sind enthalten.
Nach dem erstellen wird sie ja gleich wieder ausgelesen und die werte werden den Variablen zugewiesen.
Auch hier besteht das problem, und beim zweiten testlauf wurden auch hier teilweise keine werte übergeben,
Obwohl KEIN array aktive war :S :puke:
So bis übermorgen, jetzt gehts zur Arbeit und mogen Mittag haben wir eine Mitarbeiterbesprechung = nach der maloche gleich wieder ins Bett.
Bis dann.
Schreib Dir mal die LEN() von den Wörtern raus. Bei mir geht das alles wie es sein soll :s
Moin moin,
nun bin ich ganz verwirrt :S
Ok, das program ansich scheint richtig zu arbeiten.
Ich habe mir die Werte mit Print und mit writeline ausgeben lassen.
OPENFILE(1,"ausgabe.txt",FALSE)
WRITELINE 1,mycache$+" LEN = "+LEN(mycache$)
WRITELINE 1,mymaps$+" LEN = "+LEN(mymaps$)
WRITELINE 1,mysystem$+" LEN = "+ LEN(mysystem$)
WRITELINE 1,mystaticmeshes$+" LEN = "+LEN(mystaticmeshes$)
WRITELINE 1,mysounds$+" LEN = "+LEN(mysounds$)
WRITELINE 1,mytextures$+" LEN = "+LEN(mytextures$)
WRITELINE 1,myanimations$+" LEN = "+LEN(myanimations$)
WRITELINE 1,cachepath$+" LEN = "+LEN(cachepath$)
CLOSEFILE 1
PRINT mycache$,10,10
PRINT mysystem$,10,30
PRINT mytextures$,10,50
PRINT mystaticmeshes$,10,70
PRINT mymaps$,10,90
PRINT myanimations$,10,110
PRINT mysounds$,10,130
PRINT cachepath$,10,150
PRINT LEN(mycache$),10,170
PRINT LEN(mysystem$),10,190
PRINT LEN(mytextures$),10,210
PRINT LEN(mystaticmeshes$),10,230
PRINT LEN(mymaps$),10,250
PRINT LEN(myanimations$),10,270
PRINT LEN(mysounds$),10,290
PRINT LEN(cachepath$),10,310
Und hier kommt alles richtig an:
Ausgabe:
Quote
../Cache/cache.ini LEN = 18
../Maps/ LEN = 8
../System/ LEN = 10
../Staticmeshes/ LEN = 16
../Sounds/ LEN = 10
../Textures/ LEN = 12
../Animations/ LEN = 14
../Cache/ LEN = 9
Unabhängig von den Arrays.
Nur die Debugausgabe in der IDE ist immer noch falsch.
Scheint sich hier um den Debugger oder der IDE selber zu handeln.
Ah! Das bringt mich weiter.
Welches Betriebssystem?
Was passiert, wenn Du die Werte mit DEBUG rausschreibst?
Debug ausgabe:
Quote
../Cache/cache.ini
../System/
../Textures/
../Staticmeshes/
../Maps/
../Animations/
../Sounds/
../Cache/
Meine Specs siehe sig.
So, bins nochmal:
Dam, sollte schon lange ins Bett, gähhnnnnn, zzzzz.
Gernot,
ich habe das ganze unter Vista Sp1 bei mir mit der GLB version 6.147 und mit dem Update auf die Aktuelle Version getestet.
Hier verhält sich das ganze genaus so wie auf meinem Standard System mit XP.
Es scheint also nicht OS spezifisch zu sein.
Hm. Evtl. ist's im nächsten Update behoben. Bei mir geht's nämlich. Ich schu aber nochmal über den Code drüber.
So,
bins nochmal.
Ich bin nun kurz davor Nackt duchs Dorf zu laufen :(
Irgend etwas stimmt immer noch nicht.
Ich hab das ganze nochmal neu angefangen und stosse wieder auf das gleiche problem.
Die Arrays werden nicht richtig gefüllt!
Hier mal ein ausschnit vom Code:
So wie er im moment ist, wird am ende der While schleife eine Txt erzeugt
die mir den inhalt von utini$[] zur überprüfung hinein schreibt.
Wird nun die function openlog() auskommentiert.
Wird in der Txt nur wirres hinein geschrieben.
Wird Kommentiert gehts wieder.
Auch wenn ich mir das Array log$[] aus der Function openlog() in die Txt ausgeben lasse, steht nur bockmist drin.
Die Cache.ini und die log.txt wo ausgelesen werden sind im data Ordner.
Hier gibts mal den gesamten Projekt Ordner.
http://www.deuteriumoxid.com/glbasic/Cachemanager_V4.00.zip (http://www.deuteriumoxid.com/glbasic/Cachemanager_V4.00.zip)
Bitte schaut mal ein anderer ob das bei im genauso ist, ich bin nun langsam am verzweifeln.
@_Main_start:
//-------------------
WHILE checkvar <> 3
KeyHitUpdate()
SETFONT font1
textscrollup(members$[],winx,winy,5,50,50)
DRAWRECT 0,0,winx,320,RGB(0x00, 0x00, 0x00)
bb_poly(bb,10)
IF KeyHit(57) = 2 THEN dip1 = bNOT(dip1)
IF dip1 <> FALSE THEN PRINT getfps()+" Frames",400,5
checkvar = readutini()
// openlog() ////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
SHOWSCREEN
// SLEEP 200
WEND
//------------------
@_Main_end:
OPENFILE(0,"test.txt",FALSE)
FOR checkvar = 0 TO LEN(utini$[])-1
WRITELINE 0,utini$[checkvar]
NEXT
CLOSEFILE 0
Edit:///////////////////////////////////////////7
Hab hier noch das include dazu:
// --------------------------------- //
// Project: Template
// Start: Sunday, February 22, 2009
// IDE Version: 6.171
FUNCTION KeyHitUpdate:
GLOBAL gKeyDown[], gKeyState[]
LOCAL k
LOCAL i
STATIC a
// First Time call/ zum ersten Mal hier
//IF BOUNDS(gKeyDown[],0)=0
IF a = 0
DIM gKeyDown[256]
DIM gKeyState[256]
a =1
ENDIF
// For each key / für jede Taste
FOR i=0 TO 255
k = KEY(i)
// Key is pressed / Taste ist gedrückt
IF k
IF gKeyDown[i]
gKeyState[i]=1
ELSE
gKeyDown[i]=1
gKeyState[i]=2
ENDIF
ELSE
// Key is not pressed / Taste nicht gedrückt
// Has key been pressed before?
// War die Taste gedrückt?
IF gKeyDown[i]
gKeyDown[i] = 0
gKeyState[i] = -1
ELSE
gKeyState[i]=0
ENDIF
ENDIF
NEXT
ENDFUNCTION
// 0 = not pressed / nicht gedrückt
// 2 = just pressed / gerade runtergedrückt
// 1 = pressed / gedrückt (gehalten)
// -1 = release event / wieder losgelassen
FUNCTION KeyHit: nkey
RETURN gKeyState[nkey]
ENDFUNCTION
FUNCTION getfps:
STATIC fps_time%,fps_counter%,fps%,fps_temp%
fps_time = GETTIMERALL()
fps_counter = fps_counter + 1
IF (fps_time-fps_temp)>1000
fps_temp = fps_time
fps = fps_counter
fps_counter = 0
ENDIF
RETURN fps
ENDFUNCTION
FUNCTION textscrollup: l_text$[], l_winx% = 640,l_winy% = 480,l_posx% = 10, l_posy% = 30,l_time% = 300
STATIC s_go%
LOCAL l_i
IF timer(l_time% ) = 1 THEN INC s_go,1
IF s_go > l_winy+((LEN(l_text$[])-1)*l_posy% )+2*l_posy% THEN s_go = 0
FOR l_i = 0 TO LEN(l_text$[])-1
PRINT l_text$[l_i],l_posx%,(l_winy+l_posy%) - (s_go- l_i * l_posy%)
NEXT
//DEBUG timer(l_time)+"\n"
ENDFUNCTION
FUNCTION textscrolldown: l_text$[], l_winx% = 640,l_winy% = 480,l_posx% = 10, l_posy% = 30,l_time% = 300
STATIC s_go%
LOCAL l_i
IF timer(l_time%) = 1 THEN INC s_go,1
IF s_go > l_winy% +(((LEN(l_text$[])-1)*l_posy%))+l_posy% THEN s_go = 0
FOR l_i = 0 TO LEN(l_text$[])-1
PRINT l_text$[l_i],l_posx%,((l_posy%-l_posy%*l_i)- 2* l_posy%) + s_go
NEXT
//DEBUG timer(l_time)+"\n"
ENDFUNCTION
FUNCTION timer: l_time%
STATIC l_temp AS Tmovetime
LOCAL l_out% = 0
l_temp.time = GETTIMERALL()
IF (l_temp.time - l_temp.temp) > l_time
l_out = 1
l_temp.temp = l_temp.time
ENDIF
RETURN l_out
ENDFUNCTION
TYPE Tmovetime
time%
temp% = 100
ENDTYPE
So, noch ein bisschen info.
Werden beide Functionen aufgerufen und utini$[] am schluss in die Txt geschrieben,
stehen bei mir folgende werte drin:
1
3
5
7
9
Bei der ausgabe von log$[] steht das hier drin:
2
4
6
8
0
Also immer in zweier schritten, wie als ob ein for....to...step 2 ablaufen würde und utini$[] mir den werten der "data/log.txt"
gefüllt überschrieben wird.
Wird jeweils eine der funktionen openlog() oder readutini() auskommentiert und dem entsprechend in der Txt ausgegeben,
stimmen alle werte wieder!
Hier ist auch das komische verhalten beim Debuggen rechts in dem Tab "Debug" zu sehen, wo nicht alles werte ins Array übernommen werden :(
Ich könnte das problem umgehen, "Workaround" in dem ich die zeilen lese und gleich schreibe/Abarbeite, das möchte ich aber nicht.
Ich möchte gerne alle werte in den Arrays halten um sie für spätere "Arbeiten" schnell und flexible nutzen zu können.
Bei mir steht in log.txt
1
2
3
4
5
6
7
8
9
0
Gernot, mach mich nicht schwach.
Ich dreh hier fast einen film:(
Es kann doch nicht sein das das nur auf meinem Rechner so ist.
Dann müsste ja jede andere Anwendung auch probleme machen.
Ich teste es mal bei mir unter Vista.
Edit://
Also unter Vista habe ich das gleiche Problem!
Ich habe unter XP eben ein kleines DivX Filmchen gemacht, wo Du das ganze von Anfangan siehst.
Ich lades es gerade hoch, noch ein paar minütchen :)
Edit://
Hier der link zum Filmchen:
http://www.deuteriumoxid.com/glbasic/glbasic_array.zip (http://www.deuteriumoxid.com/glbasic/glbasic_array.zip)
Ich schau's mir später mal an. Jetzt erstmal schlafen :bed:
[edit]
die STATIC _counter hast Du in jeder funktion drin!!!
die ist aber je funktion unabhängig!
Wenn Du da entweder ein GLOBAL draus machst, oder mit DIMPUSH arbeitest, geht's.
Ist das Problem klar?
Arghhhhhhhhhhhhhhhhhhhhhhhhhhhh :puke:
Ganz grober fehler von mir!
Ich benutze in jeder function das hier:
OPENFILE([b]0[/b],.....)
Bei nutzung beider funktionen wird die letzte geöffnete Datei ausgelesen!
:)
Danke Trotzdem :good: