Seite 1 von 2
BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 14:59
von frankmannb
Hallo Leute,
zunächst an alle von euch einen schönen Sonntag. Ich frage gerade ob es in Purebasic ähnliche Befehle wie z.B. aus der 4GL Programiersprache wie BREAK-BY gibt. Hintergrund ist das ich aus folgender Linked-List einen Schleifendurchlauf bauen möchte, der immer nachdem das letzte Element der Liste mit dem selben Sortiment (hier Fleisch und Wurst) durchlaufen wird ,eine bestimmte Aktion abläuft. Leider weiss ich nicht so recht wie ich das in Purebasic bewerkstelligen könnte. Villeicht ist jemand von euch so nett und kann mir hier etwas auf die Beine helfen. Von daher, schon einmal besten Dank im Vorraus.
Code: Alles auswählen
; Parameter für Liste erzeugen
Structure inhalt
artikel.s
sortiment.s
EndStructure
NewList sortiment.inhalt()
AddElement(sortiment())
sortiment()\artikel = "12334uiu"
sortiment()\sortiment = "Fleisch"
AddElement(sortiment())
sortiment()\artikel = "8235408280458"
sortiment()\sortiment = "Fleisch"
AddElement(sortiment())
sortiment()\artikel = "1082485023"
sortiment()\sortiment = "Obst"
AddElement(sortiment())
sortiment()\artikel = "28742973549"
sortiment()\sortiment = "Obst"
foreach sortiment()
??? hier müsste der Code rein ???
__________________________________________________
Code-Tags hinzugefügt
18.08.2013
RSBasic
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 15:07
von LuZiF3R
am besten Liste nach sortiment sortieren und und dann nachfolgende elemente vergleichen
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 15:09
von frankmannb
LuZiF3R hat geschrieben:am besten Liste nach sortiment sortieren und und dann nachfolgende elemente vergleichen
und wie bekomme ich zugriff auf das nächste Element wenn ich das vorherige Element noch im Zugriff habe? Könntest du ein Beispiel für deinen Vorschlag posten.
Danke
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 15:17
von LuZiF3R
Code: Alles auswählen
; Parameter für Liste erzeugen
Structure inhalt
artikel.s
sortiment.s
EndStructure
Global NewList sortiment.inhalt()
Procedure newArt(artikel.s, sortiment.s)
AddElement(sortiment())
sortiment()\artikel = artikel
sortiment()\sortiment = sortiment
EndProcedure
newArt("Salami", "Fleisch")
newArt("Schinken", "Fleisch")
newArt("Apfel", "Obst")
newArt("Birne", "Obst")
newArt("Radeberger", "Bier")
newArt("Becks", "Bier")
SortStructuredList(sortiment(),#PB_Sort_Ascending,OffsetOf(inhalt\sortiment),#PB_String)
Define last.s = ""
ForEach sortiment()
With sortiment()
If last <> \sortiment And last <> ""
Debug "---------"
EndIf
Debug \artikel
last = \sortiment
EndWith
Next
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 15:35
von frankmannb
Vielen Dank für den Beispielcode. Das deckt leider noch nicht ganz das ab, was ich erreichen möchte. Das Problem was ich hierbei habe ist, dass ich sobald ich mir "-----" anzeigen lasse, ich mich eigentlich schon im nächsten Sortiment befinde, und ich damit keinen Zugriff mehr auf den Inhalt des vorherigen Elementes habe. Ich hoffe, ich konnte es korrekt ausdrücken.
LuZiF3R hat geschrieben:Code: Alles auswählen
; Parameter für Liste erzeugen
Structure inhalt
artikel.s
sortiment.s
EndStructure
Global NewList sortiment.inhalt()
Procedure newArt(artikel.s, sortiment.s)
AddElement(sortiment())
sortiment()\artikel = artikel
sortiment()\sortiment = sortiment
EndProcedure
newArt("Salami", "Fleisch")
newArt("Schinken", "Fleisch")
newArt("Apfel", "Obst")
newArt("Birne", "Obst")
newArt("Radeberger", "Bier")
newArt("Becks", "Bier")
SortStructuredList(sortiment(),#PB_Sort_Ascending,OffsetOf(inhalt\sortiment),#PB_String)
Define last.s = ""
ForEach sortiment()
With sortiment()
If last <> \sortiment And last <> ""
Debug "---------"
EndIf
Debug \artikel
last = \sortiment
EndWith
Next
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 15:42
von LuZiF3R
Code: Alles auswählen
If last <> \sortiment And last <> ""
PreviousElement(sortiment())
; CODE
NextElement(sortiment())
EndIf
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 15:51
von Regenduft
Viele LinkedList-Funktionen geben einen Zeiger auf das aktuelle/letzte/nächste Element rück, was ganz nützlich sein kann (im Zusammenhang mit strukturierten Zeigern).
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 17:15
von frankmannb
Regenduft hat geschrieben:Viele LinkedList-Funktionen geben einen Zeiger auf das aktuelle/letzte/nächste Element rück, was ganz nützlich sein kann (im Zusammenhang mit strukturierten Zeigern).
Leider kann ich mit deiner Anmerkung wenig anfangen. Kannst du das anhand meines Beispieles konkretisieren?
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 17:50
von Regenduft
Code: Alles auswählen
NewList l.POINT()
*a.POINT = AddElement(l()) : l()\x = 1 : l()\y = 2
*b.POINT = AddElement(l()) : l()\x = 3 : l()\y = 4
Debug *a\x
Debug *a\y
Debug ""
Debug *b\x
Debug *b\y
AddElement() -> gibt die Adresse des neuen Elements zurück
FirstElement() -> gibt die Adresse des ersten Elements zurück
InsertElement() -> gibt die Adresse des neuen Elements zurück
LastElement() -> gibt die Adresse des letzten Elements zurück
NextElement() -> gibt die Adresse des nächsten Elements zurück
PreviousElement() -> gibt die Adresse des voherigen Elements zurück
SelectElement() -> gibt Adresse des ausgewählten Elements zurück
PopListPosition() und PushListPosition() könnten auch nützlich sein.
Sorry, dass ich so ungenau mit meinen Informationen war, aber von 4GL habe ich keine Ahnung, daher wollte ich nur eine (evtl.) interessante Richtung aufzeigen.
Nachtrag: Die Adresse des aktuellen Elementes erhält man einfach mit "@Listenname()".
Re: BREAK BY oder ähnlicher Befehl in Purebasic
Verfasst: 18.08.2013 19:15
von Drago
Also, nur zum besseren Verständniss...
Du müsstest praktisch herausfinden, welche Sortimente du in deiner Liste stehen hast.
In deinem Falle also:
Fleisch
Obst
Wenn du dieses weist, kannst du dann ja die List von hinten an abfragen und sobald du auf
das entsprechende Sortiment triffst, ist dieses auch das letzte....
Bis hierhin richtig verstanden ?