Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bug bei TYPE?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Linux-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
airman



Anmeldungsdatum: 01.12.2006
Beiträge: 5
Wohnort: SH

BeitragVerfasst am: 01.12.2006, 09:47    Titel: Bug bei TYPE? Antworten mit Zitat

Hallo...

ich bin dabei, ein seit Jahren laufendes QB-Prog auf FB zu "portieren", um es unter Linux laufen zu lassen (auf Konsole, aber mit mehr als 80 Spalten...).

Dabei habe ich ein Feld mit TYPE definiert (alles String-Elemente, insgesamt 128 Byte lang). Die speichere ich dann in einer Random-Datei.

Unter WinXP läuft das auch, aber unter Linux werden die einzelnen Elemente nach GET nicht wieder richtig zugeordnet (hat wahrscheinlich gar nichts mit PUT/GET zu tun). Das erste ist noch richtig, aber dann wird immer ein Byte ausgelassen.

Erstes Element, 1 Byte lang -> richtig, erstes Byte aus dem Feld.
Zweites Element, 3 Byte lang -> FB nimmt statt Byte 2-4 Byte 3-5
Drittes Element, 6 Byte lang -> FB nimmt statt Byte 5-10 Byte 7-12
usw

Hat jemand das schon mal gehabt? Ist an meiner Maschine (VIA Mini ITX mit installiertem Knoppix 4.02) oder Installation was falsch?

Andreas
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 01.12.2006, 10:14    Titel: Antworten mit Zitat

Hmmm ich hab hier unter Windows 2000 ein ähnliches Problem... manchmal fehlt von den eingetragenen Daten was... mein Code:
Code:
Type T_Question
   
    QuestionText      As String * 80
   
    Answer1           As String * 38
    Answer2           As String * 38
    Answer3           As String * 38
    Answer4           As String * 38
   
    RightAnswer       As Integer
   
End Type

#Include "fbgfx.bi"
#Define Ae Chr(132)
#Define Ue Chr(129)
#Define Oe Chr(148)
#Define True  1
#Define False 0

Dim Question            As Integer
Dim Questions           As Integer
Dim ProgExit            As Integer
Dim Fragen              As Integer
Dim QuestionPool(1000)  As T_Question
Dim Key                 As String

Open "Fragen.dat" for binary as #1
get #1, 0, fragen
get #1, 0 + sizeof(fragen), questionpool()
close #1

Do
    fragen = 0
    do
        fragen += 1
    loop until questionpool(fragen).QuestionText = ""
    Cls
    Print "Frageneditor"
    Print string(16,chr(196))
    Print "Aktuelle Frage: "+Str(question+1)+" / 1000   "
    Print
    Print questionpool(question).QuestionText
    Print
    Locate 7,1
    Print "1."+QuestionPool(question).Answer1
    Locate 7,40
    Print "2."+QuestionPool(question).Answer2
    Locate 8,1
    Print "3."+QuestionPool(question).Answer3
    Locate 8,40
    Print "4."+QuestionPool(question).Answer4
    Print
    Print "Richtige Antwort: " + Str(QuestionPool(Question).Rightanswer+1)
    Print "Zuletzt definierte Frage: " + str(Fragen)
    Print "Tastenbelegung:"
    Print "F   - Frage bearbeiten"
    Print "1   - Antwort 1 bearbeiten"
    Print "2   - Antwort 2 bearbeiten"
    Print "3   - Antwort 3 bearbeiten"
    Print "4   - Antwort 4 bearbeiten"
    Print "R   - Richtige Antwort bearbeiten"
    Print "N   - N"+Ae+"chste Frage"
    Print "Z   - zuletzt bearbeitete Frage"
    Print "L   - Frage l"+oe+"schen"
    Print "ESC - Beenden und speichern"
   
    Sleep
   
    key = Inkey
   
    If Multikey(sc_escape) Then
        progexit = true
    elseif Key = "n" then
        Question += 1
    elseif Key = "z" then
        Question -= 1
        if question < 0 then question = 0
    Elseif Key = "f" Then
        Cls
        Print "Frage "+Str(Question+1)+" eingeben:"
        Input questionpool(question).QuestionText
    Elseif Key = "1" Then
        Cls
        Print "Antwort 1 auf Frage "+Str(Question+1)+" eingeben:"
        Input questionpool(question).Answer1
    Elseif Key = "2" Then
        Cls
        Print "Antwort 2 auf Frage "+Str(Question+1)+" eingeben:"
        Input questionpool(question).Answer2
    Elseif Key = "3" Then
        Cls
        Print "Antwort 3 auf Frage "+Str(Question+1)+" eingeben:"
        Input questionpool(question).Answer3
    Elseif Key = "4" Then
        Cls
        Print "Antwort 4 auf Frage "+Str(Question+1)+" eingeben:"
        Input questionpool(question).Answer4
    Elseif Key = "l" Then
        QuestionPool(question).Answer1 = ""
        QuestionPool(question).Answer2 = ""
        QuestionPool(question).Answer3 = ""
        QuestionPool(question).Answer4 = ""
        QuestionPool(Question).Rightanswer = 0
        questionpool(question).QuestionText = ""
    Elseif Key = "r" Then
        Cls
        Print "Welche Antwort is denn nu richtich"
        Print
        Print QuestionPool(Question).Questiontext
        Print "1."+QuestionPool(question).Answer1
        Print "2."+QuestionPool(question).Answer2
        Print "3."+QuestionPool(question).Answer3
        Print "4."+QuestionPool(question).Answer4
        Print
        Print "1 - 4 >"
        input QuestionPool(Question).Rightanswer
        if QuestionPool(Question).Rightanswer < 1 or QuestionPool(Question).Rightanswer > 4 then
            Print "Eingabefehler!"
            Sleep 500
            QuestionPool(Question).Rightanswer = 1
        end if
        QuestionPool(Question).Rightanswer -= 1
    End If
Loop Until progexit

Open "Fragen.dat" for binary as #1
put #1, 0, fragen
put #1, 0 + sizeof(fragen), questionpool()
close #1

(ein Code für einen Frageneditor eines Quizgames á la Wer wird Millionär)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 01.12.2006, 16:04    Titel: Antworten mit Zitat

Schreib mal bei der Type anweisung "Type bla As bla Field=0".
Sollte gehen, teste einfach mal.
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
airman



Anmeldungsdatum: 01.12.2006
Beiträge: 5
Wohnort: SH

BeitragVerfasst am: 01.12.2006, 17:39    Titel: Antworten mit Zitat

programmierer hat Folgendes geschrieben:
Schreib mal bei der Type anweisung "Type bla As bla Field=0".

Ja, danke, probier ich mal. Bin aber wahrscheinlich erst Montag wieder an meiner Maschine. Ich werde berichten!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
airman



Anmeldungsdatum: 01.12.2006
Beiträge: 5
Wohnort: SH

BeitragVerfasst am: 02.12.2006, 18:36    Titel: Antworten mit Zitat

So habe ich das gemacht (ursprünglich ohne die FIELD-Option).

TYPE TypenName [FIELD = Zahl]
var1 [AS Datentyp]
[var2 [AS Datentyp] ]

Kz AS STRING * 6 ' Kennzeichen des Lfz
Lt AS STRING * 4 ' Typ des Lfz
Pi AS STRING * 16 ' Name des Piloten

[...]
END TYPE

Mit der FIELD-Option (verschiedene Werte von 0...über 10) hat sich nichts geändert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 02.12.2006, 18:51    Titel: Antworten mit Zitat

Hmm, also in der Referenz steht, das es nur Field =1/2/4 gibt, standard ist 4.
Lad deinen Code mal bitte irgendwo hoch ( http://rafb.net/paste/, http//nopaste.freebasic.de ) damit ich das bei mir testen kann. zwinkern
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 04.12.2006, 19:55    Titel: Antworten mit Zitat

Also witzig find ich, wenn man mehrmals den Wert in der Var abspeichert, dass er dann auch drin ist... ist auch in der Win-Version so. (Hinweis: Dieser Satz betrifft das in diesem Thread geschilderte Problem)

Großer FB-Bug oder RAM-Fehler?
Oder 'menschliches' (Programmierer) Versagen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 04.12.2006, 20:34    Titel: Antworten mit Zitat

Code:
Type blablablubb
    a As String*10
    b As Integer
    c As String*20
    d As Byte
End Type

Dim x As blablablubb
Dim neu As blablablubb

x.a = "1234567890"
x.b = 1234567890
x.c = "12345678909876543210"
x.d = 123

Open "test.fb_test" for Binary as #1

Put #1,0,x

Close #1

Open "test.fb_test" For Binary As #1

Get #1,0,neu

Print neu.a
Print neu.b
Print neu.c
Print neu.d

Close #1

Sleep
End


Geht das bei dir?
Bei mir läuft alles richtig.
Ausgabe:

Code:
1234567890
 1234567890
12345678909876543210
 123



Mfg
Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 04.12.2006, 20:39    Titel: Antworten mit Zitat

Klappt einwandfrei...

Ich hatte aber ein Array genommen, mit lauter fest definierten String, und da fehlte manchma die Hälfte... ich hab den src schon gepostet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 04.12.2006, 21:12    Titel: Antworten mit Zitat

Das Programm geht bei mir.
Anscheinend habt ihr eine alte FB Version.

Bitte mal die aktuelle CVS Version herunterladen, und damit compilieren.
Dann sollte es klappen zwinkern
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 04.12.2006, 21:13    Titel: Antworten mit Zitat

Ich hab die 0.15, 0.16 & 0.17...
Bei allen war das selbe Resultat... habs auf meinem PC noch nicht getestet (das Programm ist in der Schule entstanden)

-> Auslesen klappt, schreiben offenbar nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
airman



Anmeldungsdatum: 01.12.2006
Beiträge: 5
Wohnort: SH

BeitragVerfasst am: 05.12.2006, 16:30    Titel: Antworten mit Zitat

FB verhält sich in diesem Fall offenbar unter Linux anders als unter Win.

Ich hatte das Prog unter Win bearbeitet, unter Linux neu compiliert und alle zu dem Prog gehörenden Dateien mit rüber kopiert (auch die Random-Datei).

QB45 und FB (unter Win) packen die mit TYPE definierten Einzelelemente unmittelbar hintereinander in die Datei. FB (unter Linux) packt jeweils ein nul-Byte ans Ende eines jeden (String-) Elements. Das macht ja nichts, solange man nur unter Win oder nur unter Linux arbeitet, aber man kann die (Random-) Dateien eben leider nicht wechselweise unter beiden Plattformen bearbeiten.

Ich denke mal, das ist so von den FB-Entwicklern nicht beabsichtigt gewesen. Also doch ein Bug! Wer meldet den?

Grüße
Andreas
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 05.12.2006, 21:39    Titel: Antworten mit Zitat

Im Zweifelsfalle der, der ihn entdeckt hat... zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
airman



Anmeldungsdatum: 01.12.2006
Beiträge: 5
Wohnort: SH

BeitragVerfasst am: 06.12.2006, 01:04    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
Im Zweifelsfalle der, der ihn entdeckt hat... zwinkern

is scho recht... zwinkern
Ich dachte nur, wenn das schon jemand gemacht hätte...

Dann wende ich mich demnächst mal an den Bug-Report.

Grüße
Andreas
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Linux-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz