Index mit positiven und negativen Zahlen

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
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

Beitrag von Lutz Rübe »

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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
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

Beitrag von Jan »

Hallo Lutz,

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.
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
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

Beitrag von Lutz Rübe »

Hallo Jan,
weil er mir dann die negativen Werte unterschlägt und nicht mit ausdruckt.....

Code: Alles auswählen

      OrdCreate(ind,ind,"Descend((nEinArea)->"+ind+")")
Die Datei Ser_8 zeigt die Sortierung mit String:
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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
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

Beitrag von Lutz Rübe »

Hallo Jan,

erst einmal vielen Dank, dass du dich so schnell meines Problemchens annimmst. Hier der Code:

Code: Alles auswählen

      OrdCreate(ind,ind,"(nEinArea)->"+ind+"")
und hier das Ergebnis:

Lutz

ach übrigens: stat dem "+ind+" kann ich auch direkt das Datenbankfeld eingeben....
Dateianhänge
ohne_descend.pdf
(4.41 KiB) 201-mal heruntergeladen
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
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

Beitrag von Lutz Rübe »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
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

Beitrag von AUGE_OHR »

Lutz Rübe hat geschrieben:Hier der Code:

Code: Alles auswählen

      OrdCreate(ind,ind,"Descend(Str((nEinArea)->"+ind+"))") 
hm ... :-k

Code: Alles auswählen

      INDEX ON &_key TO &_name DESCENDING

wird im PPO Code zu

      ordCondSet( ,,,,,, RECNO(),,,,.T.,,,  ) 
      ordCreate( _name, , _key, _EarlyBoundCodeblock({|| &_key}), , .F. )
der letzte (undokumentierte) Parameter steht auf .F. = DESCENDING

nun zum Problem mit negativen Nummer : addiere im Index-Key 1000000 dazu ;)
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit positiven und negativen Zahlen

Beitrag von brandelh »

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:

Code: Alles auswählen

 2000
   15
  -12
  -20
-2000
  300
 4000
Sortiert numerisch zu:

Code: Alles auswählen

-2000
  -20
  -12
   15
  300
 2000
 4000
was numerisch richtig ist und sicher auch gewünscht.
Aber die Sortierung von Text folgt anderen Regeln !

Code: Alles auswählen

   15
  -12
  -20
  300
 2000
 4000
-2000
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:

Code: Alles auswählen

-  12
-  20
-2000
   15
  300
 2000
 4000
  
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit positiven und negativen Zahlen

Beitrag von brandelh »

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:

Code: Alles auswählen

-2000 + 900000 => 898000
  -20 + 900000 => 899980 
  -12 + 900000 => 899988
  +15 + 900000 => 900015
 +205 + 900000 => 900205  
Klar ist man dann sehr abhängig davon, dass die Grenzwerte eingehalten werden ... beim Suchen muss die gleiche Funktion die Werte umrechnen...
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
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

Beitrag von Lutz Rübe »

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>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit positiven und negativen Zahlen

Beitrag von brandelh »

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
Im Prinzip könnte man zwar INDEX ON nFeld+1 machen, das bringt aber nichts.
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
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
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

Beitrag von Lutz Rübe »

Übrigens hier der Teil des Source-Codes, in dem die Ausgabe aufbereitet wird und auch die Sortierung:

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,"Fr WEITER eine Taste bet„tigen, EING L™SCH = Abbruch.",79)
**    READ
      wahl:=INKEY(0.0)
      SETCOLOR(standard)
      r=LastAppEvent()
   ENDIF
ENDDO
EJECT
oHBPrinter:EndDoc()
Wie Hubert erkennen wird, setzte ich seine Printroutinen erfolgreich ein. :) :)

Lutz
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit positiven und negativen Zahlen

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
BJelinek
Rekursionen-Architekt
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

Beitrag von BJelinek »

Hallo Lutz,

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.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
BJelinek
Rekursionen-Architekt
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

Beitrag von BJelinek »

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.
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit positiven und negativen Zahlen

Beitrag von brandelh »

da beide Positiv sind ist das solange kein Problem, wie deine Feldlängen nicht geändert werden müssen ... ;-)
Gruß
Hubert
Antworten