Index mit positiven und negativen Zahlen
Moderator: Moderatoren
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Index mit positiven und negativen Zahlen
Hallo miteinander,
ich brauche mal wieder eure Hilfe
Ich habe eine Auswertung, welche poistive und negative Zahlen sortiert. Es sind beispielsweise 1.111, 1.050, 983, 75, -293 und -83. In meinem Ausdruck erscheinen diese Datensätze in folgender Reihenfolge:
1. 1.111
2. 1.050
3- -293
4. 983
5. 75
6. -83
Ich sortiere die Werte als String, nehme ich die Stringformatierung raus werden entweder nur die positiven Werte korrekt ausgegeben und die negativen fehlen. Baue ich einen Descend bzw. Ascend ein, erhalte ich nur die negativen Werte und zwar zuerst der höhere Wert -293 anstatt -83.....
Wie muss ich den Index aufbauen, dass sowohl die negativen als auch die positiven Werte in einer Liste in der korrekten Reihenfolge dargestellt werden.
Besten Dank
Lutz
ich brauche mal wieder eure Hilfe
Ich habe eine Auswertung, welche poistive und negative Zahlen sortiert. Es sind beispielsweise 1.111, 1.050, 983, 75, -293 und -83. In meinem Ausdruck erscheinen diese Datensätze in folgender Reihenfolge:
1. 1.111
2. 1.050
3- -293
4. 983
5. 75
6. -83
Ich sortiere die Werte als String, nehme ich die Stringformatierung raus werden entweder nur die positiven Werte korrekt ausgegeben und die negativen fehlen. Baue ich einen Descend bzw. Ascend ein, erhalte ich nur die negativen Werte und zwar zuerst der höhere Wert -293 anstatt -83.....
Wie muss ich den Index aufbauen, dass sowohl die negativen als auch die positiven Werte in einer Liste in der korrekten Reihenfolge dargestellt werden.
Besten Dank
Lutz
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Hallo Lutz,
warum als String? Warum nicht den Index direkt auf das numerische Feld?
Jan
warum als String? Warum nicht den Index direkt auf das numerische Feld?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Hallo Jan,
weil er mir dann die negativen Werte unterschlägt und nicht mit ausdruckt.....
Die Datei Ser_8 zeigt die Sortierung mit String:
weil er mir dann die negativen Werte unterschlägt und nicht mit ausdruckt.....
Code: Alles auswählen
OrdCreate(ind,ind,"Descend((nEinArea)->"+ind+")")
OrdCreate(ind,ind,"Descend(Str((nEinArea)->"+ind+"))")
- Dateianhänge
-
- Ser_8.pdf
- (6.25 KiB) 199-mal heruntergeladen
-
- Serienwertung.pdf
- (6.18 KiB) 193-mal heruntergeladen
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Hallo Lutz,
das kann ich garnicht glauben. Ich finde allerdings Deinen Indexausdruck etwas merkwürdig (kann aber auch an meiner Müdigkeit heute Abend liegen).
Wie ist es denn, wenn Du den Index ohne Descend aufbaust, und dann von EoF() mit Skip -1 hochgehst?
Altermativ: Kannst Du mir Die Datei mal rüber geben? Dann teste ich da mal mit rum.
Jan
das kann ich garnicht glauben. Ich finde allerdings Deinen Indexausdruck etwas merkwürdig (kann aber auch an meiner Müdigkeit heute Abend liegen).
Wie ist es denn, wenn Du den Index ohne Descend aufbaust, und dann von EoF() mit Skip -1 hochgehst?
Altermativ: Kannst Du mir Die Datei mal rüber geben? Dann teste ich da mal mit rum.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Hallo Jan,
erst einmal vielen Dank, dass du dich so schnell meines Problemchens annimmst. Hier der Code:
und hier das Ergebnis:
Lutz
ach übrigens: stat dem "+ind+" kann ich auch direkt das Datenbankfeld eingeben....
erst einmal vielen Dank, dass du dich so schnell meines Problemchens annimmst. Hier der Code:
Code: Alles auswählen
OrdCreate(ind,ind,"(nEinArea)->"+ind+"")
Lutz
ach übrigens: stat dem "+ind+" kann ich auch direkt das Datenbankfeld eingeben....
- Dateianhänge
-
- ohne_descend.pdf
- (4.41 KiB) 201-mal heruntergeladen
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Hallo Lutz,
wie gesagt, ich kann das einfach nicht glauben. Leider habe ich Deinen Ausdruck-Code und die dbf nicht. Ich werde mal morgen manuell eine kleine dbf erstellen mit den Werten aus Deiner pdf, und das dann mal testen. Heute ist mir das schon ein wenig zu spät ...
Jan
wie gesagt, ich kann das einfach nicht glauben. Leider habe ich Deinen Ausdruck-Code und die dbf nicht. Ich werde mal morgen manuell eine kleine dbf erstellen mit den Werten aus Deiner pdf, und das dann mal testen. Heute ist mir das schon ein wenig zu spät ...
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Danke Jan,
ich habe gerade auch nicht die Zeit, mich damit in aller Ruhe zu beschäftigen, da ich das Programm ganz aktuell bei einem Skatturnier nutze. Morgen im Laufe des Tages kann ich dir vielleicht mehr Informationen zur Verfügung stellen.
Vielleicht sogar die Datenbank...
Einen schönen Abend noch.....
Lutz
ich habe gerade auch nicht die Zeit, mich damit in aller Ruhe zu beschäftigen, da ich das Programm ganz aktuell bei einem Skatturnier nutze. Morgen im Laufe des Tages kann ich dir vielleicht mehr Informationen zur Verfügung stellen.
Vielleicht sogar die Datenbank...
Einen schönen Abend noch.....
Lutz
- AUGE_OHR
- Marvin
- Beiträge: 12907
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Index mit positiven und negativen Zahlen
hm ...Lutz Rübe hat geschrieben:Hier der Code:Code: Alles auswählen
OrdCreate(ind,ind,"Descend(Str((nEinArea)->"+ind+"))")
Code: Alles auswählen
INDEX ON &_key TO &_name DESCENDING
wird im PPO Code zu
ordCondSet( ,,,,,, RECNO(),,,,.T.,,, )
ordCreate( _name, , _key, _EarlyBoundCodeblock({|| &_key}), , .F. )
nun zum Problem mit negativen Nummer : addiere im Index-Key 1000000 dazu
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Wie ich vermutet hatte: Ich habe mir mal eine Testdatei erstellt mit positiven und negativen Werten. Und da dann einen Index drauf gesetzt. Absolut korrekt sortiert.
Das muß irgendwo anders dran liegen.
Jan
Das muß irgendwo anders dran liegen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
STR() ohne genaue Längenvorgabe ist gefährlich, da im Index alle Längen gleich sein müssen.
Die Vorgabe ist wohl 10 (in meinen Tests), was wenn eine Zahl mehr braucht ?
"**********" oder andere Länge ?
Besser gleich str(n,15,0) verwenden.
Solange die Werte positiv bleiben geht das noch OK, aber wenn man negative Zahlen einmischt, knallt es halt.
Angenommen diese Werte:
Sortiert numerisch zu:
was numerisch richtig ist und sicher auch gewünscht.
Aber die Sortierung von Text folgt anderen Regeln !
Diese Sortierung ist für einen String auf jeden fall korrekt, du kannst sie nur nicht so gebrauchen.
Das Problem ist die Wertstellung der Spalten von links und das "-" das irgendwo vorkommt !
Aber selbst wenn das "-" ganz nach links geschoben wird und chr(255) statt "+" genutzt wird, stimmt es nicht so wie du es willst:
Die Vorgabe ist wohl 10 (in meinen Tests), was wenn eine Zahl mehr braucht ?
"**********" oder andere Länge ?
Besser gleich str(n,15,0) verwenden.
Solange die Werte positiv bleiben geht das noch OK, aber wenn man negative Zahlen einmischt, knallt es halt.
Angenommen diese Werte:
Code: Alles auswählen
2000
15
-12
-20
-2000
300
4000
Code: Alles auswählen
-2000
-20
-12
15
300
2000
4000
Aber die Sortierung von Text folgt anderen Regeln !
Code: Alles auswählen
15
-12
-20
300
2000
4000
-2000
Das Problem ist die Wertstellung der Spalten von links und das "-" das irgendwo vorkommt !
Aber selbst wenn das "-" ganz nach links geschoben wird und chr(255) statt "+" genutzt wird, stimmt es nicht so wie du es willst:
Code: Alles auswählen
- 12
- 20
-2000
15
300
2000
4000
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Das einzige was funktionieren kann ist den Nullpunkt zu verschieben, dass es keine negativen Zahlen gibt !
Beispiel Zahlen von -9999 bis +9999 ... passend wäre 900000:
Klar ist man dann sehr abhängig davon, dass die Grenzwerte eingehalten werden ... beim Suchen muss die gleiche Funktion die Werte umrechnen...
Beispiel Zahlen von -9999 bis +9999 ... passend wäre 900000:
Code: Alles auswählen
-2000 + 900000 => 898000
-20 + 900000 => 899980
-12 + 900000 => 899988
+15 + 900000 => 900015
+205 + 900000 => 900205
Gruß
Hubert
Hubert
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Hallo ihr Drei,
erst einmal recht herzlichen Dank für Euren Einsatz und die Mühe, sich mit meinem Problem zu beschäftigen.
Ich bin gerade mitten in einem Skat-Turnier und hier ist mir das Problem erstmalig aufgefallen, da es negative Werte über -100 selten gibt und Auswertungen selten gebraucht werden, die diese Zahlen mit enthalten.
Ich habe derzeit nicht die Zeit, mich intensiv damit zu befassen, denn das Turnier geht in Kürze weiter und ich will nicht während des Turniers die Software laufend verändern. Nachher haue ich mir noch einen Bug rein und dann kann ich (fast) alles vergessen.
Ich werde mich nächste Woche noch mal intensiv mit meinem Source-Code befassen und schauen, wo ich da den Fehler habe.
Eine Frage an AUGE_OHR hätte ich noch: wie addiere ich im Index-Key einen Wert dazu ? Ich habe bisher immer den "original"-Inhalt indiziert
Besten Dank erst mal
Lutz =D> =D> =D>
erst einmal recht herzlichen Dank für Euren Einsatz und die Mühe, sich mit meinem Problem zu beschäftigen.
Ich bin gerade mitten in einem Skat-Turnier und hier ist mir das Problem erstmalig aufgefallen, da es negative Werte über -100 selten gibt und Auswertungen selten gebraucht werden, die diese Zahlen mit enthalten.
Ich habe derzeit nicht die Zeit, mich intensiv damit zu befassen, denn das Turnier geht in Kürze weiter und ich will nicht während des Turniers die Software laufend verändern. Nachher haue ich mir noch einen Bug rein und dann kann ich (fast) alles vergessen.
Ich werde mich nächste Woche noch mal intensiv mit meinem Source-Code befassen und schauen, wo ich da den Fehler habe.
Eine Frage an AUGE_OHR hätte ich noch: wie addiere ich im Index-Key einen Wert dazu ? Ich habe bisher immer den "original"-Inhalt indiziert
Besten Dank erst mal
Lutz =D> =D> =D>
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Im Prinzip könnte man zwar INDEX ON nFeld+1 machen, das bringt aber nichts.Lutz Rübe hat geschrieben:Eine Frage an AUGE_OHR hätte ich noch: wie addiere ich im Index-Key einen Wert dazu ? Ich habe bisher immer den "original"-Inhalt indiziert
Man Indiziert dann einen Wert, der über eine Funktion geändert wurde, das kennst du doch ...
index on upper(Name)
index on MyIndexStr(...) => Funktion macht dann z.B. eine Verschiebung wie von mir vorgeschlagen.
Beim SEEK muss man diese natürlich auch wieder verwenden.
Gruß
Hubert
Hubert
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Übrigens hier der Teil des Source-Codes, in dem die Ausgabe aufbereitet wird und auch die Sortierung:
Wie Hubert erkennen wird, setzte ich seine Printroutinen erfolgreich ein.
Lutz
Code: Alles auswählen
oHBPrinter:StartDoc(cHinweis)
** beim Drucken noch den Seitenumbruch beachten !!!
DO WHILE nBeg <= nEnd
oHBPrinter:SetFont(3)
** IF .NOT. IsMemvar("cText")
** cText := Space(1)
** ENDIF */
wm_kopf(oHBPrinter:nPageNo,vtitel,cHinweis," ",1050,cText)
oHBPrinter:PrintText( nCol+ 30, nLine + 40, "Serie Platz St-Nr.")
oHBPrinter:PrintText( nCol+ 450, nLine + 40, "Name, Vorname")
oHBPrinter:PrintText( nCol+1100, nLine + 40, "Ergebnis","R")
nLine := nLine + 130
DO WHILE nBeg<=nEnd
ind=f_cvar("s",nBeg,15)
OrdCreate(ind,ind,"Descend(Str((nEinArea)->"+ind+"))")
** OrdCreate(ind,ind,"(nEinArea)->"+ind+"")
oHBPrinter:PrintText( nCol+ 100, nLine, Transform(nBeg, "@E 999")+".","R")
DO WHILE i<= nPlatz
kz=IIF((nEinArea)->frau="D","D"," ")
IF i=1
SETCOLOR(signal)
ENDIF
oHBPrinter:PrintText( nCol+ 200, nLine, Transform(i, "@E 999")+".","R")
if &ind <>0
oHBPrinter:PrintText( nCol+ 320, nLine, (nEinArea)->stnr,"R")
oHBPrinter:PrintText( nCol+ 410, nLine, kz+" "+(nEinArea)->sw,"R")
oHBPrinter:PrintText( nCol+ 450, nLine, RTRIM((nEinArea)->name)+", "+(nEinArea)->vname)
oHBPrinter:PrintText( nCol+1100, nLine, TRANSFORM(&ind,"@E 9,999"),"R")
SKIP
endif
nLine := nLine + 40
i ++
x ++
ENDDO
i=1
nBeg ++
nLine := nLine + 80
ENDDO
IF ! EOF() /* statt Zeile "x" muß hier v_zhl - 2 */
@ x , (dr_brt-len("----------------------- Fortsetzung -----------------------"))/2 say "----------------------- Fortsetzung -----------------------"
ELSE
@ x , (dr_brt-len("---------------------- Ende der Liste ---------------------"))/2 say "---------------------- Ende der Liste ---------------------"
ENDIF
IF x >= 70
x :=IIF(cDruck="D",10,9)
ENDIF
EJECT
IF cDruck="B"
** SETCOLOR(signal)
** cent(23,"Fr WEITER eine Taste bet„tigen, EING L™SCH = Abbruch.",79)
** READ
wahl:=INKEY(0.0)
SETCOLOR(standard)
r=LastAppEvent()
ENDIF
ENDDO
EJECT
oHBPrinter:EndDoc()
Lutz
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
wenn es NUR um die Sortierung einer Ausgabe geht, würde ich die Daten in ein Array laden und mit ASORT sortieren,
dort kann man 2 oder mehr Felder im Sortierblock angeben oder auch eine Funktion verwenden.
dort kann man 2 oder mehr Felder im Sortierblock angeben oder auch eine Funktion verwenden.
Gruß
Hubert
Hubert
- BJelinek
- Rekursionen-Architekt
- Beiträge: 218
- Registriert: Sa, 02. Jun 2012 20:57
- Wohnort: 73257 Köngen
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 3 Mal
Re: Index mit positiven und negativen Zahlen
Hallo Lutz,
ich mach das so:
IF(SORTWERT<0,"1"+STR(SORTWERT,15,0),"0"+DESCEND(STR(SORTWERT,15,0)))
im Index
ich mach das so:
IF(SORTWERT<0,"1"+STR(SORTWERT,15,0),"0"+DESCEND(STR(SORTWERT,15,0)))
im Index
Grüße
Bernd
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Bernd
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
Bernd,
warum die Wandlung auf Character? Den Index kann man doch auch sehr gut numerisch lassen. Und je einfacher der Index, um so störungsfreier und schneller ist der.
Jan
warum die Wandlung auf Character? Den Index kann man doch auch sehr gut numerisch lassen. Und je einfacher der Index, um so störungsfreier und schneller ist der.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- BJelinek
- Rekursionen-Architekt
- Beiträge: 218
- Registriert: Sa, 02. Jun 2012 20:57
- Wohnort: 73257 Köngen
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 3 Mal
Re: Index mit positiven und negativen Zahlen
Hallo Jan,
habe eigentlich immer zusammengesetzte Indexausdrücke.
test mit
index on kdnr+lfd_nr to test.ntx
( ist die Summe beider Felder )
index on str(kdnr,6,0)+str(lfd_nr,10) to test.ntx
daher erzeuge ich immer Strings.
habe eigentlich immer zusammengesetzte Indexausdrücke.
test mit
index on kdnr+lfd_nr to test.ntx
( ist die Summe beider Felder )
index on str(kdnr,6,0)+str(lfd_nr,10) to test.ntx
daher erzeuge ich immer Strings.
Grüße
Bernd
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Bernd
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Index mit positiven und negativen Zahlen
da beide Positiv sind ist das solange kein Problem, wie deine Feldlängen nicht geändert werden müssen ...
Gruß
Hubert
Hubert