Seite 1 von 1

Problem mit dem Auslesen einer Textdatei

Verfasst: 08.10.2005 20:53
von Rubiko
also, zum ersten: hab mich lange nimmer mit pb beschäftigt...
aufjedenfall wollen ein freund und ich ein quiz zu einen refferat machen, in geographie über Tschechien

naja, hier is erstmal der code vom prototyp:

Code: Alles auswählen

Enumeration
  #window_1
  #gadget_1
  #gadget_2
  #gadget_3
  #gadget_4
  #gadget_5
  #Font1
  #file1
EndEnumeration


FontID = LoadFont(#Font1, "Comic Sans MS", 11, #PB_Font_Italic)
If OpenWindow(#window_1, 0, 0, 360, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Quiz")
  
  If CreateGadgetList(WindowID())
    TextGadget(#gadget_1, 10, 10, 50, 25, "Frage1")
    SetGadgetFont(#gadget_1, FontID)
    ButtonGadget(#gadget_2, 50, 100, 80, 25, "Antwort1")
    ButtonGadget(#gadget_3, 50, 160, 80, 25, "Antwort2")
    ButtonGadget(#gadget_4, 200, 100, 80, 25, "Antwort3")
    ButtonGadget(#gadget_5, 200, 160, 80, 25, "Antwort4")
  EndIf
  
   Repeat 
    EventID = WindowEvent()
        
    Select EventID
      
      Case #PB_Event_Gadget

        Select EventGadgetID()
          
          Case #gadget_2
            MessageRequester("","richtig!")
            
          Case #gadget_3
            MessageRequester("","falsch!")
            
          Case #gadget_4
            MessageRequester("","falsch!")
            
          Case #gadget_5
            MessageRequester("","falsch!")
        EndSelect
        
    EndSelect
  
  Until EventID = #PB_Event_CloseWindow
  

EndIf
die fragen wollte ich aus einer textdatei auslesen:

Code: Alles auswählen

    ReadFile(#file1, "fragen.txt")
    While Eof(#file1) = 0
      strZeile$ = ReadString()
    Wend
also wird in der variable "strzeile" der erste string, bis zum letzten gespeichert...soweit so gut
nur wie will ich jetzt "strzeile" im textgadget ganz oben im code verwenden? das klappt bei mir nicht (von der reihenfolge her vermut ich)

aber wie soll ich das jetzt anstellen?

Rubiko

Verfasst: 08.10.2005 22:11
von Franky
Hi Rubiko

Zuerstmal: Nein, es wird nicht der Erste string bis zum letzten in strzeile gespeichert, da müsstest du schreiben:

Code: Alles auswählen

strZeile$ =strZeile+ ReadString()
Am besten wäre es allerdings, wenn du die Fragen in eine LinkedList einliest, eine Spontane Idee wäre auch, dass du die Datei so aufbaust:

Frage.s
Antwort[4].s
loesung.b

Dann nimmst du genau das auch als Structure, füllst diese beim Einlesen und hast so alles zusammen.


Dein Rätsel, wie es momentan ist wäre zu einfach (die Finden irgendwann raus, dass immer Antwort 1 richtig ist ;)

Ein Programm zu schreiben, dass die Datei erstellt oder mit dem man Fragen hinzufügt ist ja ganz schnell gemacht ;)

Verfasst: 03.01.2006 23:50
von Rubiko
(wieder mal ein paar monate pb coding inakvitität, schande über mich^^, naja mitn refferat hatte ich noch zeit)
der thread ist alt, ich weiß... aber finds besser den wieder hochzukriegen anstatt nen komplett neuen aufzumachen

so, nach 2 stunden hilfe lesen, kapiere ich endlich wie linked lists funktionieren(wow^^)

Code: Alles auswählen

Enumeration
  #window_1
  #gadget_1
  #gadget_2
  #gadget_3
  #gadget_4
  #gadget_5
  #Font1
EndEnumeration

Structure Fragen
  Frage.s
  Antwort.s[4]
  Loesung.b
EndStructure
  
NewList Fragen.Fragen() 
  
AddElement(Fragen()) 
Fragen()\Frage = "Frage1"
Fragen()\Antwort[0] = "Antwort1"
Fragen()\Antwort[1] = "Antwort2"
Fragen()\Antwort[2] = "Antwort2"
Fragen()\Antwort[3] = "Antwort4"
Fragen()\Loesung = 1



FontID = LoadFont(#Font1, "Comic Sans MS", 11, #PB_Font_Italic)
If OpenWindow(#window_1, 0, 0, 360, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Quiz")
  FirstElement(Fragen())
  If CreateGadgetList(WindowID())
    TextGadget(#gadget_1, 10, 10, 50, 25, Fragen()\Frage)
    SetGadgetFont(#gadget_1, FontID)

    ButtonGadget(#gadget_2, 50, 100, 80, 25, Fragen()\Antwort[0])
    ButtonGadget(#gadget_3, 50, 160, 80, 25, Fragen()\Antwort[1])
    ButtonGadget(#gadget_4, 200, 100, 80, 25, Fragen()\Antwort[2])
    ButtonGadget(#gadget_5, 200, 160, 80, 25, Fragen()\Antwort[3])
  EndIf
  
  Repeat
    EventID = WindowEvent()
    
    Select EventID
      
      Case #PB_Event_Gadget
        
        Select EventGadgetID()
          
          Case #gadget_2
            MessageRequester("","falsch!")
            
          Case #gadget_3
            MessageRequester("","falsch!")
            
          Case #gadget_4
            MessageRequester("","falsch!")
            
          Case #gadget_5
            MessageRequester("","falsch!")
        EndSelect
        
    EndSelect
    
  Until EventID = #PB_Event_CloseWindow
  
  
EndIf
benutze pb3,94 demo (wird sich mit meinen geburtstag ändern :) )

also, ich weiß, dass meine abfrage am ende vom code schwachsinn ist, aber so komme ich gleich zur frage: wie überprüfe ich jetzt, ob der angeklickte button identisch mit den linked list element für die lösung ist? (in den fall 1)

Rubiko

Verfasst: 04.01.2006 00:44
von t-master
Versuch mal das hier:

Code: Alles auswählen

Enumeration 
  #window_1 
  #gadget_1 
  #gadget_2 =11
  #gadget_3 
  #gadget_4 
  #gadget_5 
  #Font1 
EndEnumeration 

Structure Fragen 
  Frage.s 
  Antwort.s[4] 
  Loesung.b 
EndStructure 
  
NewList Fragen.Fragen() 
  
AddElement(Fragen()) 
Fragen()\Frage = "Frage1" 
Fragen()\Antwort[0] = "Antwort1" 
Fragen()\Antwort[1] = "Antwort2" 
Fragen()\Antwort[2] = "Antwort3" 
Fragen()\Antwort[3] = "Antwort4" 
Fragen()\Loesung = 1 



FontID = LoadFont(#Font1, "Comic Sans MS", 11, #PB_Font_Italic) 
If OpenWindow(#window_1, 0, 0, 360, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Quiz") 
  FirstElement(Fragen()) 
  If CreateGadgetList(WindowID()) 
    TextGadget(#gadget_1, 10, 10, 50, 25, Fragen()\Frage) 
    SetGadgetFont(#gadget_1, FontID) 
    
    ButtonGadget(#gadget_2, 50, 100, 80, 25, Fragen()\Antwort[0]) 
    ButtonGadget(#gadget_3, 50, 160, 80, 25, Fragen()\Antwort[1]) 
    ButtonGadget(#gadget_4, 200, 100, 80, 25, Fragen()\Antwort[2]) 
    ButtonGadget(#gadget_5, 200, 160, 80, 25, Fragen()\Antwort[3]) 
  EndIf 
  
  Repeat 
    EventID = WindowEvent() 
    
      Select EventID 
        
        Case #PB_Event_Gadget 
          
          If EventGadgetID() =>#gadget_2 And EventGadgetID() <=#gadget_5
            If EventGadgetID()-10 = Fragen()\Loesung
              MessageRequester("","Ja, das stimmt: Antwort "+Str(Fragen()\Loesung)+" ist richtig")
            Else
              MessageRequester("","Nein, Antwort "+Str(EventGadgetID()-10)+" ist falsch!")
            EndIf
          EndIf
            
            
        EndSelect 
        
      Until EventID = #PB_Event_CloseWindow 
      
      
    EndIf 

Verfasst: 04.01.2006 00:52
von Rubiko
funktioniert schonmal, vielen dank!

wäre nett wenn du mir jetzt noch eine zweite frage einbaust, dann versteh ich deine technik vielleicht besser

Rubiko

Verfasst: 04.01.2006 01:34
von t-master
Ich hoffe das hilft dir ein wenig weiter.
Habe einige zeilen kommentiert.

Code: Alles auswählen

Enumeration 
  #window_1 
  #gadget_1 
  #gadget_2 =11 ;Konstante definieren um den richtigen Antwortknopf herauszufinden
  #gadget_3 
  #gadget_4 
  #gadget_5 
  #Font1 
EndEnumeration 

Structure Fragen 
  Frage.s 
  Antwort.s[4] 
  Loesung.b 
EndStructure 
  
NewList Fragen.Fragen() 
  
AddElement(Fragen()) 
Fragen()\Frage = "Frage1" 
Fragen()\Antwort[0] = "Antwort1" 
Fragen()\Antwort[1] = "Antwort2" 
Fragen()\Antwort[2] = "Antwort3" 
Fragen()\Antwort[3] = "Antwort4" 
Fragen()\Loesung = 1 

AddElement(Fragen()) 
Fragen()\Frage = "NeueFrage1" 
Fragen()\Antwort[0] = "NeueAntwort1" 
Fragen()\Antwort[1] = "NeueAntwort2" 
Fragen()\Antwort[2] = "NeueAntwort3" 
Fragen()\Antwort[3] = "NeueAntwort4" 
Fragen()\Loesung = 2 


FontID = LoadFont(#Font1, "Comic Sans MS", 11, #PB_Font_Italic) 
If OpenWindow(#window_1, 0, 0, 360, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Quiz") 
  FirstElement(Fragen()) 
  If CreateGadgetList(WindowID()) 
    TextGadget(#gadget_1, 10, 10, 150, 25, Fragen()\Frage) 
    SetGadgetFont(#gadget_1, FontID) 
    
    ButtonGadget(#gadget_2, 50, 100, 80, 25, Fragen()\Antwort[0]) 
    ButtonGadget(#gadget_3, 50, 160, 80, 25, Fragen()\Antwort[1]) 
    ButtonGadget(#gadget_4, 200, 100, 80, 25, Fragen()\Antwort[2]) 
    ButtonGadget(#gadget_5, 200, 160, 80, 25, Fragen()\Antwort[3]) 
  EndIf 
  
  FirstElement(Fragen()) ;>>>Setzt die Linkedlist auf das erste Element
    Repeat 
      EventID = WindowEvent() 
      
      Select EventID 
        
        Case #PB_Event_Gadget 
          
          If EventGadgetID() =>#gadget_2 And EventGadgetID() <=#gadget_5 ;>>> Antwort  Gadget_2-5
            If EventGadgetID()-10 = Fragen()\Loesung ;>>> EventGadgetID()-10 egibt den Antwortknopf
              MessageRequester("","Ja, das stimmt: Antwort "+Str(Fragen()\Loesung)+" ist richtig") ;>>>Antwort richtig
              If NextElement(Fragen()) ;>>>nächste Frage aufrufen (ergibt (True=wahr wenn noch fragen da sind)
                SetGadgetText(#gadget_1,Fragen()\Frage) ;>>> neue Frage
                SetGadgetText(#gadget_2,Fragen()\Antwort[0]) ;>>> neue Antworten
                SetGadgetText(#gadget_3,Fragen()\Antwort[1])
                SetGadgetText(#gadget_4,Fragen()\Antwort[2]) 
                SetGadgetText(#gadget_5,Fragen()\Antwort[3])
               Else  ;keine frage mehr da , Programm beenden
                MessageRequester("Programmende","Keine Fragen mehr da")
                End  
              EndIf
            Else
              MessageRequester("","Nein, Antwort "+Str(EventGadgetID()-10)+" ist falsch!") ;>>> EventGadgetID()-10 egibt den Antwortknopf
            EndIf
          EndIf
          
          
      EndSelect 
      
    Until EventID = #PB_Event_CloseWindow 
    
    
  EndIf 
  

Verfasst: 04.01.2006 20:08
von Rubiko
danke... hat geklappt bis ich ein wenig weiter programmiert habe

Code: Alles auswählen

Enumeration
  #window_1
  #gadget_1
  #gadget_2 =11
  #gadget_3
  #gadget_4
  #gadget_5
  #gadget_6
  #Font1
EndEnumeration

Statistik.l = 0

Structure Fragen
  Frage.s
  Antwort.s[4]
  Loesung.b
EndStructure
 
NewList Fragen.Fragen()
 
AddElement(Fragen())
Fragen()\Frage = "Wer wurde Staatspresident als am 18. Oktober 1928 die Tschechische Slowakei gegründet wurde und wann starb er?"
Fragen()\Antwort[0] = "Tomáš Garrigue Masaryk, gest. 17. Oktober 1928"
Fragen()\Antwort[1] = "Angela Merkel, gest. leider noch nicht!"
Fragen()\Antwort[2] = "Tomáš Garrigue Masaryk, gest. 1937"
Fragen()\Antwort[3] = "George w. Bush, gest. noch nicht"
Fragen()\Loesung = 1

AddElement(Fragen())
Fragen()\Frage = "Wie viel Prozent der Landfläche Tschechiens bestehen aus Wald?"
Fragen()\Antwort[0] = "300%"
Fragen()\Antwort[1] = "30%"
Fragen()\Antwort[2] = "30,1%"
Fragen()\Antwort[3] = "10%"
Fragen()\Loesung = 1

AddElement(Fragen())
Fragen()\Frage = "Welches Lied ist die Tschechische Nationalhymne "
Fragen()\Antwort[0] = "Lied1"
Fragen()\Antwort[1] = "Lied2"
Fragen()\Antwort[2] = "Lied3"
Fragen()\Antwort[3] = "Lied4"
Fragen()\Loesung = 3




FontID = LoadFont(#Font1, "Comic Sans MS", 11, #PB_Font_Italic)
If OpenWindow(#window_1, 0, 0, 360, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Quiz")
  FirstElement(Fragen())
  If CreateGadgetList(WindowID())
    TextGadget(#gadget_1, 10, 10, 340, 58, Fragen()\Frage)
    SetGadgetFont(#gadget_1, FontID)
    
    ButtonGadget(#gadget_2, 50, 100, 120, 50, Fragen()\Antwort[0], #PB_Button_MultiLine)
    ButtonGadget(#gadget_3, 200, 100, 120, 50, Fragen()\Antwort[1], #PB_Button_MultiLine)
    ButtonGadget(#gadget_4, 50, 160, 120, 50, Fragen()\Antwort[2],#PB_Button_MultiLine)
    ButtonGadget(#gadget_5, 200, 160, 120, 50, Fragen()\Antwort[3],#PB_Button_MultiLine)
  EndIf
  
  FirstElement(Fragen())
  
    Repeat
      EventID = WindowEvent()
      
      Select EventID
        
        Case #PB_Event_Gadget
          
          If EventGadgetID() =>#gadget_2 And EventGadgetID() <=#gadget_5 ;>>> Antwort  Gadget_2-5
              If EventGadgetID()-10 = Fragen()\Loesung ;>>> EventGadgetID()-10 egibt den Antwortknopf 
                  Statistik = Statistik + 1
                Else
                  Statistik = Statistik + 0
                    If NextElement(Fragen()) ;>>>nächste Frage aufrufen (ergibt (True=wahr wenn noch fragen da sind)
                            SetGadgetText(#gadget_1,Fragen()\Frage) ;>>> neue Frage
                            SetGadgetText(#gadget_2,Fragen()\Antwort[0]) ;>>> neue Antworten
                            SetGadgetText(#gadget_3,Fragen()\Antwort[1])
                            SetGadgetText(#gadget_4,Fragen()\Antwort[2])
                            SetGadgetText(#gadget_5,Fragen()\Antwort[3])
                          Else
                            MessageRequester("","Ihre Statistik beträgt: "+Chr(13)+Chr(13)+Str(Statistik)+" richtige Antwort(en)")
                             
                            End 
                          EndIf 

                        Else 
                        
                          
                    
                          EndIf
                        EndIf
                      
                        
                        
                    EndSelect
                  
                  Until EventID = #PB_Event_CloseWindow
                  
                  
                EndIf 
aber warum geht bei antwort 1 und 2 jetzt jede antwort nur die richtige nicht?
wenn man was falsches auswählt soll nichts kommen, einfach nächste frage...
das ist bei frage 1 und 2 nicht der fall, bei 3 schon... bin etwas verwirrt
und wie stellt mans jetzt an, dass man an bestimmten fragen sachen einbauen kann, wie z.B bei frage 3, dass man verschiedene hymnen hört wenn man auf einen text klickt?

Danke im vorraus,

ein (etwas verwirrter)
Rubiko

Verfasst: 04.01.2006 20:32
von Macros
So gehts:

Code: Alles auswählen

Global statistik
Procedure NextQuestion()
  If NextElement(Fragen()) 
    SetGadgetText(#gadget_1,Fragen()\Frage) 
    SetGadgetText(#gadget_2,Fragen()\Antwort[0])
    SetGadgetText(#gadget_3,Fragen()\Antwort[1])
    SetGadgetText(#gadget_4,Fragen()\Antwort[2])
    SetGadgetText(#gadget_5,Fragen()\Antwort[3])
  Else
    MessageRequester("","Ihre Statistik beträgt: "+Chr(13)+Chr(13)+Str(Statistik)+" richtige Antwort(en)")
    
    End
  EndIf
  
EndProcedure

                            

FontID = LoadFont(#Font1, "Comic Sans MS", 11, #PB_Font_Italic)
If OpenWindow(#window_1, 0, 0, 360, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Quiz")
  FirstElement(Fragen())
  If CreateGadgetList(WindowID())
    TextGadget(#gadget_1, 10, 10, 340, 58, Fragen()\Frage)
    SetGadgetFont(#gadget_1, FontID)
    
    ButtonGadget(#gadget_2, 50, 100, 120, 50, Fragen()\Antwort[0], #PB_Button_MultiLine)
    ButtonGadget(#gadget_3, 200, 100, 120, 50, Fragen()\Antwort[1], #PB_Button_MultiLine)
    ButtonGadget(#gadget_4, 50, 160, 120, 50, Fragen()\Antwort[2],#PB_Button_MultiLine)
    ButtonGadget(#gadget_5, 200, 160, 120, 50, Fragen()\Antwort[3],#PB_Button_MultiLine)
  EndIf
  
  FirstElement(Fragen())
  
  Repeat
    EventID = WindowEvent()
    
    Select EventID
      
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #gadget_2
            If Fragen()\Loesung=1
              statistik = statistik + 1
            EndIf
            NextQuestion()
          Case #gadget_3
            If Fragen()\Loesung=2
              statistik = statistik + 1
            EndIf
            NextQuestion()
          Case #gadget_4
            If Fragen()\Loesung=3
              statistik = statistik + 1
            EndIf
            NextQuestion()
          Case #gadget_5
            If Fragen()\Loesung=4
              statistik = statistik + 1
            EndIf
            NextQuestion()
        EndSelect
        
    EndSelect
    
  Until EventID = #PB_Event_CloseWindow
  
  End
EndIf
wenn du Fragen hast, dann melde dich.