Sortierung

Still in use?

Moderator: Moderatoren

Antworten
singer
Rookie
Rookie
Beiträge: 6
Registriert: Mo, 07. Feb 2011 18:26

Sortierung

Beitrag von singer »

Hallo,

ich soll zu einem Programm einen Zusatz schreiben, der einen bestehenden Index verwendet.
Mein Problem ist, dass der Index die Telefonbuchsortierung (ä=ae) verwendet und ich diese nicht einstellen kann.
Leider kann ich weder die Umlaute aus dem Index eliminieren noch eine Reindizierung durchführen.

Angeblich soll die Telefonbuchsortierung mit einer DIN.OBJ oder DUDEN.OBJ erreicht werden.

Bei meinem Summer87 bzw. 5.2 und Tools 3 habe ich jedoch diese Dateien nicht gefunden.

Vielen lieben Dank für eine Hilfestellung
Gruß
Singer
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: Sortierung

Beitrag von brandelh »

Hi,

das mit den DIN etc. mag stimmen, aber das ist schon lange her ;-)
Allerdings ist es einfacher den Index mit einer Funktion um die Umlaute ä->ae zu erleichtern,
als alte Unterlagen zu finden...

Egal wie du es machen willst, mit dem bestehenden Index kann man keine andere Sortierung erreichen !
Man muss um diese OBJ zu nutzen, genauso neu compilieren und den Index neu erzeugen lassen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Sortierung

Beitrag von AUGE_OHR »

singer hat geschrieben:Angeblich soll die Telefonbuchsortierung mit einer DIN.OBJ oder DUDEN.OBJ erreicht werden.
Bei meinem Summer87 bzw. 5.2 und Tools 3 habe ich jedoch diese Dateien nicht gefunden.
DIN.OBJ gab es bei der Version v5.01a

DUDUN.OBJ ist nun Länder spezifisch und bei http://www.the-oasis.net/ nicht zu finden.
DUDEN.OBJ ist wohl "free" (steht nichts im Header) und deshalb darf ich es wohl hier an die Msg anhängen
DUDEN.ZIP
Cl*pper DUDEN.OBJ
(2.01 KiB) 342-mal heruntergeladen
gruss by OHR
Jimmy
singer
Rookie
Rookie
Beiträge: 6
Registriert: Mo, 07. Feb 2011 18:26

Re: Sortierung

Beitrag von singer »

Vielen Dank für die schnelle Hilfe!

Leider löst die duden.obj mein Problem nicht.
Die Erstellung eines Index zeigt, dass ohne duden.obj die Umlaute nach den Buchstaben angeordnet sind und mit duden.obj nach den jeweiligen Buchstaben eingereiht werden, also beispielsweise ä nach a.
Bei dem Index den ich durchsuchen soll werden die Umlaute gleichwertig zu der Kombination des jeweiligen Buchstaben mit e angesehen.
Daher scheint folgende Reihung auf: ab, aea, äb, aed, äx, ad, ba (Mit duden.obj: ab, aea, aed, ad, äb, äx, ba)

Weiss jemand wie diese Reihung erreicht werden kann und wo diese Files dabei waren?

Vielen lieben Dank für eine Hilfestellung
Gruß
Singer
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Sortierung

Beitrag von AUGE_OHR »

singer hat geschrieben:Daher scheint folgende Reihung auf: ab, aea, äb, aed, äx, ad, ba (Mit duden.obj: ab, aea, aed, ad, äb, äx, ba)
das sieht mir nach SOUNDEX() aus.
gruss by OHR
Jimmy
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: Sortierung

Beitrag von brandelh »

Hi,

es gibt für Deutschland 2 anerkannte Sortierfolgen, siehe wikipedia.

http://de.wikipedia.org/wiki/Alphabetische_Sortierung

in meinem CL5 Verzeichnis ( ich meine 5.2 von 1995) finde ich die DIN.OBJ ( von 1992) -
aber die Hilfedatei kann ich nicht mehr öffnen. Ich habe diese nie benutzt, sondern diese Funktion:

Code: Alles auswählen

*---------------------------------------------------------------------------
function keinumlaut (txt)            // keine deutschen Umlaute in INDEX - OEM TXT !
   local TextLen
   TextLen := len( Txt )             // Bei Indexen sind keine kürzeren
                                     // Rückgabewerte erlaubt !
   txt:=upper(txt)
   txt:=STRTRAN(txt,"Ä","AE")        //       A C H T U N G    !!!
   txt:=STRTRAN(txt,"Ö","OE")
   txt:=STRTRAN(txt,"Ü","UE")        
   txt:=STRTRAN(txt,"ß","SS")

   txt:= left( txt , TextLen )       // Schlüssellänge auf
                                     // alten Wert setzen
return txt
dies ist der einzige Weg um bei einer Suche nach "Müller" auch "Mueller" angezeigt zu bekommen.
Gruß
Hubert
singer
Rookie
Rookie
Beiträge: 6
Registriert: Mo, 07. Feb 2011 18:26

Re: Sortierung

Beitrag von singer »

Hallo,

Meine Versuche mit SOUNDEX waren nicht erfolgreich.

Ein Programm mit der Struktur

Code: Alles auswählen

sneu = keinumlaut(suchbegriff)
SEEK sneu
DO WHILE keinumlaut(&skey) <= sneu .AND. EOF() = .F.
  Weitere Bedingungen
  SKIP
ENDDO
funktioniert.
Gemäß dem Beispiel auf wikipedia liefert duden.obj die Österreichische Sortierung, ich würde jedoch DIN 5007 Var.2 (Telefonbuch) benötigen. Dann sollte es mit einem einfachen SEEK-Befehl ohne zusätzlichen Umformatierungen funktionieren (wahrscheinlich nicht nur einfacher sondern auch schneller).
Dem Namen nach dürfte die din.obj wohl eine Sortierung gemäß einer der ersten beiden Spalten des Beispiels von wikipedia bewirken - fragt sich nur welche. Ausprobieren konnte ich es leider nicht, da ich in meinem Verzeichnis von Clipper 5.2 vergeblich nach der Datei din.obj gesucht habe.

Daher die Frae, ob die din.obj auch "free" ist und mir zum Testen zur Verfügung gestellt werden kann, damit ich feststellen kann, welche Sortierung sich damit ergibt. Ansonsten wäre ich über einen Hinweis dankbar, in welchem Paket diese Datei dabei war und woher ich sie bekommen kann.
Gruß
Singer
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: Sortierung

Beitrag von brandelh »

Hi,

egal welche "Sortierung" du einstellst, ein seek auf "Müller" wird nie ein "Mueller" finden,
genau das war der Grund für mein KeinUmlaut(), die Sortierreihenfolge war für mich egal,
aber ich brauche alle Schreibweisen von Müller ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Sortierung

Beitrag von AUGE_OHR »

singer hat geschrieben:Meine Versuche mit SOUNDEX waren nicht erfolgreich.
hm ... und "wie" hast du es verwendet ?

Code: Alles auswählen

        USE Sales
        INDEX ON SOUNDEX(Salesman) TO Salesman
        SEEK SOUNDEX("Smith") 
        ? FOUND(), Salesman            // Resultat: .T. Smith

        SEEK SOUNDEX("Smythe")
        ? FOUND(), Salesman            // Resultat: .T. Smith
singer hat geschrieben:nicht, da ich in meinem Verzeichnis von Clipper 5.2 vergeblich nach der Datei din.obj gesucht habe.
es ist in der Version v5.01a vorhanden.
gruss by OHR
Jimmy
singer
Rookie
Rookie
Beiträge: 6
Registriert: Mo, 07. Feb 2011 18:26

Re: Sortierung

Beitrag von singer »

Hallo,
mein Problem ist, dass bei einer Reihung: Göbel, Goethe, Göthe, Götz, Goldmann im Index der Befehl SEEK Goldmann nichts findet, und der Zeiger (mit softseek) auf Göbel stehen bleibt, da Göbel als größer als Goldmann angesehen wird.
Um Goldmann finden zu können ist die Sortierung für mich daher wichtig. Dass Müller nicht gleich Mueller ist habe ich nicht zu verantworten, da der Index nicht von mir ist. Hier kommt es wohl auf den Benutzerkreis an, ob sichergestellt werden kann, dass Frau Müller auch entsprechend gesucht wird.
Mit der Verwendung der Funktion KEINUMLAUT (erweitert um die Kleinbuchstaben) kann erreicht werden, dass Göbel unabhängig von der Sortierung kleiner als Goldmann angesehen wird. Dann kann mit SKIP der Index weiter durchsucht werden - funktioniert, ist aber keine besonders elegante Lösung.
Hätte ich den Sourcecode des ursprünglichen Programms könnte ich alle Teile gleich kompilieren und das Problem wäre behoben. Da ich das nicht kann, bin ich auf die vorgegebene Reihenfolge im Index angewiesen.
Gruß
Singer
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Sortierung

Beitrag von AUGE_OHR »

singer hat geschrieben:Hätte ich den Sourcecode des ursprünglichen Programms könnte ich alle Teile gleich kompilieren und das Problem wäre behoben. Da ich das nicht kann, bin ich auf die vorgegebene Reihenfolge im Index angewiesen.
äh... wie bringst du den die *.OBJ ins Spiel wenn du keinen Source hast ?

"manipulierst" du nur die DBF ?
das *.OBJ muss doch in die Applikation eingebunden sein damit es "wirkt"

Frage : welche Version von Cl*pper verwendest du "International" oder "German" ?
gruss by OHR
Jimmy
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: Sortierung

Beitrag von brandelh »

singer hat geschrieben: Mit der Verwendung der Funktion KEINUMLAUT (erweitert um die Kleinbuchstaben) kann erreicht werden, dass Göbel unabhängig von der Sortierung kleiner als Goldmann angesehen wird. Dann kann mit SKIP der Index weiter durchsucht werden - funktioniert, ist aber keine besonders elegante Lösung.
Die Funktion KEINUMLAUT() indiziert UPPER(), somit muss man da keine kleinen Buchstaben hinzufügen. "meier" und "Meier" will man ja nicht wirklich unterscheiden oder ?
Gruß
Hubert
singer
Rookie
Rookie
Beiträge: 6
Registriert: Mo, 07. Feb 2011 18:26

Re: Sortierung

Beitrag von singer »

Hallo,
es gibt ein bestehendes Programm, mit dem die dbf-Datei und die ntx-Datei generiert werden. Für dieses Programm habe ich keinen Sourcecode.
Dazu soll ich ein weiteres Programm schreiben, welches die vorhandenen Dateien nutzt und weiterverarbeitet. Dazu habe ich natürlich den Sourcecode und kann die .obj beim Linken einbinden.
In dem Index wird sowohl zwischen Groß- und Kleinschreibung als auch zwischen ä und ae unterschieden, was ich übernehmen muss. Da die vorhandenen Dateien laufend geändert werden, soll ich die bestehende Indexdatei verwenden und nicht einen neuen Index generieren.
Ich habe einen Clipper87 und einen Clipper52, meines Wissens jeweils eine deutsche Version.
Gruß
Singer
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Sortierung

Beitrag von AUGE_OHR »

singer hat geschrieben:Ich habe einen Clipper87 und einen Clipper52, meines Wissens jeweils eine deutsche Version.
S87 NTX Index Dateien sind nicht (!!!) v5.x kompatibel !
singer hat geschrieben:... soll ich die bestehende Indexdatei verwenden und nicht einen neuen Index generieren.
dazu muss deine Application die selbe Cl*pper Version und OBJ enthalten.

starte mal deine Cl*pper v5.x Application mit //INFO
D:\DB3U>ascidiz.exe //INFO
Clipper (R) 5.2e Intl. (Rev. 216) GERMAN - GERMAN DBFNTX Collation
DS=520A:0000 DS avail=37KB OS avail=207KB EMM avail=0KB
ich habe also die "International" Version mit "GERMAN DBFNTX Collation"

solltest du keine "//INFO" bekommen so wird es vermutlich ein S87 Programm sein.
das kannst du auch mit diesem Tool testen
VAU.ZIP
Valkyrie Analysis Utility, Version 2.05
(19.99 KiB) 332-mal heruntergeladen
unter v5.01a habe ich die DIN.OBJ und die NT2GER.OBJ gefunden, aber in der v5.2e gibt es im \OBJ Verzeichniss das
Verzeichnis \CLIPPER5\OBJ
NATION BAT 3,809 31.05.95 5:25a
CHOOSE COM 96 31.05.95 5:25a
NAT_OBJ EXE 11,898 06-08-93 5:23p
die NAT_OBJ.EXE ist eine "gepackte" Datei und enthält die "Länder-spezifischen" MSG*.OBJ und NTX*.OBJ.
Es gibt dazu ein README.DOC wo in Kapitel 4 steht
Um den für Ihr Land verwendeten Treiber zu installieren, starten Sie
die Datei NATION.BAT, die Sie im Verzeichnis \CLIPPER5\OBJ finden
und folgen Sie den Bildschirm-Anweisungen. Es werden Ihre landes-
spezifischer Meldungstreiber in die Datei MSG.OBJ, der DBFNTX Treiber
für die Sortierreihenfolge in die Datei NTXSORT.OBJ sowie der DBFMDX
Treiber in die Datei MDXSORT.OBJ kopiert.
ich habe also ein NtxGer.obj
NTXSORT v1.21e x15 24/Jun/93 - GERMAN DBFNTX
wo die Umlaute ÄÖÜ nach Z kommen
gruss by OHR
Jimmy
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: Sortierung

Beitrag von brandelh »

singer hat geschrieben:Hallo,
es gibt ein bestehendes Programm, mit dem die dbf-Datei und die ntx-Datei generiert werden. Für dieses Programm habe ich keinen Sourcecode.
Dazu soll ich ein weiteres Programm schreiben, welches die vorhandenen Dateien nutzt und weiterverarbeitet.
Jetzt wird mir einiges klarer, ... ich sag nur ÜBEL ÜBEL !!!

Aber du kannst mit einem Programm die DBF und den Index öffnen,
Den aktuellen Indebegriff mit IndexKey( <nIndex> ) --> cIndexKey abfragen und verschiedene Einstellungen probieren.
Es gab früher auch ein Programm, das eine Clipper-EXE in Quellcode übersetzt hat, such mal nach "clipper exe decompiler" ich habe damit aber keine Erfahrungen.

PS: mit DOSBOX (ein Tool) habe ich auch unter Win7-64Bit erfolgreich meine alte Clipper-EXE laufen lassen können, habe diese aber mittlerweile im "1:1" Verfahren nach Xbase++ umgesetzt.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Sortierung

Beitrag von Jan »

Wäre es nicht eine Möglichkeit, daß das neue Programm zwar den alten, nicht nutzbaren Index mitzieht, aber einen neuen mit den geforderten Sortiermöglichkeiten erstellt?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
singer
Rookie
Rookie
Beiträge: 6
Registriert: Mo, 07. Feb 2011 18:26

Re: Sortierung

Beitrag von singer »

Hallo,

das bestehende Programm ist gemäß vau.exe mit: Compiler is Clipper Summer '87 compiliert.

Mit meinem Summer 87 Compiler erhalte ich dasselbe Ergebnis - hat es hier Unterschiede gegeben und wie stelle ich fest, welche Version ich habe.
Ich habe von Pearl die "fast geschenkt Gold Edition von Clipper 5.2" und auf der CD ist auch ein installierter Clipper Summer '87.

Bei mir scheinen die mit Clipper 5.2 compilierten Programme die dbf-Datei und die NTX-Datei (mit dem bestehenden Programm erstellt, also Summer '87) öffnen und verarbeiten zu können - bis auf dass die Sortierung nicht stimmt und daher mit SEEK alleine viel nicht gefunden wird. Mit \\info erhalte ich die Meldung: Clipper (R) 5.2d Intl. (Rev. 215) German - German DBFNTX Collation.

Auch mit Harbour und XHarbour konnte ich die Datenbank und den Index grundsätzlich verwenden, allerdings ebenso mit den Problemen der Indexsortierung.

Gab es bei Summer '87 auch verschiedene Versionen? Ich habe folgende Dateien:
  • 01.04.1990 01:00 | 172.301 | CALC.LIB
    02.04.1994 22:54 | 79.111 | CLIPPER.EXE
    21.12.1987 03:00 | 307.019 | CLIPPER.LIB
    21.12.1987 03:00 | 57.986 | DEBUG.OBJ
    21.12.1987 03:00 | 82.189 | EXTEND.LIB
    01.06.1989 04:00 | 138.169 | NT2.LIB
    01.06.1989 04:00 | 18.187 | NTOOLD87.OBJ
    21.12.1987 03:00 | 83.824 | PLINK86.EXE
    05.04.1992 10:46 | 251 | __WAIT_A.OBJ
Da die Datenbank oft geändert wird möchte ich es vermeiden einen neuen Index zu erstellen. Mit der Verwendung einer modifizierten Funktion von KEINUMLAUT und SKIP kann ich den Index so lange durchgehen, bis ich an der richtigen Stelle bin.
Gruß
Singer
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Sortierung

Beitrag von AUGE_OHR »

singer hat geschrieben:das bestehende Programm ist gemäß vau.exe mit: Compiler is Clipper Summer '87 compiliert.
dann könnte man es ja "decompilieren"
singer hat geschrieben:Mit meinem Summer 87 Compiler erhalte ich dasselbe Ergebnis - hat es hier Unterschiede gegeben und wie stelle ich fest, welche Version ich habe.
es gab den Y2K fix
singer hat geschrieben:Ich habe von Pearl die "fast geschenkt Gold Edition von Clipper 5.2" und auf der CD ist auch ein installierter Clipper Summer '87.
die "kenne" ich ;)
singer hat geschrieben:Bei mir scheinen die mit Clipper 5.2 compilierten Programme die dbf-Datei und die NTX-Datei (mit dem bestehenden Programm erstellt, also Summer '87) öffnen und verarbeiten zu können - bis auf dass die Sortierung nicht stimmt und daher mit SEEK alleine viel nicht gefunden wird.
es ist lange her ... aber es gab da Unterschiede ...
singer hat geschrieben:Mit \\info erhalte ich die Meldung: Clipper (R) 5.2d Intl. (Rev. 215) German - German DBFNTX Collation.
du solltest auf die "e" updaten.
suche mal bei http://www.the-oasis.net/
singer hat geschrieben:Auch mit Harbour und XHarbour konnte ich die Datenbank und den Index grundsätzlich verwenden, allerdings ebenso mit den Problemen der Indexsortierung.
hm ... hast du auch Xbase++ ?
singer hat geschrieben:Gab es bei Summer '87 auch verschiedene Versionen? Ich habe folgende Dateien:
  • 01.04.1990 01:00 | 172.301 | CALC.LIB
    02.04.1994 22:54 | 79.111 | CLIPPER.EXE
    21.12.1987 03:00 | 307.019 | CLIPPER.LIB
    21.12.1987 03:00 | 57.986 | DEBUG.OBJ
    21.12.1987 03:00 | 82.189 | EXTEND.LIB
    01.06.1989 04:00 | 138.169 | NT2.LIB
    01.06.1989 04:00 | 18.187 | NTOOLD87.OBJ
    21.12.1987 03:00 | 83.824 | PLINK86.EXE
    05.04.1992 10:46 | 251 | __WAIT_A.OBJ
die DIN.OBJ ist für S87 gedacht
singer hat geschrieben:Da die Datenbank oft geändert wird möchte ich es vermeiden einen neuen Index zu erstellen. Mit der Verwendung einer modifizierten Funktion von KEINUMLAUT und SKIP kann ich den Index so lange durchgehen, bis ich an der richtigen Stelle bin.
wenn ÄÖÜ nach Z eingeordnet wird (v5.x NTXGER.OBJ) muss es funktionieren.
gruss by OHR
Jimmy
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: Sortierung

Beitrag von brandelh »

Hi,

soweit ich mich an die alten Zeiten erinnern kann, hat es auch damals schon geheißen,
dass man die Indexe mit dem neuen Compiler wieder neu erstellen soll.

Wenn du mit DBU die DBF aufmachst, müsstest du den Indexbegriff ablesen können.
Gruß
Hubert
Antworten