ListIconGadget sortieren

Anfängerfragen zum Programmieren mit PureBasic.
Wisimita
Beiträge: 13
Registriert: 03.10.2005 13:07

Beitrag von Wisimita »

Hallo Thorsten,
erst einmal vielen Dank für Deine Mühe!
Es sieht folgendermaßen aus, diese Daten werden in das ListIconGadget eingelesen:

Code: Alles auswählen

For i = 1 To k 
     A$ = Chr(10)+RSet(Str(XYZ0(i)),5)+Chr(10) 
     B$ = RSet(Str(XYZ1(i)),5)+Chr(10) 
     C$ = RSet(Str(XYZ2(i)),5)+Chr(10) 
     D$ = RSet(Str(XYZ3(i)),5)+Chr(10)
     E$ = RSet(Str(XYZ4(i)),5)+Chr(10) 
     F$ = RSet(Str(XYZ5(i)),5)+Chr(10)
     G$ = RSet(Str(XYZ6(i)),5)+Chr(10) 
     H$ = RSet(Str(XXX(i)),8)+Chr(10)
     Prozent(i)=(XXX(i)/ZR*100)
     I$ = RSet(StrF(Prozent(i)),9)+Chr(10)
     AddGadgetItem(0,-1,A$+B$+C$+D$+E$+F$+G$+H$+I$+J$) 
   Next
Wenn ich Dich richtig verstanden habe, können diese dann direkt sortiert eingelesen werden.
Die obigen Daten ergeben eine Zeile!
Es muß zuerst nach der ersten Spalte A$, dann B$, C$ usw. sortiert werden, immer zeilenweise! Wenn A$ gleich ist, dann kommt zuerst die höhere Zahl in B$, dann ggf. C$ usw.
Gruß
Wisimita
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Wisimita hat geschrieben:Die obigen Daten ergeben eine Zeile!
Es muß zuerst nach der ersten Spalte A$, dann B$, C$ usw. sortiert werden, immer zeilenweise! Wenn A$ gleich ist, dann kommt zuerst die höhere Zahl in B$, dann ggf. C$ usw.
Wie Spalten zeilenweise sortiert werden, ist mir nicht klar. Klingt wie ein Widerspruch. Wenn ich die Zahlen vorher in Arrays ablege, anstatt in normalen Variablen, müsste es möglich sein, diese unabhängig voneinander bzw. nacheinander zu sortieren. Anschließend könnte man die Daten dann in die Liste schreiben. Mit SortArray kann man aufwärts und abwärts sortieren, ansonsten müsste man eine eigene Sortroutine schreiben.
Wisimita
Beiträge: 13
Registriert: 03.10.2005 13:07

Beitrag von Wisimita »

Die obigen Daten ergeben eine Zeile!
Es muß zuerst nach der ersten Spalte A$, dann B$, C$ usw. sortiert werden, immer zeilenweise! Wenn A$ gleich ist, dann kommt zuerst die höhere Zahl in B$, dann ggf. C$ usw.
Hallo Thorsten,
hier habe ich mich wohl falsch ausgedrückt!
Gemeint ist, dass eine Zeile auch so erhalten bleiben muß, die Werte stehen in einem Zusammenhang.
Wichtig ist, dass die Sortierung von links nach rechts erfolgt.
Wenn zwei Zeilen in Spalte 1 gleich sind, muß die weitere Abwärtssortierung nach der nächsten unterschiedlichen Spalte erfolgen usw.
Gruß
Wisimita
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Die Sortierung ist schwer nachvollziehbar, da ich die Logik dahinter nicht ganz verstehe. Vielleicht würde es helfen, den Anwendungzweck bzw. den Sinn der Sortierung zu kennen.
Klingt aber nach einer Herausforderung. :wink:
Wisimita
Beiträge: 13
Registriert: 03.10.2005 13:07

ListIcon sortieren

Beitrag von Wisimita »

Die Sortierung ist schwer nachvollziehbar, da ich die Logik dahinter nicht ganz verstehe. Vielleicht würde es helfen, den Anwendungzweck bzw. den Sinn der Sortierung zu kennen.
Klingt aber nach einer Herausforderung.
Hallo Thorsten,
ich wollte einen Ausschnitt der Tabelle hoch laden, das habe ich aber nicht hin bekommen.
Daher noch einmal ein Versuch.
Sagen wir, es handelt sich um eine Tabelle für einen Kegelclub:
Es hat gekegelt:

Spieler 1 3 x Alle Neune und 5 x 8 und 3 x 7
Spieler 2 3 x Alle Neune und 6 x 8 und 2 x 7
Spieler 3 0 x Alle Neune und 1 x 8 und 0 x 7
Spieler 4 0 x Alle Neune und 2 x 8 und 0 x 7

dann ist Spieler 2 der Sieger, weil er (wie 1) 3 mal alle Neune, aber mehr Achter geworfen hat und müßte daher ganz oben stehen.
Spieler 4 ist besser als Spieler 3, weil einmal mehr 8 Kegel gefallen sind.
Es soll also nach Neunern, Achtern, Siebenern usw. sortiert werden.
(Ich bin auch bereit, Dir das gesamte Programm zu schicken und Dir dann auch den wahren Verwendungszweck mitteilen, möchte den Quellcode aber nicht hier veröffentlichen!
Gruß
Wisimita
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Ich denke jetzt ist mir klar, was du willst. (Zeile = Spielerergebnisse)
- Ich sortiere zuerst Spalte 1 absteigend. (höchst Zahl oben)
- Dann sortiere ich Spalte 2 in Abhängigkeit von Spalte 1 (gleiche Einträge)
- usw.

Die schnelleste Sortierlösung wäre eine SQLite-Datenbank zur Speicherung der Werte.
Mit einer entsprechenden Abfrage müsste ich die Spieler entsprechend ihrer Ergebnis erhalten:
SELECT * FROM Kegeln ORDER BY neuner, achter, siebener DESC;

Ansonsten müsste man eine komplexe Sortierroutine schreiben. Mit LinkedLists könnte das gehen. Man kann dort immer zwei Zeilen tauschen, wenn sie die Bedingungen erfüllen. Allerdings habe ich mit Sortierroutinen kaum Erfahrung.
Wisimita
Beiträge: 13
Registriert: 03.10.2005 13:07

Beitrag von Wisimita »

Hallo Thorsten,
so ist es richtig verstanden.
Es war wohl etwas schwer zu erklären, ich bitte um Entschuldigung!
Wenn mir jetzt noch jemand weiterführende Erklärungen geben könnte, wäre ich wahrscheinlich aus dem Schneider!
Gruß
Wisimita
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

Hallo !

Ich habe das hier nur mal schnell überflogen...

Also zum sortieren, wie du es wünscht, ist der ansatz mit der SQlite datenbank nicht verkehrt! Aber wer will mit Kanonen auf Spatzen schiessen.

Das Sortieren, wie du es wünscht, ist nicht mal eben so Programmiert!

Eine Forums-suche lohnt sich auch immer, im Alten Forum oder im Englischen Forum!!!!

Schau mal hier:
http://forums.purebasic.com/german/arch ... +sortieren
http://forums.purebasic.com/german/arch ... +sortieren


Ich kann die aus Zeitmangel leider nur lösungsansätze bieten:

Verschiedene Arrays nimmt man nicht weil da die Datensätze durcheinander kommen!!!!!!!!!!!!!

Da nimmt man eine LinkedList mit einer Sructur gepaart
z.B.

Code: Alles auswählen

Structure strListicon
  Spalte1.s
  Spalte2.s
  Spalte3.s
  Spalte4.s
EndStructure

Structure strListicon
  Spalte1.s
  Spalte2.s
  Spalte3.s
  Spalte4.s
EndStructure

NewList LiListicon.strListicon() ; Die Linked List ist nun vom Typ Structure strListicon
Dann fülst du dein Listicon in die Liste sortiers und schreibs es wieder zurück Sortieren kannst diu LinkedLists (LiLis) mit Horst Schaffer seinem guten QL Sort den bekommst du hier:
http://home.mnet-online.de/horst.muc/pb/index.html
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Wisimita
Beiträge: 13
Registriert: 03.10.2005 13:07

Beitrag von Wisimita »

Vorab schon einmal DANKE!
Da werde ich mich als Neuling jetzt einmal mit beschäftigen. Das kann natürlich etwas dauern. Ich melde mich wieder.
Gruß
Wisimita
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

PAMKKKKK hat geschrieben:Das Sortieren, wie du es wünscht, ist nicht mal eben so Programmiert!
Doch, könnte es sein, zumindest wenn Fred ein einziges Mal auf Benutzerwünsche gehört hätte und nicht so schrottige Sortierbefehle bereitgestellt hätte die nicht einmal im entferntesten stabil zu sein scheinen :(
Ein einziger zusätzlicher Sortierbefehl mit Callback-Vergleichsfunktion (siehe z.B. http://de.php.net/manual/de/function.usort.php um zu sehen wie andere Programmiersprachen das handhaben) würde da ja für die Leute die wirklich anspruchsvoll sortieren wollen genügen. So wie es jetzt ist, ist es im Prinzip wieder einmal wertlos, bzw. nur für einfachste Anwendungen zu gebrauchen :evil:
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten