Seite 1 von 3
Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 19:17
von Re57
Hallo, ich habe heute das Vergnügen, mich erstmals mit List zu beschäftigen, aber die Listenwerte lassen sich dann nur an Position Null abfragen, ansonsten Fehlermeldung. Folgendes soll passieren. Bei jedem Klick erhöht sich der Wert stp um 1. Außerdem kommen bei jedem Klick immer andere ast-Werte rein, und die sollen an einer Position nach der anderen in der List gespeichert werden. Und dann vor allem aber auch schön einzeln wieder abgefragt werden können. Und wie geht das dann? Hier der Code:
Code: Alles auswählen
stp = stp + 1
NewList ast.l()
Select stp
Case 1
AddElement(ast())
ast() = ast
Case 2
AddElement(ast())
ast() = ast
Case 3
AddElement(ast())
ast() = ast
EndSelect
Das List-Kapitel im Handbuch habe ich ja gelesen, aber in meinem Beispiel wird die Liste Stück für Stück belegt, das ist der Unterschied. Danke für Info.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 19:20
von NicTheQuick
Könntest du das etwas genauer erklären. Ich fürchte ich weiß noch nicht genau, was nicht klappt.
Suchst du SelectElement()?
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 19:25
von Re57
Genau. Wenn ich hinschreibe
kann das abgefragt werden, aber bei jeder anderen Position, Fehlermeldung "The list doesn't have a current element".
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 19:30
von NicTheQuick
Aus deinem Code-Schnipsel ist auch nicht ersichtlich, dass du mehr als ein Element hinzufügst.
Wenn dir ListSize(ast()) nur 1 zurückgibt, dann geht auch nur SelectElement(ast(), 0) und kein anderer Index.
Zeig uns mal einen kompletten Code, damit man besser versteht, was du eigentlich machst.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 19:39
von mk-soft
Ich glaube ein Array (Dim) passt da besser. Habe meine Kristall Kugel gefragt
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 19:43
von Re57
Der komplette Code ist viel zu lang und um den soll es auch gar nicht gehen. Ich habe dann die ganze List-Geschichte überhaupt erst gar nicht kappiert.
Nochmal kurz gesagt: Die Anzahl der Klicks wird gezählt und zu jedem Klick 1,2,3,4,5 usw. soll ein sich ändernder Wert an einem List-Platz nach dem anderen gespeichert werden, das können jetzt irgendwelche Zufallswerte sein, völlig egal. Und wenn dann z.B. 8 Werte in der Liste gespeichert sind, sollen die auch wieder abgefragt werden können. Sicher könnte man das auch mit einem Array machen, aber auch das kappiere ich nicht im Handbuch. Mir kann also auch gerne mal jemand erklären, wie meine obige Aufgabenstallung mit einem Array zu packen wäre, Hauptsache, ich kappiere wenigstens mal eins von beidem, entweder List oder Array. Danke.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 20:01
von Andesdaf
zum Vergleichen...
Code: Alles auswählen
EnableExplicit
Define.i iEvent,
i
Define NewList Klicks.i()
If OpenWindow(0, 0, 0, 300, 300, "", #PB_Window_ScreenCentered)
ButtonGadget(0, 5, 5, 100, 25, "Klick")
ButtonGadget(1, 5, 35, 100, 25, "Abfrage")
ButtonGadget(2, 5, 65, 100, 25, "Abfrage anders")
EndIf
Repeat
iEvent = WaitWindowEvent()
Select iEvent
Case #PB_Event_Gadget
Select EventGadget()
Case 0
AddElement(Klicks())
Klicks() = Random(500, 0)
Case 1
ForEach Klicks()
Debug "Klick Nr. " + ListIndex(Klicks()) + " erzeugte die Zufallszahl " + Str(Klicks())
Next
Case 2
For i = 0 To ListSize(Klicks()) - 1
SelectElement(Klicks(), i)
Debug "Klick Nr. " + Str(i) + " erzeugte die Zufallszahl " + Str(Klicks())
Next i
EndSelect
EndSelect
Until iEvent = #PB_Event_CloseWindow
CloseWindow(0)
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 20:05
von Re57
Den ursprünglichen Beitrag habe ich wieder entfernt.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 20:18
von Mijikai
Array Beispiel:
Code: Alles auswählen
EnableExplicit
Structure COLLECT_STRUCT
count.i
Array item.i(127)
EndStructure
Global collect.COLLECT_STRUCT
Global index.i
Global element.i
Procedure.i ListAdd(*collect.COLLECT_STRUCT,Item.i)
Protected siz.i
With *collect
If \count = (ArraySize(\item()) + 1)
siz = \count + 128
ReDim \item(siz)
If ArraySize(\item()) = siz
\item(\count) = Item
\count + 1
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
Else
\item(\count) = Item
\count + 1
ProcedureReturn #True
EndIf
EndWith
EndProcedure
Procedure.i ListElement(*collect.COLLECT_STRUCT,Index.i,*Result.Integer)
With *collect
If Index > -1 And Index < \count
*Result\i = \item(Index)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndWith
EndProcedure
For index = 0 To 1000
If Not ListAdd(@collect,index)
MessageRequester(#Null$,"Error: Not enough memory!")
End
EndIf
Next
If ListElement(@collect,12,@element);get the element @ index 12
Debug element
EndIf
End
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 20:41
von Re57
Vielen Dank für die beiden Codes, aber leider nutzen die mir beide nichts. Prozeduren gehen ja nicht in Repeat-Schleifen und außerdem habe ich mit Prozeduren auch noch nie gearbeitet. Solange es keine einfache Möglichkeit gibt, Arrays oder Listen erstellen und dann auch wieder abfragen zu können, kann ich darauf verzichten. Oder das Handbuch wird da endlich mal gescheit aufbereitet. Da ist wahrscheinlich bei den Erklärungen für List und Array null etwas nachbereitet worden seit PureBasic 4.00 Zeiten oder noch früher, das ist so schlichtweg nicht anbietbar.