Seite 1 von 1

Indexausdruck mit 2 numerischen Feldern [erledigt]

Verfasst: Do, 26. Feb 2015 10:58
von peternmb
Hallo,

ich möchte eine Datenbank nach 2 numerischen Feldern sortieren.
Bisher habe ich dafür strzero verwendet, nur jetzt habe ich auch negative Werte und da wird bei strzero anscheinend das Vorzeichen nicht beachtet.

Die Indizierung dient nur der Sortierung, nicht dem Zugriff.

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 11:03
von Manfred
was heißt 2 numerische Felder? 1 Index auf 2 Schlüssel, oder 2 Index auf je einen Schlüssel.

Bei 2 Index auf je einen Schlüssel, baue einfach auf den numerischen Wert direkt auf. Bei 2 Schlüssel in 1 würde ich evtl. auf Str(wert1) + Str(wert2) umwandeln.

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 11:08
von peternmb
Manfred hat geschrieben:Bei 2 Schlüssel in 1 würde ich evtl. auf Str(wert1) + Str(wert2) umwandeln.
Genau das ist mein Problem.
Ich verwende strzero sonst wäre die Reihenfolge ja 1,11,2, usw. - jedoch scheint das bei Minuswerten nicht mehr zu funktionieren.

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 11:11
von Manfred
alles klar, habe etwas zu spät geschaltet.

Aber in der Anleitung steht es so, dass es auch mit negativem Vorzeichen klappen müßte!?

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 11:19
von peternmb
Manfred hat geschrieben:...Aber in der Anleitung steht es so, dass es auch mit negativem Vorzeichen klappen müßte!?
In dem Bespiel werden nur negative Werte verwendet
Bei mir ist das gemischt und soll korrekt sortiert werden (niedrigster Minuiswert ganz am Schluss).

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 16:16
von brandelh
Ich kann mir nicht vorstellen, dass StrZero aus -1 001 macht.
Und natürlich funktioniert auch str in diesen fällen, denn str () stellt für jede Stelle blanks vor die Zahl.
Ich würde die Länge aber fix vorgeben !

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 17:02
von brandelh
Dein Problem ist grundsätzlicher:

Code: Alles auswählen

ok
  1
  2
 11
aber
 -1
 -9

"-9" ist größer als "-1" zudem kommt das - immer vor die Zahl ...
das geht nur mit einer eigenen Funktion

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 17:03
von komnick
Hallo allerseits,

also str() müsste so sortieren:
1
-1
2
-2
10
-10
11
Das ist also nicht das Gewünschte.

Wie wäre ein numerischer Index der Form A*10000+B ?
(Mal vorausgesetzt, A und B sind deine Felder und B ist dreistellig. Die Konstante 10000 hat einfach mal eine Null mehr als zunächst nötig scheint, weil B ja auch negativ werden kann...)

Liebe Grüße
Martin

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 17:05
von georg
Hallo,


frisch aus dem Debugger:

Code: Alles auswählen

> strzero(10)
< C: "0000000010"
> strzero(-10)
< C: "-000000010"
> strzero(10, 10, 5)
< C: "0010.00000"
> strzero(-10, 10, 5)
< C: "-010.00000"
> strzero(-10, 10, 5) < strzero(10, 10, 5)
< L: .T.
Vom Grundsatz her scheint das zu funktionieren. Nun stellt sich die Frage, bei welchen Werten hast Du Probleme, Peter?

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 18:28
von peternmb
Da ich weiss, dass es nur im ersten Feld Minuswerte gibt und diese immer < 1000 sind, packe ich jetzt auf das Feld einfach 1000 drauf dann klappt es problemlos. Ich habe gehofft, dass es eine einfachere bzw. "schönere" Lösung gibt.
Muss ich nur gut dokumentieren denn in einem Jahr weiss ich bestimmt nicht mehr für was die 1000 gut sind 8)

Code: Alles auswählen

index on strzero(meinFeld1+1000,8,0)+strzero(meinFeld2,8,0)...

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Do, 26. Feb 2015 20:38
von brandelh
Auch wenn das minus immer ganz am Anfang stünde wäre ein String "-1" dennoch immer kleiner als "-9" eine Zahl -1 ist aber größer als -9
Wenn es mit dem Offset funktioniert, ist das die einfachste Lösung.

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Fr, 27. Feb 2015 11:21
von komnick
Hier noch nachgeliefert, warum strzero() nicht funktioniert:

Mit strzero() wäre die Sortierung so:
-001
-002
-010
-100
0000
0001
0002
0010
0100
Klar, das ist nicht das, was man haben will...

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Fr, 27. Feb 2015 11:25
von peternmb
georg hat geschrieben:Hallo,
Nun stellt sich die Frage, bei welchen Werten hast Du Probleme, Peter?
Ich möchte einfach z.B. die Zahlenfolge 15,20,10,-3,-10,25 in die gewünschte Reihenfolge zu bringen,
Sortiert von groß nach klein wäre das in diesem Fall: 25,20,15,10,-3,-10

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Fr, 27. Feb 2015 12:30
von Herbert
komnick hat geschrieben:Hier noch nachgeliefert, warum strzero() nicht funktioniert:

Mit strzero() wäre die Sortierung so:
-001
-002
-010
-100
0000
0001
0002
0010
0100
Klar, das ist nicht das, was man haben will...
Die Frage ist, was ist mit dem 2. Feld inhaltlich los ist. Gibts da auch Minuswerte?
Du kannst mehrere numerische Felder verbinden, indem du einen Trick anwendest:
Nimmst im strzero vor dem Komma eine Stelle mehr als die maximale Zifferngrösse in der db vorhanden ist. Bei den Minuszahlen machst du aus dem - eine 0 und bei den Pluszahlen machst du aus der linken 0 eine 9. So kannst du beliebig viele numerische Felder aneinanderreihen.
Am einfachsten kreierst du ein neuen db-Feld und füllst dies darin hinein und der Index läuft da darüber. Eventuell lässt sich dies auch als Funktion für den Index erstellen, habe aber da wenig Erfahrung.

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Fr, 27. Feb 2015 16:34
von brandelh
peternmb hat geschrieben:Die Indizierung dient nur der Sortierung, nicht dem Zugriff.
Was genau meinst du damit.
Für eine Anzeige würde ich die Daten in ein Array laden und dort sortieren.
Ansonsten könnte man je nach Wertebereich das führende Feld zur Ganzzahl machen, danach die andere in den Nachkommastellen unterbringen.
1. Feld 7.2
2. Feld 4.0
indexfeld 6 Stellen für 1 (Kein Komma) + Komma + 5 Stellen 2. Feld
gibt 12.5 besser 15.5
Beispiel:
5.02 * 100 + (10000 + 4)/10000 = 502.10004
5.02 * 100 + (10000 + -4)/10000 = 502.09996
Der Offset ist natürlich entscheidend und muss stimmen.
Das ginge auch als string, wenn man die Stellen einhält und das Minus per Offset eliminiert.

Re: Indexausdruck mit 2 numerischen Feldern

Verfasst: Sa, 28. Feb 2015 10:48
von peternmb
Die Indizierung dient nur der Sortierung, nicht dem Zugriff.
ich meine damit, dass nicht mit "seek" auf den Index zugegriffen wird.
Es handelt sich um eine temporäre Datenbank mit der eine umfangreiche Auswertung erstellt wird.
Da anschließend mit FRAX gedruckt wird möchte ich das lieber als Datenbank statt als Array haben.
Die Frage ist, was ist mit dem 2. Feld inhaltlich los ist. Gibts da auch Minuswerte?
Ich weiss, dass es nur im ersten Feld Minuswerte gibt und diese immer < 1000 sind.

Das mit dem Offset funktioniert einwandfrei, vor allen Dingen musste ich im Orginalcode nicht viel ändern :)

Re: Indexausdruck mit 2 numerischen Feldern [erledigt]

Verfasst: Sa, 28. Feb 2015 14:57
von brandelh
Wenn es eine temporäre Datei ist, könnte SORT die einfachere Lösung sein. Dort kann man nach mehreren Feldern sortieren.