Suchworte in Allegro "fett" anzeigen lassen

GDachnowsky at t-online.de GDachnowsky at t-online.de
Mi Mär 19 10:00:36 CET 2003


Lieber Herr Deblon,

vielen Dank für Ihre Mühe, ich muss zwar zugeben, dass ich bis zu
einem
ausreichenden Verständnis der Allegro-Programmierung wohl noch ein
paar
Jährchen vor mir habe, doch unser Datenbankprogrammierer wird Ihre
Zeilen zu würdigen wissen. 

Nochmals besten Dank

Gangolf-T. Dachnowsky


Christoph Deblon schrieb:
> Von:            	GDachnowsky at t-online.de
> An:             	"Diskussionsliste Allegro-C"
> <allegro at buch.biblio.etc.tu-bs.de>
> Betreff:        	Suchworte in Allegro "fett" anzeigen
> lassen
> Datum:   	Mon, 24 Feb 2003 11:33:44 +0100 (CET)
> Antwort an:     	allegro at buch.biblio.etc.tu-bs.de
> 
> > Das Deutsche Volksliedarchiv will seine Datenbestände
> in
> > eine Allegro Datenbank überführen.
> >
> > Als Praktikant in der Wissenschaftlichen Dokumentation
> kümmere
> > ich mich um Datailfragen.
> >
> > Ein Wunsch von den meisten Mitarbeitern ist es, dass
> Suchworte in
> > der Ergebnisanzeige "fett" erscheinen. Wie lässt sich
> dies mit Allegro
> > verwirklichen.
> >
> > Gruss,
> >
> > Gangolf-T. Dachnowsky
> > Deutsches Volksliedarchiv
> 
> 
> Lieber Herr Dachnowsky,
> 
> ich hatte schon mal kurz geantwortet, aber das war nicht
> viel mehr
> als die Behauptung "es geht".
> 
> Inzwischen habe ich mich nochmals etwas mit der Frage
> befasst
> und kann ihnen nun eine Art Parametrier-Geruest schicken,
> das
> vielleicht Anregungen bietet.
> Es sollen die Suchworte markiert werden, die man bei
> einer
> Suchfrage im Findmenue eingegeben hat, aber es wird auch
> ein
> Indexeintrag, ueber den man zugegriffen hat, im Text
> markiert,
> sofern er dort vorkommt.
> 
> Die Parametrierung war fuer eine Volltext-Datenbank
> entworfen,
> als eigentliche auszugebende Kategorien daher hier nur
> #20.
> Das kann aber natuerlich erweitert werden.
> 
> Wie schon gesagt - ein Zeitproblem entstand bei mir durch
> die
> "zerhackte" Ausgabe nicht.
> 
> Hoffentlich kommen die Zeilen einigermassen ueber.
> 
> Mit freundlichen Gruessen
> Christoph Deblon
> 
> --------
> 
> Und hier zur Sache:
> 
> Zunaechst kommt in die _start.flx:
> 
> var "x var f\\asci\\ins #ufi"\ins #uX=
> 
> Diese Zeile haette ich allein auch nicht hingekriegt, sie
> stammt von
> Herrn Eger (vgl. Emails in der Liste von 12.6. bis
> 13.6.2002 mit
> Betreff "Findmenue Eingaben").
> 
> Der Effekt ist, das vor jeder Ausgabe der Autoflex #uX=
> augefuehrt
> wird, und die im Findmenue eingegebenen Suchworte in
> #ufi
> stehen, d.h. es ist noch etwas komplizierter - dazu siehe
> die
> Kommentare zu den Parametern.
> 
> 
> 
> 
> 			Parametrier-Geruest fuer Ausgabe mit markierten
> 			Suchworten
> 		     
> *********************************************************
> 
>                      ** Bei Zugriff ueber den Index ist
> #uxa mit der
>                      ** letzten Zugriffszeile belegt.
>                      ** Bei Zugriff ueber das Findmenue
> ist #ufi
>                      ** mit der Suchfrage belegt, die
> sich aus den
> 				   ** Eintraegen ergibt.
>                      ** (Das muss in _start.flx
> veranlasst werden.)
> 
> #dt df0 df1 df2 df3 dfx dtw Z
> 
> 				    ** Alle Variablen loeschen ausser
> 				    ** #ufi, #uxa, #ucf, #ucx
> 
> 
> #ufi +#uxa c"STI" p>f Z
> #ufi c"PER" p>f Z
> 
> 			    ** Falls (1) #ufi belegt ist und (2)
> 			    ** der Inhalt von #ufi wenigstens eine der
> 			    ** in den Indexparametern vorgegebenen Kuerzel
> fuer das
> 			    ** Findmenue (wie z.B. STI, PER usw.) enthaelt,
> handelt es
> 			    ** sich um einen Zugriff ueber das Findmenue.
> 			    **(#ufi ist auch dann belegt, wenn bei einem
> Zugriff ueber
> 			    ** den Index eine mehrfach belegte Indexzeile
> gewaehlt
> 			    ** wurde, d.h. eine Ergebnismenge entsteht; daher
> die
> 			    ** Pruefung mit "STI", "PER" usw.).
> 
>   			   ** Falls beide Bedingungen zutreffen, werden
>            	   ** im UP f die einzelnen Suchbegriffe aus
> dem
> 			   ** Ergebnismengentitel herausgezogen und in
> 			   ** #uf1, #uf2, #uf3 gespeichert.#
> 
> 
> #uxa y0 p"qq" P"qq" dfx afx   	** Falls #uxa belegt ist,
> wird diese in #ufx
> 							** gespeichert.
> 
> 							** (Da der Indexzeileninhalt im Text _genau_,
>                              	** (nicht trunkiert)
> verglichen werden soll,
>                              	** wird "qq" vor- _und_
> nachgestellt.)
> 
> 					** Nicht umkodieren, im Index ist ja schon
>                     	** umkodiert (anders die
> Findmenue-Suchworte
> 					** im UP f).
> 
>                        ** #ufi und #uxa koennen nicht
> geloescht werden,
>                        ** da Sie ja ggf. bei einem
> Zugriff fuer mehrere
>                        ** Titelanzeigen gelten koennten.
> 
>                        ** Wenn ein neuer Zugriff ueber
> denselben
>                        ** Suchweg (Index/Findmenue)
> erfolgt, ist das
>                        ** unproblematisch, da sie dann
> neu belegt
>                        ** werden.
> 
>                        ** Erfolgt aber ein neuer Zugriff
> ueber den
>                        ** jeweils anderen Suchweg, so
> bleibt die
>                        ** Variable des vorhergehenden
> Zugriffs
>                        ** bestehen. Daher:
> 
> #ufi +#dt =cf Z		** Wurde #ufi NEU belegt?
> 					** (#ucf dient zum Vergleich).
>       				** Wenn ja, zu Zeile #dt (#dt als Hilfskat.)
> 
> #uxa +#nr =cx Z       	** Wurde #uxa NEU belegt?
> 					** (#ucx dient zum Vergleich).
>                       	** Wenn ja, zu Zeile #nr (#nr =
> Hilfskat.)
> 
> #dts +#20. Z          	** Wenn weder #ufi noch #uxa neu,
> dann weiter
> 					** zur Ausgabe
> 
> #dt +#20. dfx Z        ** War #ufi neu, wird die aus #uxa
> gebildete
>                        ** #ufx mit Suchwort geloescht,
> dann weiter zur
>                        ** Ausgabe
> 
> #nr df0 df1 df2 df3 Z
> 					 ** War #uxa neu, werden die aus #ufi gebildeten
>                       	 ** #uf0, #uf1, #uf2, #uf3
> geloescht (vgl. UP f)
> 
> 
> 					***********************************************
> 
> 					** Die folgende Zeile vertritt die
> 					** "Kategorienliste", dh. hier muessen alle
> 					** auszugebenden Kategorien folgen einschliesslich
> 					** eventueller Formatierungen.
> 					** Die Kategorien, die dabei auf Suchwort hin
> 					** geprüft werden sollen, werden dabei uber das
> 					** Unterprogramm T ausgegeben.
> 
> 
> #20. ++ p>T m>T Z            	** Ausgabe #20. ueber
> Unterprogramm T
> 
> 
> 					***********************************************
> 
> 
> #+#                     	** HAUPTTEIL ENDE
> 
>           		   
> -----------------------------------------------
> 
> 
>                        	   UNTERPROGRAMME
> 
> 
> 
> #(T                   		 ** UP fuer Ausgabe
> 
> 
> 
> #cc dtw atw		     ** Die aktuelle Kategorie kommt in
> #utw
> 
> 		** #utw wird in einer Schleife in einzelne Worte
> zerlegt und mit der
> 		** Eingabe verglichen.
> 
> 		** (Die Eingabe-Suchworte stehen in #ufx
> (Indexeintrag)
> 		** bzw. #uf1, #uf2, #uf3 (Suchworte im Findmenue).
> Daher vier
> 		** Zerlegungs- und Vergleichszeilen.
> 		** Einem Indexeintrag wurde "qq" vor- und nachgestellt,
> damit er
> 		** _genau_ verglichen werden kann.
> 		** Den Suchworten wurde "qq" vorgestellt, damit sie
> rechts-, aber
> 		** nicht linkstrunkiert verglichen werden koennen.
> 
> 		** Faellt einer der Vergleiche positiv aus, wird zum
> 		** UP W gegangen, und dort das Wort _markiert_
> 		** ausgegeben.
> 
> 		** Andernfalls wird das Wort _unmarkiert_ ausgegeben.
> 
> 		** In e"[...]" die gewuenschten Trennzeichen eintragen
> 
> 		** Wg. Korrektheit des Vergleichs sofortige Umkodierung
> mit y2
> 
> #-t				** Schleife Einsprung
> 
> !utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 F34 p"qq" P"qq"
> c"~#ufx" p>w
> 
> !utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 p"qq" c"~#uf1" p>w
> !utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 p"qq" c"~#uf2" p>w
> !utw +#dt e"[ .,:;/-=()!?<>]" y2 f34 p"qq" c"~#uf3" p>w
> 
> 				** Nicht gueltige #ufx bzw. #uf1. #uf2, #uf3
> 				** wurden oben geloescht.
> 
> 
> #utw E"[ .,:;/-=()!?<>]"		** Ausgabe _unmarkiertes_ Wort
> 
> 							** (wg. "E" geschieht die Ausgabe
> 							** mit folgendem Trennzeichen, z.B.
> 							** Leer, Komma, Punkt usw.)
> 
> #dt Z						** Sprungmarke
> 
> #utw +t b"[ .,:;/-=()!?<>]" =tw Z    ** Schleifendende;
> #utw wird um das
> 								 ** jeweils erste WOrt verkuerzt, dann
>  								 ** Ruecksprung nach #-t
> 
> #)T				** UP T ENDE
> 
> 
> 
> 				** UP fuer Ausgabe markiertes Wort
> #(w
> 
> #utw E"[ .,:;/-=()!?<>]" p99 P98
> 
> 							** Gewuenschtes Zwischenteil fuer
> 							** Markierung (z.B. fett oder farbig
> 							** als Praefix, die jeweilige
> 							** Aufhebung als Postfix
> 
> 							** (wg. "E" geschieht die Ausgabe
> 							** mit folgendem Trennzeichen, z.B.
> 							** Leer, Komma, Punkt usw.)
> 
> #)w				** UP w ENDE
> 
> 
> 				** UP zur Ermittlung der Suchbegriffe
> #)f
> #ufi y0 ,"_(__" ,"_)__" ,"_STI _ _" ,"_PER _ _" df0 af0
> #uf0 y0 ,"_ and __" ,"_ or __" ,"_ not __" ,"_?__" df0
> af0
> 
> 				** in #ufi ist die formulierte Suchfrage
> gespeichert.
> 				** Die Kuerzel fuer die Suchaspekte (STI, PER usw.)
> 				** sowie die syntaktischen Ausdruecke (and, or , not,
> ()
> 				** usw.) werden eliminiert, so dass die Suchworte
> 				** uebrigbleiben und jetzt in #uf0 stehen.
> 
> !uf0 y2 f" " e" " p"qq" df1 af1
> !uf0 y2 f" " b" " f" " e" " p"qq" df2 af2
> !uf0 y2 f" " b" " f" " b" " p"qq" df3 af3
> 
> 			** Jetzt stehen die Suchworte in #uf1, #uf2, #uf3.
> 			** Durch Voranstellen von "qq" wird erreicht, dass sie
> fuer die
> 			** Markierung rechts-, aber nicht linkstrunkiert
> verglichen
> 			** werden.
> 
> 			** Wg. Korrektheit des Vergleichs sofortige
> Umkodierung mit y2
> 
> 
> #(f			** UP f ENDE
> 
> 
> Einschlaegige Codiertabelle nicht vergessen!
> 
> 
> 
> 
> 
> 



Mehr Informationen über die Mailingliste Allegro