BREAK BY oder ähnlicher Befehl in Purebasic

Anfängerfragen zum Programmieren mit PureBasic.
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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
LuZiF3R
Beiträge: 18
Registriert: 22.03.2012 16:24

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag von LuZiF3R »

am besten Liste nach sortiment sortieren und und dann nachfolgende elemente vergleichen
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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
LuZiF3R
Beiträge: 18
Registriert: 22.03.2012 16:24

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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
LuZiF3R
Beiträge: 18
Registriert: 22.03.2012 16:24

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag von LuZiF3R »

Code: Alles auswählen

If last <> \sortiment And last <> ""
      PreviousElement(sortiment())
        ; CODE 
      NextElement(sortiment())
EndIf
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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).
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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?
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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()".
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: BREAK BY oder ähnlicher Befehl in Purebasic

Beitrag 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 ?
Antworten