Seite 1 von 2

Array spezialsortiert

Verfasst: Do, 01. Dez 2016 10:47
von Manfred
eine bessere Überschrift fiel mir nicht ein, aber ich habe folgende Idee:
Ich habe einen Browse, in dem ich Vereine anzeige. Das können männlich, weibliche, oder gemischte sein. (zu erkennen in einem Feld, in dem "m", "w" oder "g" steht.
In einem anderen Browse habe ich ein Array, mit der Auswahl an Teilnehmern. Dort ist auch angegeben, ob "m" oder "w". Die GEschlechter sind farblich unterlegt und nach Geschlecht ("m" "w")sortiert, aber innerhalb des Geschlechts nach Namen als 2. Schlüssel. Jetzt habe ich das Problem, dass viel gescrollt werden muß, weil entweder ein männlicher, oder ein weiblicher, oder ein gemischter Verein bestückt werden muß, die Teilnehmerauswahl aber doch recht groß ist. Meine Idee war nun jedesmal den Verein vorher abzufragen, ob er "m", "w", oder gemischt ist. Dementsprechend soll das Teilnehmerarray dann jeweils passend vorsortiert werden. Also wenn der Verein nur "m" haben kann, dann sollen die "m" sortiert nach Namen zuerst im Auswahlbrowse erscheinen, wenn sie "w" sind die "w" sortiert nach Namen usw. Wie kann ich das mit dem Array so bauen? Mir fällt im Moment nicht ein, wie man sowas sortiert.

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 10:55
von Jan
Manfred,

ich bin ja vielleicht noch etwas benebelt hier, überseh daher irgendwas in Deinen Ausführungen. Aber wo genau ist denn da das Problem? Du kannst Doch ein Array sortieren wie Du Lust und gute Laune hast. Einfach die Bedingungen in den Codeblock reinschreiben.

Jan

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 10:57
von Martin Altmann
:?: Bahnhof.
Tu mir mal bitte einen Gefallen - gib mal ein paar Beispieldaten an und danach, in welcher Reihenfolge Du das sortiert haben möchtest.

Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 10:58
von Manfred
richtig, aber wie lautet die? Jetzt sage ich dem Array Sort auf Spalte Geschlecht und innerhalb Geschlecht nach Namen. Das bedeutet aber es ist immer die Reihenfolge "g", "m", "w". Ich möchte aber mal "m" und mal "w" oben stehen haben.

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:02
von Jan
Manfred,

dann kopier das Array doch um. Erst die mit dem passenden Geschlecht rüberschreiben, danach die anderen passend sortiert. Und wieder in das ursprüngliche Array zurückkopieren. Natürlich erst, nachdem das geleert worden ist.

Jan

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:03
von Manfred
ok, das wäre ein Weg. Ich dachte nur es gäbe da noch etwas anderes über Asort, oder so.

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:04
von Jan
Manfred,

vermutlich ginge das auch. Aber dann mußt Du Dir eine eigene Collation schreiben.

Jan

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:05
von Martin Altmann
Manfred,
gibt es auch - aber solange Du meiner Bitte nicht nachkommst...
Tipp: Du kannst im Codeblock auch mit iif() entsprechend schachteln...

Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:05
von Manfred
für ein Array? Hm, noch nie was von gehört. Dachte das wäre nur für DBF Treiber möglich.

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:10
von Manfred
Wie Deiner Bitte nicht nachkommen? MArtin ich verstehe Dich nicht.
Ich habe

Verein1 g
Verein2 g
Verein3 g

Verein1 m
Verein2 m
Verein3 m

Verein1 w
Verein2 w
Verein3 w

die sollen so sortiert werden, das mal "m", mal "w" und mal "g" oben steht. So wie es der andere Browse vorgibt.

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:14
von Jan
Manfred,

lt. Hlfefunktion geht das auch mit ASort. Was ja auch logisch ist - wenn ich etwas sortieren möchte, soll das ja nicht auf Araay und dbf unterschiedliche Bedingungen haben.

Jan

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:16
von Jan
Schau Dir mal SetCollationTable() an.

Jan

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:22
von Martin Altmann
Manfred,
jetzt fehlt nur noch die gewünschte Reihenfolge - willst Du das so haben:
Verein1 m
Verein1 w
Verein1 g

Verein2 m
Verein2 w
Verein2 g

Verein3 m
Verein3 w
Verein3 g

Oder wie?

Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:25
von Jan
Martin,

falsch. Die Blöcke, die Manfred aufgelistet hat, müssen blockweise umsortiert werden. Also mal die mit dem "m" oben, mal die mit dem "w".

Jan

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:32
von Martin Altmann
Ich verstehe das noch immer nicht!
Macht doch mal bitte ein Beispiel von der gewünschten Sortierung - anhand der neun Beispielzeilen von Manfred!

Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:34
von Martin Altmann
Ah - oder war Manfreds Beispiel oben schon das fertig sortierte?
Also erst nach dem Geschlecht (in nicht-alphabetischer Reihenfolge) und danach nach dem Verein (in alphabetischer Reihenfolge)?

Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 11:42
von Martin Altmann
Wenn dem so ist:

Code: Alles auswählen

aGeschlecht := { "m", "w", "g" }   // Geschlecht in der gewünschten Sortierreihenfolge
aSort( aArray,,, {|aX,aY| iif( aX[ 2 ] <> aY[ 2 ], aScan( aGeschlecht, aX[ 2 ] ) < aScan( aGeschlecht, aY[ 2 ] ), aX[ 1 ] < aY[ 1 ] ) } )
Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 12:17
von Manfred
verflixt, das mit dem Set Collation habe ich die ganzen jahre überlesen. Oder ignoriert, oder nicht verstanden. Sucht euch was aus. :angry4:

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 13:00
von Martin Altmann
Und wie erreichst Du, dass die geänderte Collation beim Sortieren nur auf die zweite Spalte wirkt - nicht aber auf die erste?

Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 13:10
von Manfred
wenn die Frage an mich ging-> :-k :dontknow:

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 13:19
von Martin Altmann
Ja - an Dich und Jan.
Aber Du wirst es ja bereits wissen, oder? Ich hatte Dich so verstanden, dass Du das mit der geänderten Collation bereits probiert hast.
Problem dabei:
Normale Reihenfolge: g -> m -> w
Damit wäre also bei den Vereinsnamen die Reihenfolge in dem Fall wie folgt:
  • Agentur
  • Amperien
  • Award
Wenn Du die Collation dahingehend änderst, dass die Reihenfolge der drei o.g. Buchstaben sich ändert in m -> w -> g, müsste das auch Auswirkungen auf die eigentlich alphabetisch aufsteigend gewünschte Sortierung der Vereinsnamen haben - die Reihenfolge dieser drei Namen müsste dann wie folgt aussehen:
  • Amperien
  • Award
  • Agentur
Aber ich lasse mich gerne eines Besseren belehren 8)

Viele Grüße,
Martin

Re: Array spezialsortiert

Verfasst: Do, 01. Dez 2016 13:30
von Manfred
nönö, meine Aussgae ging nur in die Richtung zu erklären, das ich es mal wieder überlesen habe.

Re: Array spezialsortiert

Verfasst: Sa, 03. Dez 2016 22:44
von UliTs
Manfred hat geschrieben:...
Meine Idee war nun jedesmal den Verein vorher abzufragen, ob er "m", "w", oder gemischt ist. Dementsprechend soll das Teilnehmerarray dann jeweils passend vorsortiert werden. Also wenn der Verein nur "m" haben kann, dann sollen die "m" sortiert nach Namen zuerst im Auswahlbrowse erscheinen, wenn sie "w" sind die "w" sortiert nach Namen usw. Wie kann ich das mit dem Array so bauen? Mir fällt im Moment nicht ein, wie man sowas sortiert.
Ich bin mir nicht sicher aber ich vermute Du brauchst Nur eine "Bewertungsfunktion":

Code: Alles auswählen

FUNCTION SortierWert( cValue,cZuerst )
RETURN( iif( cValue==cZuerst,0,asc( cValue ) ) )
Damit müsstest du (vermutlich) dein Array einfach sortieren können. Z.B. (wenn im Array aWerte nur die Geschlechter drinstehen, anders sicher leicht umzusetzen):

Code: Alles auswählen

ASort( aWerte,/*nStart*/,/*nCount*/,;
       {|a1,a2|SortierWert( a1/*cValue*/,"M"/*cZuerst*/ )< ;
               SortierWert( a2/*cValue*/,"M"/*cZuerst*/ )}/*bOrder*/ )
Uli

Re: Array spezialsortiert

Verfasst: So, 04. Dez 2016 8:04
von Wolfgang Ciriack
Ich würde, wenn ein Verein nur einen "Typ" haben kann, gar nicht sortieren sondern in ein neues Array filtern.

Re: Array spezialsortiert

Verfasst: Mo, 05. Dez 2016 9:24
von brandelh
Martin Altmann hat geschrieben: Wenn Du die Collation dahingehend änderst, dass die Reihenfolge der drei o.g. Buchstaben sich ändert in m -> w -> g,
müsste das auch Auswirkungen auf die eigentlich alphabetisch aufsteigend gewünschte Sortierung der Vereinsnamen haben
die Collation umzustellen, würde sich aber grundsätzlich auf alle Zeichenvergleiche / Sortierungen / Indexe auswirken, was hier ja nicht gewünscht ist.
Was ich nicht verstehe ist, warum Manfred damit ein Problem hat.
Das Feld nach dem sortiert wird, kann doch manipuliert werden und wenn man die Namen in 3 Gruppen möchte, stellt man einfach ein Zeichen für die Gruppe davor (wie schon geschrieben wurde).
Ob das nun passende Buchstaben oder Ziffern sind ist egal !

G1-Hans
G1-Otto
G2-Anton
G2-Emil
G3-Agate

eine Funktion zum Berechnen dieses Sortierfeldes (das dynamisch erzeugt wird und gar nicht so in dem Array steht) erleichtert das Debugging.