Vorbemerkung: Mit dem TXSTEP-Tag prepare-sort (entspricht dem TUSTEP-Kommando #svorbereite) können Texteinheiten zum Sortieren vorbereitet werden.
Zurück zum Inhaltsverzeichnis - Lösungen und Tipps
Sortieren einer Adressdatenbank
- [tomcbe | tomcbe]
Musterdatei:
adressen.tf [8 KB]
→ Die in der Datei angegebenen Adressen sind fiktiv.
Die Datenbank besteht aus den Rubriken
<v>Vorname</v>
<n>Nachname</n>
<p>Postleitzahl</p>
<o>Ort</o>
<s>Straße</s>
1. Mit dem folgenden Skript werden die Daten nach den Nachnamen, bei gleichem Nachnamen nach den Vornamen sortiert.
<?xml version="1.0" encoding="UTF-8"?>
<script xmlns="http://www.xstep.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variables>
<variable type="execution-file" name="exec">file:///Z:/Tustep/wiki/exec.tu</variable>
<variable type="permanent-file" name="source">file:///Z:/Tustep/wiki/adressen.tf</variable>
<variable type="permanent-file" name="dest" option="erase">file:///Z:/Tustep-Wiki/adr_sort.tf</variable>
</variables>
<prepare-sort source="$source" destination="-std-">
<define-prep-mode>
<no-ref></no-ref>
</define-prep-mode>
<define-text-units>
<text-unit-start>
<comparison-table><comparison-string>{{v}}</comparison-string></comparison-table>
</text-unit-start>
<text-unit-end>
<comparison-table><comparison-string>{{/s}}</comparison-string></comparison-table>
</text-unit-end>
</define-text-units>
<select-text-parts>
<text-part-start num="1">
<search-table><search-string>{{n}}</search-string></search-table>
</text-part-start>
<text-part-end num="1">
<search-table><search-string>{{/n}}</search-string></search-table>
</text-part-end>
<text-part-start num="2">
<search-table><search-string>{{v}}</search-string></search-table>
</text-part-start>
<text-part-end num="2">
<search-table><search-string>{{/v}}</search-string></search-table>
</text-part-end>
</select-text-parts>
<define-sort-keys>
<sort-key num="1" length="20">
<exchange>
<exchange-table>
<string-pair>
<search-string>ä</search-string><replacement-string>ae</replacement-string>
</string-pair>
<string-pair>
<search-string>ö</search-string><replacement-string>oe</replacement-string>
</string-pair>
<string-pair>
<search-string>ü</search-string><replacement-string>ue</replacement-string>
</string-pair>
<string-pair>
<search-string>ß</search-string><replacement-string>ss</replacement-string>
</string-pair>
</exchange-table>
</exchange>
</sort-key>
<sort-key num="2" length="20">
<exchange>
<exchange-table>
<string-pair>
<search-string>ä</search-string><replacement-string>az</replacement-string>
</string-pair>
<string-pair>
<search-string>ö</search-string><replacement-string>oz</replacement-string>
</string-pair>
<string-pair>
<search-string>ü</search-string><replacement-string>uz</replacement-string>
</string-pair>
<string-pair>
<search-string>ß</search-string><replacement-string>sz</replacement-string>
</string-pair>
</exchange-table>
</exchange>
</sort-key>
</define-sort-keys>
</prepare-sort>
<sort source="-std-" destination="-std-">
<sort-field num="1" start="1" length="sort-keys" remove-after-sort="yes"></sort-field>
</sort>
<transform source="-std-" destination="$dest" mode="+">
<new-line-before>
<search-table><search-string>{{{\a}}}</search-string></search-table>
</new-line-before>
<insert-blank-line-before>
<search-table><search-string>{{v}}</search-string></search-table>
</insert-blank-line-before>
</transform>
</script>
2. Um die Daten nach dem Ort, bei gleichem Ort nach der Postleitzahl zu sortieren, müssen nur die Angaben innerhalb von select-text-parts angepasst werden. Der erste Textteil für den Sortierschlüssel beginnt nun mit <o> und endet mit </o>, der zweite Textteil ist mit <p> und </p> gekennzeichnet.
<select-text-parts>
<text-part-start num="1">
<search-table><search-string>{{o}}</search-string></search-table>
</text-part-start>
<text-part-end num="1">
<search-table><search-string>{{/o}}</search-string></search-table>
</text-part-end>
<text-part-start num="2">
<search-table><search-string>{{p}}</search-string></search-table>
</text-part-start>
<text-part-end num="2">
<search-table><search-string>{{/p}}</search-string></search-table>
</text-part-end>
</select-text-parts>
