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>

Zurück zum Inhaltsverzeichnis - Lösungen und Tipps