Indexsortierung

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Indexsortierung

Beitrag von Manfred »

Hi,

ich habe folgende Struktur:

land -> Char
reserve -> logisch
lagernr -> numerisch
Genre -> Char
Interpret -> Char

Die Indizierung soll auf Land sein.

Innerhalb des Landes soll auf reserve sortiert werden

und innerhalb Reserve auf wenn Reserve, dann lagernr
wenn nicht Reserve dann Genre+Interpret

wie löst man das am besten?

So weit bin ich jetzt

upper(land) + If(reserve,'J','N')

aber jetzt wird des heikel, wie kann ich zwischen "J" und "N" eine weitere Differenz wie oben beschrieben machen? Oder muß ich da anders vorgehen? Mit Subindex, oder wie die Dinger heißen?
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!!
AndreasL
Rookie
Rookie
Beiträge: 4
Registriert: Sa, 02. Feb 2008 12:55
Wohnort: Bielefeld

Beitrag von AndreasL »

Hallo Manfred,
der Anfang ist schonmal ganz gut. Den Rest würde ich so lösen:
upper(land) + If(reserve,'J','N') + left(if(reserve,str(lagernr,10),Genre+Interpret)+space(50),50)
Der Wert 50 ersetzen durch die Länge der Felder Genre+Interpret, aber mindestens 10.
Gruß / Andreas
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Andreas,

Hm,

das mit dem Left() kann ich jetzt nicht so genau einordnen.
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
das ist eine "Krücke", da ein Indexausdruck ja immer eine einheitliche Länge haben muss, Du aber verschiedene Felder in Deinem Index (in Abhängigkeit einzelner Felder) unterbringen willst!
Also musst Du den letzten Teil "gleich lang" machen!
Die beiden Felder Genre+Interpret müssen also in Summe so lang sein, wie das Feld lagernr!
Wie lang sind denn Genre und Interpret?
Du könntest auch statt left(...+space(50),50) die Zahl in der Funktion str(... auf die Summe der Feldlängen von Genre und Interpret setzen, das würde auch reichen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

ah,

ich Depp habe das Left in Gedanken auf das logische Feld bezogen.
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!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Aber eine Frage habe ich noch:

Lagernr = 6
Genre = 20
Interpret = 50

dann müßte doch eigentlich

Code: Alles auswählen

Upper(land) + if(reserve,'J','N') +  if(reserve,Str(lagernr,6,0)+Space(64),genre+interpret)

genug sein, oder?
Zuletzt geändert von Manfred am Mi, 23. Apr 2008 18:31, insgesamt 1-mal geändert.
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Manfred,
völlig egal - Hauptsache, der Ausdruck ist gleich lang!
Egal ob:

Code: Alles auswählen

Upper(land) + iif(reserve,'J','N') + iif( reserve, Str(lagernr,6,0)+Space(64),genre+interpret)
Upper(land) + iif(reserve,'J','N') + iif( reserve, Str(lagernr,70,0),genre+interpret)
Upper(land) + iif(reserve,'J','N') + left( iif( reserve, Str(lagernr,6,0),genre+interpret) + Space(64), 64 )
Dein Fehler in Deinem Ausdruck (iif und das zweite Mal vergessen) habe ich korrigiert.
War übrigens eine gute Idee von Andreas - auf die "Krücke" wäre ich nicht gekommen, ich wollte vorhin schon antworten: geht nicht!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Fehler?

Ich weiß nicht was Du meinst :D

Ich mußte auch erstmal staunen, was so alles möglich ist. Ich glaube wenn das die anderen Programmierer wüßten, was Xbase++ so alles kann.....

Oder kann man das in den anderen Sprachen auch?
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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Indexsortierung

Beitrag von AUGE_OHR »

Hi,
Manfred hat geschrieben: upper(land) + If(reserve,'J','N')

aber jetzt wird des heikel, wie kann ich zwischen "J" und "N" eine weitere Differenz wie oben beschrieben machen? Oder muß ich da anders vorgehen? Mit Subindex, oder wie die Dinger heißen?
warum einfach wenn es auch komplizert geht ...

warum machst du daraus nicht 2 oder 3 oder 4 Indexe ?
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Jimmy,

das war ja meine Anfangsfrage, wenn Du eine Idee hast, dann schieß man los....
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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben: das war ja meine Anfangsfrage, wenn Du eine Idee hast, dann schieß man los....
Den Anfang (1st Index) hast du doch schon mit

Code: Alles auswählen

upper(land) + If(reserve,'J','N') 
nun würde ich erstmal ein SEEK() ausführen um den neunen Datensatz
zu erhalten dann eine Prüfung was nun ansteht und "umschalten" auf den
nächsten Index
und innerhalb Reserve auf wenn Reserve, dann lagernr
wenn nicht Reserve dann Genre+Interpret
also du hast mit "reserve" = "J"/"N" ein SEEK() gemacht und damit doch
schon die Entscheidung getroffen. Bei einem FOUND() kommt der Index
mit der "LagerNr" dran und sonst der Index mit "Genre+Interpret", oder?

Das SEEK()/FOUND() meine ich nun als "Logic" die dann "entscheidet"
welcher Index nun dran ist.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Oops,

da muß ich jetzt aber sagen, dass ich dass recht kompliziert finde. Wenn das mit dem Vorschlag von Andreas so klappt, dann ist das doch einfacher.

Gut, ich habe natürlich nicht das Einsatzgebiet genannt.

Die Tabelle wird gefüllt und dann nur einfach ausgedruckt. Sie muß halt in der Reihenfolge gedruckt werden. Nach Ländern sortiert, dann käme eh ein Seitenvorschub und innerhalb des Landes halt so, das Reserve zuerst kommt und dann der Rest.

Obwohl ich immer noch so meine Probleme habe der Lösung gedanklich zu folgen, aber in ein paar Stunden weiß ich mehr.
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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben: Die Tabelle wird gefüllt und dann nur einfach ausgedruckt.
das hatte ich nun nicht mitbekommen ... dann kann der Index ja auch
temporär sein und muss nicht "gepflegt" werden, den da sah ich bei den
Vorschlägen das Problem.
gruss by OHR
Jimmy
Antworten