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
- [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>