GLBasic forum

Main forum => Bug Reports => Topic started by: D2O on 2009-Feb-09

Title: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-09
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!?


Code (glbasic) Select

// --------------------------------- //
// 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","")


Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: Kitty Hello on 2009-Feb-09
Bei mir geht das (aktuelle Version).
Was genau geht nicht?
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-09
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)
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: Kitty Hello on 2009-Feb-09
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.
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-09
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.
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: Kitty Hello on 2009-Feb-09
Schreib Dir mal die LEN() von den Wörtern raus. Bei mir geht das alles wie es sein soll :s
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-10
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.
Code (glbasic) Select

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.

Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: Kitty Hello on 2009-Feb-10
Ah! Das bringt mich weiter.
Welches Betriebssystem?
Was passiert, wenn Du die Werte mit DEBUG rausschreibst?
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-10
Debug ausgabe:
Quote

../Cache/cache.ini
../System/
../Textures/
../Staticmeshes/
../Maps/
../Animations/
../Sounds/
../Cache/


Meine Specs siehe sig.
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-10
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.
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: Kitty Hello on 2009-Feb-10
Hm. Evtl. ist's im nächsten Update behoben. Bei mir geht's nämlich. Ich schu aber nochmal über den Code drüber.
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-22
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.

Code (glbasic) Select

@_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:

Code (glbasic) Select

// --------------------------------- //
// 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

Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-23
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.
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: Kitty Hello on 2009-Feb-23
Bei mir steht in log.txt
Code (glbasic) Select

1
2
3
4
5
6
7
8
9
0

Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-23
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)

Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: Kitty Hello on 2009-Feb-24
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?
Title: Re: Falsches auslesen von ini dateien, wenn Dim gesetzt wird.
Post by: D2O on 2009-Feb-24
Arghhhhhhhhhhhhhhhhhhhhhhhhhhhh :puke:


Ganz grober fehler von mir!
Ich benutze in jeder function das hier:
Code (glbasic) Select
OPENFILE([b]0[/b],.....)

Bei nutzung beider funktionen wird die letzte geöffnete Datei ausgelesen!

:)
Danke Trotzdem  :good: