Zurück zum Inhaltsverzeichnis - Lösungen und Tipps


Ortsnamenregister (einfach)

- schneider-lastin schneider-lastin - [ schaelkle | schaelkle ]

Musterdatei (kurzer Ausschnitt aus: Regine Schindler, Die Memorabilien der Meta Heusser-Schweizer [1797-1876] [Pfarrherren, Dicherinnen, Forscher, Bd. 1], Zürich 2007):

regtext.tf (70 KB]


Die Musterdatei enthält Registereinträge zu Ortsnamen, die mit <ort>……..</ort> markiert sind.
Ziel ist die Erstellung eines alphabetisch sortierten Registers der Ortsnamen; Referenzen sind die Satznummern der Quelldatei.
Ergebnis in der Datei 'regziel.tf':

Hausen am Albis  1.14
Hombrechtikon  1.5
Kappel am Albis  1.14
Schönenberg  1.3 1.8
Ufenau  1.7

Zentral sind im folgenden Skript die Zeilen mit der Makroanweisung „DICTIONARY“ (abgek.: „DICT“):

$$ DICTIONARY name CREATE

für die Einrichtung eines „Wörterbuchs“ mit dem Namen „name“ und für weitere Aktionen (hier „APPEND“ und „UNLOAD“ - siehe dazu im Handbuch).

$$ DICTIONARY name action/option key, num, cnt, value1, value2


Skript:

#makro
$$ MODE TUSCRIPT, {}

SET quelle = "regtext.tf"
ERROR/STOP  OPEN (quelle, READ, -STD-)
SET ziel = "regziel.tf"
ERROR/STOP  CREATE (ziel, SEQ-O, -STD-)
ERROR/STOP  ERASE (ziel)

BUILD R_TABLE ort = ":<ort>:"
BUILD S_TABLE anf = ":<ort>:"
BUILD S_TABLE end = ":</ort>:"

DICTIONARY register CREATE

COMPILE
ACCESS q: READ/RECORDS "{quelle}" sn.zn/un, text

LOOP/999999
   FIND/NEXT/EXIT q (-; ort; -; -)
   SET orte = EXTRACT (text, anf|, |end, 1, 0, "~~")
   SET orte = SPLIT (orte, ":~~:")
   SET ref = CONCAT (sn, ".", zn)
   LOOP ort = orte
      DICT register APPEND/QUIET ort, num, cnt, ref; " "
   ENDLOOP
ENDLOOP

ENDACCESS/PRINT q
ENDCOMPILE

DICT register UNLOAD ort, num, cnt, ref

SET register = CONCAT (ort, "  ", ref)

BUILD X_TABLE xs1 = "/ä/ae/ö/oe/ü/ue/ß/ss/%{1--2}{%}//"
BUILD X_TABLE xs2 = "/ä/az/ö/oz/ü/uz/ß/sz/"

SET sort = EXCHANGE (register, xs2)
SET index = ALPHA_INDEX (sort)
SET register = INDEX_SORT (register, index)
SET sort = EXCHANGE (register, xs1)
SET index = ALPHA_INDEX (sort)
SET register = INDEX_SORT (register, index)

FILE/ERASE "{ziel}" = register
*eof

Das Skript verlangt die TUSTEP-Version 2015!


Zurück zum Inhaltsverzeichnis - Lösungen und Tipps