Indexausdruck mit 2 numerischen Feldern [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Indexausdruck mit 2 numerischen Feldern [erledigt]

Beitrag 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.
Zuletzt geändert von peternmb am Sa, 28. Feb 2015 10:49, insgesamt 1-mal geändert.
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag 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.
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!!
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Indexausdruck mit 2 numerischen Feldern

Beitrag 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.
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag 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!?
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!!
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Indexausdruck mit 2 numerischen Feldern

Beitrag 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).
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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

Beitrag 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 !
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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

Beitrag 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
Gruß
Hubert
Benutzeravatar
komnick
UDF-Programmierer
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

Beitrag 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
georg
Der Entwickler von "Deep Thought"
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

Beitrag 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?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Indexausdruck mit 2 numerischen Feldern

Beitrag 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)...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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

Beitrag 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.
Gruß
Hubert
Benutzeravatar
komnick
UDF-Programmierer
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

Beitrag 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...
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Indexausdruck mit 2 numerischen Feldern

Beitrag 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
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
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

Beitrag 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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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

Beitrag 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.
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Indexausdruck mit 2 numerischen Feldern

Beitrag 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 :)
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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]

Beitrag von brandelh »

Wenn es eine temporäre Datei ist, könnte SORT die einfachere Lösung sein. Dort kann man nach mehreren Feldern sortieren.
Gruß
Hubert
Antworten