Linked List in Editorgadget auslesen

Anfängerfragen zum Programmieren mit PureBasic.
vimike
Beiträge: 14
Registriert: 27.06.2007 15:51

Linked List in Editorgadget auslesen

Beitrag von vimike »

Hallo!
Ich habe gerade mein erstes Programm, ein "Textadventure" fertig gekriegt. Eigentlich eher beta Status. Dabei habe ich auch versucht daten aus einer LinkedList vom Typ String in ein Editorgadget auszulesen Was ich auch versucht habe, es hat nicht geklappt. Weder die Hilfe, noch das Codearchiv haben etwas zu diesem Thema Hilfreiches geboten. Nun meine kurze und knappe Frage wie mache ich das?
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

In der regel gilt: mit einem Code bzw. dem entscheidenden Codeschnipsel kann man besser verstehen und helfen was dein Problem is...
Aber ich nehme an du willst Daten aus einer LinkedList in einem Editorgadget anzeigen, woran hakts denn?

In der Regel sollte das hier funktionieren

Code: Alles auswählen

ForEach LinkedList()
  AddGadgetItem(EditorGadgetID,1,LinkedList())
Next
(Ungetestet)
(\/) (°,,,°) (\/)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

KeyKon hat geschrieben:

Code: Alles auswählen

AddGadgetItem(EditorGadgetID,1,LinkedList())
mit -1 klappt's besser. Dann wird der neu hinzuzufügende Eintrag
automatisch an das Ende der ItemList des EditorGadgets gehängt:

Code: Alles auswählen

AddGadgetItem(EditorGadgetID,-1,LinkedList())
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

@KeyKon
wird dann nicht alles in die erste zeile gepackt?

naja fals jede element in einer anderen zeile soll sieht das ganze so aus...

Code: Alles auswählen

EditorGadget(0, x, y, Breite, Hoehe)
ForEach LinkedList()
  AddGadgetItem(0,ListIndex(LinkedList())  ,LinkedList() ) 
Next

[edit]
okay kiffi's wariante geht auch^^ er war auch etwas schneller als ich xD
Bild
vimike
Beiträge: 14
Registriert: 27.06.2007 15:51

Ächz

Beitrag von vimike »

Wie schnell das geht :shock: :shock: :shock: :shock: !
Ich sollte wohl etwas weiter ausholen. In die LinkedList vom Typ string wird mit den ReadfileBefehl(Eof(0)usw. Bsp. aus der Hilfe! eine Datei vom Typ Text eingelesen. Das auslesen in das Editorgadget soll auf einen Schlag oder Zeilenweise geschehen. Auf welche Weise es geht oder welche besser ist weiß ich nicht. Jedenfalls war das Höchste was ich erreichte das das Ende der Textdatei (ein paar Wörter zu sehen war). Aber auch nur weil ich mit den Memorybefehlen zusätzlich jedes Element extra einen Speicherbuffer zuwies.
Direkt hat das nie geklappt. Pro Element der Liste eine Textdatei. Mit Code kann ich leider nicht mehr dienen, da ich schon alles geändert habe. Der Tip mit der EditorgadgetID müsste eigentlich helfen. Aber wenn man statt der Linked List Selectelement angibt klappt das dann überhaupt?
Jedenfalls vielen Dank für die schnellen Antworten.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Magix-Soft <Kain> hat geschrieben:@KeyKon: wird dann nicht alles in die erste zeile gepackt?
Hab das "-" verschwitzt^^

@vimike:

Mit SelectElement() wählst du nur ein Element aus, liest es aber nicht aus...
Um den Inhalt zu übergeben musst du eigentlich nur den namen der LinkedList mit den () hintendran nehmen...
Moment ich hab da ein Codebeispiel irgendwo auf der Platte was genau das macht was du willst (glaube ich)
(\/) (°,,,°) (\/)
vimike
Beiträge: 14
Registriert: 27.06.2007 15:51

Erkenntnis

Beitrag von vimike »

Ich glaube ich muß Selectelement vor dem Addgadgetitem mit dem Listindex oder Linkedlist angeben. Jedenfalls habe ich gerade in der Hilfe bei dem Befehl Listindex etwas ähnliches gefunden. Werde mich in den nächsten Tagen hinsetzen und alles nochmal versuchen und dann den Code in diesem Thread posten wenn alles klappt. Damit wie ich hoffe andere daraus ihren Nutzen ziehen können.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Code: Alles auswählen

Enumeration
  #Gad_Editor
EndEnumeration

NewList Text.s()


If OpenWindow(0,0,0,640,480,"FileDisplay",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget) And CreateGadgetList(WindowID(0))
  
  EditorGadget(#Gad_Editor,10,10,620,460)
  
  file$ = OpenFileRequester("Textdatei auswählen!","","Textdateien|*.txt;*.ini",0)
  
  
  ;File in Liste:
   
  If ReadFile(0,file$) = 0
    End
  EndIf
  
  While Eof(0) = 0 ;Solange das Ende des Files nicht erreicht ist
    AddElement(Text()) ;Neues Elemt erstellen
    Text() = ReadString(0) ;Zeile aus dem File ins Element schreiben
  Wend
  
  CloseFile(0)
  
  ;List zum Editorgadget:
  
  ForEach Text() ;Für jedes Element von der Liste
    AddGadgetItem(#Gad_Editor,-1,Text()) ;Aus der Liste in eine Neue Zeile schreiben
  Next
  
  ;Fertig
  
  Repeat
    
    event = WaitWindowEvent()
    
    Select event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Gad_Editor
            
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
    
  ForEver
  
EndIf
Hier mein Beispiel, ich habe noch ein paar Kommentare eingefügt, das sollte so laufen...
Vll hab ich aber auch falsch verstanden was du machen willst...
Wenn du Fragen zum Code hast, frag^^
(\/) (°,,,°) (\/)
vimike
Beiträge: 14
Registriert: 27.06.2007 15:51

Ausprobiert

Beitrag von vimike »

Hier erst mal der Code:

NewList Test.s()
For V= 0 To 9
AddElement(Test())
If ReadFile(63,"C:\Dokumente und Einstellungen\Administrator\Desktop\nTextadventure\TW2\T"+Str(V)+".txt")
While Eof(63)= 0
C$=ReadString(63)
Test()=C$
Wend
CloseFile(63)

EndIf
Next



If OpenWindow(0,100,100,640,480,"Test",#PB_Window_SystemMenu)
WindowID=WindowID(0)

CreateGadgetList(WindowID)
W=EditorGadget(#PB_Any,0,0,400,400)


SelectElement(Test(),3)
ForEach Test()

AddGadgetItem(W,-1 ,Test() )
Next
Repeat
Event= WaitWindowEvent()
Until Event= #PB_Event_CloseWindow
EndIf

For T= 1 To 1000000000:Next t

Das Problem ist das immer nur die Enden der Textdateien sprich Elemente angezeigt werden
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ganz einfach, es gibt nur ein element, du liest den File schon falsch in die List ein.
Du musst das AddElement() mit in die While schleife nehmen, damit für jede Zeile ein neues Element erzeugt wird...
(\/) (°,,,°) (\/)
Antworten