AW: [Allegro] Indexcodes (Umsortierung)
Fischer, Thomas
fischer at sub.uni-goettingen.de
Mi Nov 10 15:39:55 CET 2010
Hallo Herr Eversberg!
> > Ich habe mal probeweise versucht, die Umlaute in die
> > Sortierreihenfolge hineinzuschieben, es scheint da aber
> > auch noch eine Grenze (256?)
> >für die Ordnungswerte zu geben.
> Sicher, sind ja Bytewerte. Antiquiert, ok, wissen wir. Aber
> Sie brauchen ja im Index gar nicht alle 256 Werte, viele
> fliegen ja per p/q raus, die brauchen keinen i-Wert.
Ist aber mühsam, genau nachzusehen, was denn alles vorkommen kann.
Aber wenn ich das weiß, kann ich das ja versuchen.
> Nach Indexerneuerung alles wie vorher? Ohne Erneuerung rührt
> sich nichts, das ist klar. (Der Index wird ja nicht im Moment
> der Anzeige erst mal geordnet, sondern liegt sortiert vor.)
> Vielleicht fangen Sie mit kleinen Schritten an, mit einem
> oder wenigen Zeichen.
> Und dem Ä können Sie nicht die 65 zuweisen, die hat schon das A.
Das ist natürlich richtig und sicher ein Teil des Problems.
Funktionieren sollte aber
i ö 112
i p/þ 113
, tut es aber nicht (ö an normaler Stelle hinter Ü und ä)
Wenn ich die zweite Zeile durch
i p/~ 113
oder auch
i p/× 113
ersetze, so wird ö wie gewünscht zwischen o und p einsortiert (ob das sinnvoll ist, ist eine andere Frage).
i p/ý 113
wiederum geht nicht, mit
i p/ÿ 113
wird wohl wieder der zulässige Zahlenbereich überschritten und A99 startet nicht.
Damit entsteht die Frage, welche Randbedingungen noch zu beachten sind, wenn man die Sortierung ändern möchte.
> > 2. Dass das Programm die Umsortierungstabelle auswertet und sie
> > zurückweist (mit entsprechender Fehlermeldung) wenn sie fehlerhaft
> > ist, so dass man nicht erst an Lücken im Register feststellt, dass
> > etwas schief gelaufen ist.
> Das wäre zu aufwendig für eine so selten genutzte Sache. Wenn
> wir intern alles prüfen, was in 1000 Fällen einmal vorkommen
> könnte, wird das Programm zäh wir Sirup.
Das glaube ich an dieser Stelle nicht. Es muss eine Tabelle erstellt werden, das passiert einmal beim Start des Programms, und wenn einer der Parameter den zulässigen Wertebereich verlässt, kann man das abfangen.
> Abgesehen davon, daß
> nun einmal grundsätzlich unsere Phantasie nicht reicht, alles
> vorherzusehen was andere falsch machen könnten UND was in
> Wechselwirkung mit anderen seltenen oder irregulären
> Vorkommnissen eintreten könnte. Kurz: Sie sprechen hier eine
> oft wiederholte, damit aber nicht realistischer werdende
> Maximalforderung aus.
Eigentlich ist das keine Frage der Phantasie, sondern der Technik: Ich halte es da mit Murphy: Was schief gehen kann, wird (irgendwann) schief gehen. Und wenn man im Programm Felder erzeugt, Speicher bereitstellt, Hashes auffüllt, muss man jedes Mal prüfen, ob das geklappt hat. Wenn man dafür immer dieselben zentralen Routinen nutzt, ist es kein großer Aufwand, entsprechende Tests einzubauen.
> > 3. Zur Vereinfachung die Möglichkeit, verschiedenen Buchstaben
> > denselben Sortierwert zuzuweisen (das wäre z.B. für é oder
> ô sinnvoll, wenn man solche Zeichen im Index haben will)
> Das geht *grundsätzlich* nicht. Da müssen Sie schon mit p/q
> den beiden Zeichen denselben Wert zuweisen. Erst auf diesen
> umgewandelten Werten operiert dann der i-Befehl!
Das ist seltsam, weil Sortierroutinen in anderen Programmen durchaus nicht eineindeutig sein müssen. Bei Perl geht das z.B. mit einem zusätzlichen Unterprogramm:
"If SUBNAME is specified, it gives the name of a subroutine that returns an integer less than, equal to, or greater than 0, depending on how the elements of the list are to be ordered." Der sort-Aufruf von C++ hat ein ähnliche Option.
> > Mir ist übrigens nicht ganz klar, was bei dem Beispiel im Handbuch
> > i ı 106 Zeichen ı erhält den Sortierwert 106
> >i j/z 107 j erhält 107, k 108 usw. bis z
> > (normalerweise wäre j=106 usw.)
> > mit Zeichen jenseits von z (z.B. ß) passiert.
> Direkt hinter z kommt {. Wenn Sie das nicht per p/q
> wegfiltern und es würde tatsächlich im Index vorkommen - tja,
> das würde irgendwie nicht gehen, wie wenn i und ı denselben
> Wert bekämen.
So etwas müsste dann doch abgefangen werden, oder? Denn ansonsten könnten an unvermuteter Stelle unangenehme Dinge entstehen, und wer käme schon darauf, dass es am "{" im Text liegt?
Mit freundlichen Grüßen
Thomas Fischer
Mehr Informationen über die Mailingliste Allegro