[Allegro] Zusammenfassung von Kategorien per FLEX

Fischer, Thomas fischer at sub.uni-goettingen.de
Di Mär 1 17:08:39 CET 2016


Liebe KollegInnen,

angeregt durch Herrn Eversbergs Bemerkung ("FLEX *ist* erheblich einfacher für diese Aufgabe und,
wie der Name schon suggeriert, zudem erheblich flexibler") und befördert durch Herrn Egers Beispiel ":collect_and_put" habe ich mal versucht, die Aufgabe per FLEX zu bewältigen – dabei lernt man ja auch immer etwas.
Die Ergebnisse finden sich am Ende dieses Briefes, hier eine kurze Auswertung meiner Erfahrungen.
Flexibilität gewinnt man insofern, als man die betrachteten Felder relativ einfach in Variablen angeben kann, das wäre allerdings (mit w) auch in der Exportsprache möglich.
Probleme bereitet (wie von mir erwartet) das Abarbeiten der Folgekategorien, was je nach Situation mühsam oder eventuell so gar nicht möglich ist, wenn die Liste der möglichen Folgekategorien extrem lang wird (HFM?). Ich habe eine Version 2 hinzugefügt, in der die Folgekategorien nicht vorab angegeben werden müssen.
In meinen kleinen überschaubaren Mengen kann ich keine Laufzeitunterschiede feststellen.

1. In beiden Versionen wird die interne Variable in $temp zwischengespeichert, da würde man ein wenig gewinnen, wenn man sie direkt ansprechen könnte (wie $_ in Perl, z.B. als iV). Insbesondere das Zusammenfassen der Werte (meine zweiten Bedenken) könnte dann vereinfacht werden.

2. Die Dokumentation besagt:
	#nn+  	Alle Datenfelder #nnx, getrennt durch Code 10 (^J). Interessant bei HFM-Feldern.
Da sollte darauf hingewiesen werden, dass *zusätzlich* dem Inhalt des Feldes noch ein Spatium vorangestellt wird, das hat mir zwischenzeitlich Probleme in meiner Version 2 bereitet. (Das fiel zunächst nicht auf, weil Doppelspatien beim Speichern verschwinden.)

3. Inwieweit sich Herrn Eversbergs Aussage hier bestätigt, mag jeder selbst entscheiden, ich habe zum Vergleich die Version "Globale Manipulation" als dritte Version unten angehängt. Ich kann allerdings nicht ausschließen, dass es mit FLEX auch wesentlich kürzer, einfacher oder eleganter geht; dies ist meinem aktuellen Kenntnisstand geschuldet.

Mit freundlichen Grüßen
Thomas Fischer



--——— Version 1 —————

 //--------------------------------------
		:collect_and_put
		(Basierend auf einem Vorschlag von A. Eger)
 //--------------------------------------

 // zuerst zu durchsuchende Kategorie definieren (bleibt unverändert)
var "#451"
ins $Suchfeld
 // hier landet der Gesamttitel (mit "Nachlass")
var "#451 "
ins $gesamttitel

first
:Mengenschleife
// dann Liste der erwarteten Folgezeichen
var " ABCDEFG"
ins $Folgezeichen
 // in dieser Kat (Paralleltitel) soll alles gesammelt werden, was nicht mit "Nachlass" beginnt
var "#080p"
ins $parallel

:Satzschleife
var $Suchfeld $Folgezeichen (0,5)
var
if "Nachlass" ins $titel; jump Löschen
ins $temp
if "" jump nextChar
var $parallel "; " $temp
ins $parallel
 // übernommene Kat löschen
:Löschen
var $Suchfeld $Folgezeichen (0,5)
ins

:nextChar
 // "verbrauchtes" Folgezeichen aus Liste löschen
var $Folgezeichen (1,0)
ins $Folgezeichen
if not "" jump Satzschleife

// Einträge im Satz
var $parallel
ins
var $gesamttitel $titel
ins
 // aktivieren, wenn Test o.k.
// put
next
if yes jump Mengenschleife

sho rec
display "("
end

--——— Version 2 —————

 //--------------------------------------
		:Sammeln und Speichern
		(Alternative Methode)
 //--------------------------------------

 // zuerst zu durchsuchende Kategorie definieren (bleibt unverändert)
var "#451"
ins $Suchfeld
 // hier landet der Gesamttitel (mit "Nachlass")
var "#451 "
ins $gesamttitel

first
:Mengenschleife
// dann Liste der erwarteten Folgezeichen

:Satzschleife
 // in dieser Kat (Paralleltitel) soll alles gesammelt werden, was nicht mit "Nachlass" beginnt
var "#080p"
ins $parallel
var $Suchfeld "+"
var
ins $parGes

:Schleife
// Einträge sammeln
var $parGes (5,0 e"^J")
if " Nachlass" ins $titel;jump Löschen
ins $temp
var $parallel $temp "; "
ins $parallel
// Feld löschen
:Löschen
var $parGes (0,5)
ins
var $parGes (b"^J")
ins $parGes
if not "" jump Schleife

// Einträge im Satz
var $parallel
ins
var $gesamttitel $titel
ins
 // aktivieren, wenn Test o.k.
// put
next
if yes jump Mengenschleife

sho rec
display "("
end

--——— Version 3: Globale Manipulation —————

#-#
#nr dxy dyz dzz
#451. ++ P>X

#-y
#uzz e"\020" M
#uzz +y dzz F"\020" b"\020" Azz

#uyz p'#080p' t2 M
#uxy p'#451 ' M
#+#

#(X
#cca e5 P'\020' Azz
#cc +- c'Nachlass' Axy
#cc P'; ' Ayz
#)X

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 842 bytes
Beschreibung: Message signed with OpenPGP using GPGMail
URL         : <http://bibservices.biblio.etc.tu-bs.de/pipermail/allegro/attachments/20160301/16aa143d/attachment.sig>


Mehr Informationen über die Mailingliste Allegro