Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
airman
Anmeldungsdatum: 01.12.2006 Beiträge: 5 Wohnort: SH
|
Verfasst am: 01.12.2006, 10:47 Titel: Bug bei TYPE? |
|
|
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 |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 01.12.2006, 11:14 Titel: |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 01.12.2006, 17:04 Titel: |
|
|
Schreib mal bei der Type anweisung "Type bla As bla Field=0".
Sollte gehen, teste einfach mal. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
airman
Anmeldungsdatum: 01.12.2006 Beiträge: 5 Wohnort: SH
|
Verfasst am: 01.12.2006, 18:39 Titel: |
|
|
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 |
|
|
airman
Anmeldungsdatum: 01.12.2006 Beiträge: 5 Wohnort: SH
|
Verfasst am: 02.12.2006, 19:36 Titel: |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 02.12.2006, 19:51 Titel: |
|
|
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. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 04.12.2006, 20:55 Titel: |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 04.12.2006, 21:34 Titel: |
|
|
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 |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 04.12.2006, 21:39 Titel: |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 04.12.2006, 22:12 Titel: |
|
|
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 _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 04.12.2006, 22:13 Titel: |
|
|
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 |
|
|
airman
Anmeldungsdatum: 01.12.2006 Beiträge: 5 Wohnort: SH
|
Verfasst am: 05.12.2006, 17:30 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 05.12.2006, 22:39 Titel: |
|
|
Im Zweifelsfalle der, der ihn entdeckt hat... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
airman
Anmeldungsdatum: 01.12.2006 Beiträge: 5 Wohnort: SH
|
Verfasst am: 06.12.2006, 02:04 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Im Zweifelsfalle der, der ihn entdeckt hat... |
is scho recht...
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 |
|
|
|