<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1634" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face="Courier New" size=2>Liebe Listenleser,</FONT></DIV>
<DIV><FONT face="Courier New" size=2>besonders Herren Hellmann, Osthof,
Gasperlin und nun auch Trauth,</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT> </DIV>
<DIV><FONT face="Courier New" size=2>weil ich die von mir (e-mail vom 6.8.
19:15) als möglich angedeutete Erweiterung wirklich brauchte, habe ich eine
konventionelle Lösung hingeschrieben, die ich Ihnen nicht vorenthalten
möchte.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Sie ersetzt das Register-Aufbereite mit
einem einzigen Parameter durch ein Kopiere mit 27 Parametern, leistet
natürlich auch mehr. Zunächst das kleine Programm (das man sich natürlich
über den Windows-Zwischenspeicher leicht in eine TUSTEP-Datei holen
kann):</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT> </DIV>
<DIV><FONT face="Courier New"
size=2>#SVORBEREITE,qq,-STD-,-,+,*,,-<BR>ssl
200<BR>*eof<BR>#SORTIERE,-STD-,-STD-,1+200'0,+,1+200<BR>#KOPIERE,-STD-,zz,+,*,,-<BR>
0 w n j 2 3 4 5<BR>spr
1 11 21 13 12 21 9 8 8 ist |
Trennzeichen?<BR>spr 2 8 8 25 23
8 0 8 31 ganze Parameter übereinstimmend?<BR>spr
3 8 8 35 33 8 51 8 51 auch
Groß/Kleinschreibung?<BR>spr 5 8 8 55
53 8 3 8 3 Abweichung in
Austauchzeichenfolge?<BR>ws+ 1 ws1<BR>pos
1 11<BR>ta+ 1 -|-<BR>mld
1 :@@@@@@@@ Trennzeichen ist nicht |; bitte unten in
Parameter:<BR>mld 1 :@@@@@@@@ av 2
statt | das benutzte Trennzeichen einsetzen!:<BR>wss 1
ws1<BR>vgl 2 0<BR>vtz 2
2<BR>mld 2 |@@@@ Parameter mit vorangehendem identisch,
daher gelöscht:|<BR>xv 3
|<*|<-01|<BR>vgl 3 0<BR>vtz
3 3<BR>mld 3 |@@@@@@@@ Parameter bis auf
Groß-/Kleinschreibung mit<BR>mld 3 |@@@@@@@@
vorangehendem identisch, bitte einen
löschen!|<BR>
Vorausgesetzt, "|" ist Trennzeichen:<BR>av 5
:|:<BR>ev 5 = av 5<BR>vgl
5 0<BR>vtz 5 5<BR>mld
5 |@@@@@@@@ Vergleich mit vorangehendem
Parameter:|<BR>mld 5 |@@@@@@@@ Suchzeichenfolge
identisch, Austauschzf. verschieden;|<BR>mld 5 |@@@@@@@@
bitte in Quell- oder Zieldatei einen Parameter löschen.|<BR>*eof</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT> </DIV>
<DIV><FONT face="Courier New" size=2>Die Leistung des alten Regiser-Aufbereite
steckt hier im 2. Durchgang: Jeder Satz wird in den Merk-Vergleichtext gesteckt,
dann der nächste mit ihm verglichen und, wenn er identisch ist, nicht
ausgegeben, wohl aber gemeldet (es könnte ja für die Fehlersuche interessant
sein zu erfahren, welche Sätze doppelt sind; wen das stört, der kann im
Parameter spr 2 aus der 23 eine 0 machen).</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Ein nicht gar so kleiner Unterschied:
Register-Aufbereite behandelt Groß- und Kleinbuchstaben gleich, Kopiere
unterscheidet sie, d.h. die Parameter</FONT></DIV>
<DIV><FONT face="Courier New"
size=2>xx |g|GmbH|</FONT></DIV>
<DIV><FONT face="Courier New" size=2>xx
|g|GMBH|</FONT></DIV>
<DIV><FONT face="Courier New" size=2>sind für #RA identisch, also wird nur der
zuerst vorkommende ausgegeben; Kopiere unterscheidet sie und ermöglicht eine
Auswahl nach nicht-zufälligen Kriterien.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Natürlich wollen wir auf diese Fälle
hingewiesen werden. Das geschieht im 3. Durchgang, wo wir mit xv
Großbuchstaben für den Vergleich wie die entsprechenden Kleinbuchstaben
behandeln, so daß nun doch wieder 2 identische Sätze hintereinander(zu)stehen
(scheinen).</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Im 5. Durchgang schließlich werden nur
die <EM>Such</EM>zeichenfolgen aufeinanderfolgender Parameter verglichen; sind
sie identisch, wie in folgendem Beispiel:</FONT></DIV>
<DIV><FONT face="Courier New" size=2>xx
|g|Gesellschaft mit beschränkter Haftung|</FONT></DIV>
<DIV><FONT face="Courier New" size=2>xx
|g|GmbH|</FONT></DIV>
<DIV><FONT face="Courier New" size=2>dann liegt ein Fehler vor, denn ganz
identische Parameter sind ja an dieser Stelle schon eliminiert. Um die
Suchzeichenfolgen zu isolieren, muß das Trennzeichen bekannt sein, da es ja die
Suchzeichenfolgen begrenzt. Hier wird, wie auch von Herrn Osthof, der senkrechte
Strich angenommen. Ob das wirklich so ist, wird beim ersten Satz im 1. Durchgang
geprüft.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Man kann das alles auch in ein
Kommandomakro stecken und Quelle, Ziel und Trennzeichen variabel
machen.</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT> </DIV>
<DIV><FONT face="Courier New" size=2>Auch für diese erweiterte
Erweiterung ist natürlich eine Lösung in der Makrosprache denkbar und zu
erwarten.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>In einer Anwendung zur
Inkunabelkatalogisierung (INKA) habe ich die Kleinigkeit von 83788
TTT-Parametern, durchschnittliche Länge 71 Zeichen. An diesen habe ich Herr
Osthofs erste Lösung ausprobiert: sie läuft schnell und tadellos. Mit der
doppelten Menge ging es auch, mit den dreimal hintereinanderkopierten kam aber
die Fehlermeldung</FONT></DIV>
<DIV><FONT face="Courier New" size=2>"Daten zu umfangreich (>16
MB)".</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Das sollte ein Härtetest sein; in der
Praxis werden 250.000 Parameter selten sein. Wenn doch, dann gibt es ja immer
noch die Kommandos - siehe oben.</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT> </DIV>
<DIV><FONT face="Courier New" size=2>Mit freundlichen Grüßen</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Friedrich Seck</FONT></DIV>
<DIV><BR><FONT face="Courier New"
size=2>--------------------------------------<BR>Dr. Friedrich Seck<BR>72076
Tübingen, Erlenweg 18<BR>Tel: (0 70 71) 96 49 40<BR>Fax-Nummer auf
Anfrage</FONT></DIV>
<DIV><FONT face="Courier New" size=2>----- Original Message ----- </FONT>
<DIV><FONT face="Courier New" size=2>From: "Matthias Osthof" <</FONT><A
href="mailto:matthias.osthof@t-online.de"><FONT face="Courier New"
size=2>matthias.osthof@t-online.de</FONT></A><FONT face="Courier New"
size=2>></FONT></DIV>
<DIV><FONT face="Courier New" size=2>To: <</FONT><A
href="mailto:tustep-liste@itug.de"><FONT face="Courier New"
size=2>tustep-liste@itug.de</FONT></A><FONT face="Courier New"
size=2>></FONT></DIV>
<DIV><FONT face="Courier New" size=2>Sent: Thursday, August 06, 2009 10:29
PM</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Subject: Re: [Tustep-Liste]
Kopiere-Austauschtabelle</FONT></DIV></DIV>
<DIV><FONT face="Courier New"><BR><FONT size=2></FONT></FONT></DIV><FONT
face="Courier New" size=2>Diskussionsforum Tustep-Liste<BR>Weitere
Informationen: </FONT><A href="http://www.itug.de"><FONT face="Courier New"
size=2>www.itug.de</FONT></A><BR><FONT face="Courier New"
size=2>------------------------------------------------------------<BR><BR>Lieber
Herr Seck, lieber Martin,<BR><BR>> Natürlich kann man sich auch eine
weitergehende Lösung ausdenken, <BR>> die auf den genannten Fehler
hinweist.<BR>Die Tabelle enthält nach dem Sortieren und Eliminieren
von<BR>Mehrfacheintragungen noch Einträge der
Art:<BR>xx
|aaa|bbb|<BR>xx
|aaa|falsch| <BR><BR>Der LOOP isoliert bei jedem Eintrag in der
Liste die Suchzeichenfolge mit<BR>EXTRACT() und vergleicht sie mit der in x_alt
gespeicherten des<BR>vorangehenden Eintrags. Wenn beide identisch sind, gibt er
den Parameter in<BR>einer (in dieser Form spartanischen) Meldung aus. Man könnte
das Ganze<BR>benutzerfreundlicher gestalten, darauf habe ich der
Übersichtlichkeit halber<BR>verzichtet.<BR><BR><BR>SET xx = FILE
("params")<BR>SET xx = ALPHA_SORT (xx)<BR>SET xx = REDUCE (xx)<BR><BR>SET x_alt
= ""<BR>BUILD S_TABLE trenner = ".|."<BR>LOOP lp = xx<BR> SET x_neu =
EXTRACT (lp, 12, trenner)<BR> IF (x_alt.EQ.x_neu)
THEN<BR> + @@@@@@@@ {lp}<BR> ENDIF<BR> SET x_alt =
x_neu<BR>ENDLOOP<BR><BR>FILE/ERASE/PROGRAM "params" = xx <BR><BR><BR>Einen
schönen Abend wünscht<BR>Matthias Osthof<BR></FONT></BODY></HTML>