Indexausdruck mit 2 numerischen Feldern [erledigt]
Moderator: Moderatoren
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Indexausdruck mit 2 numerischen Feldern [erledigt]
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.
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.
Zuletzt geändert von peternmb am Sa, 28. Feb 2015 10:49, insgesamt 1-mal geändert.
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Re: Indexausdruck mit 2 numerischen Feldern
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.
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.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Indexausdruck mit 2 numerischen Feldern
Genau das ist mein Problem.Manfred hat geschrieben:Bei 2 Schlüssel in 1 würde ich evtl. auf Str(wert1) + Str(wert2) umwandeln.
Ich verwende strzero sonst wäre die Reihenfolge ja 1,11,2, usw. - jedoch scheint das bei Minuswerten nicht mehr zu funktionieren.
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Re: Indexausdruck mit 2 numerischen Feldern
alles klar, habe etwas zu spät geschaltet.
Aber in der Anleitung steht es so, dass es auch mit negativem Vorzeichen klappen müßte!?
Aber in der Anleitung steht es so, dass es auch mit negativem Vorzeichen klappen müßte!?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Indexausdruck mit 2 numerischen Feldern
In dem Bespiel werden nur negative Werte verwendetManfred hat geschrieben:...Aber in der Anleitung steht es so, dass es auch mit negativem Vorzeichen klappen müßte!?
Bei mir ist das gemischt und soll korrekt sortiert werden (niedrigster Minuiswert ganz am Schluss).
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Indexausdruck mit 2 numerischen Feldern
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 !
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 !
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Indexausdruck mit 2 numerischen Feldern
Dein Problem ist grundsätzlicher:
"-9" ist größer als "-1" zudem kommt das - immer vor die Zahl ...
das geht nur mit einer eigenen Funktion
Code: Alles auswählen
ok
1
2
11
aber
-1
-9
das geht nur mit einer eigenen Funktion
Gruß
Hubert
Hubert
- komnick
- UDF-Programmierer
- Beiträge: 75
- Registriert: Mi, 04. Jun 2014 9:56
- Wohnort: Berlin
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 5 Mal
Re: Indexausdruck mit 2 numerischen Feldern
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
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
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2823
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Indexausdruck mit 2 numerischen Feldern
Hallo,
frisch aus dem Debugger:
Vom Grundsatz her scheint das zu funktionieren. Nun stellt sich die Frage, bei welchen Werten hast Du Probleme, Peter?
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.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Indexausdruck mit 2 numerischen Feldern
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
Muss ich nur gut dokumentieren denn in einem Jahr weiss ich bestimmt nicht mehr für was die 1000 gut sind
Code: Alles auswählen
index on strzero(meinFeld1+1000,8,0)+strzero(meinFeld2,8,0)...
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Indexausdruck mit 2 numerischen Feldern
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.
Wenn es mit dem Offset funktioniert, ist das die einfachste Lösung.
Gruß
Hubert
Hubert
- komnick
- UDF-Programmierer
- Beiträge: 75
- Registriert: Mi, 04. Jun 2014 9:56
- Wohnort: Berlin
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 5 Mal
Re: Indexausdruck mit 2 numerischen Feldern
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...
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...
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Indexausdruck mit 2 numerischen Feldern
Ich möchte einfach z.B. die Zahlenfolge 15,20,10,-3,-10,25 in die gewünschte Reihenfolge zu bringen,georg hat geschrieben:Hallo,
Nun stellt sich die Frage, bei welchen Werten hast Du Probleme, Peter?
Sortiert von groß nach klein wäre das in diesem Fall: 25,20,15,10,-3,-10
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Indexausdruck mit 2 numerischen Feldern
Die Frage ist, was ist mit dem 2. Feld inhaltlich los ist. Gibts da auch Minuswerte?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...
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.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Indexausdruck mit 2 numerischen Feldern
Was genau meinst du damit.peternmb hat geschrieben:Die Indizierung dient nur der Sortierung, nicht dem Zugriff.
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.
Gruß
Hubert
Hubert
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Indexausdruck mit 2 numerischen Feldern
ich meine damit, dass nicht mit "seek" auf den Index zugegriffen wird.Die Indizierung dient nur der Sortierung, nicht dem Zugriff.
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.
Ich weiss, dass es nur im ersten Feld Minuswerte gibt und diese immer < 1000 sind.Die Frage ist, was ist mit dem 2. Feld inhaltlich los ist. Gibts da auch Minuswerte?
Das mit dem Offset funktioniert einwandfrei, vor allen Dingen musste ich im Orginalcode nicht viel ändern
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Indexausdruck mit 2 numerischen Feldern [erledigt]
Wenn es eine temporäre Datei ist, könnte SORT die einfachere Lösung sein. Dort kann man nach mehreren Feldern sortieren.
Gruß
Hubert
Hubert