Modul:AdressenSort: Unterschied zwischen den Versionen

Aus Cowboy's Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „local p = {} function p.convert(frame) -- Lese Parameter local rohadresse = frame.args[1] -- Ersetze eckige Klammern local adresse = mw.us…“)
 
(kein Unterschied)

Aktuelle Version vom 7. Oktober 2014, 20:06 Uhr

local p = {} function p.convert(frame)

    -- Lese Parameter
    local rohadresse = frame.args[1]
    -- Ersetze eckige Klammern
    local adresse = mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(rohadresse,'%<',),'%|',),'%]',),'%[',)
    -- Ermittle die Gesamtlänge des Strings
    local adresslaenge = mw.ustring.len(adresse)
    -- Finde heraus, wo die Hausnummer beginnt (erstes Auftreten einer Ziffer)
    local nummernstart = mw.ustring.find(adresse, '%d')
    -- Falls es überhaupt Ziffern gibt
    if nummernstart then
       -- Extrahiere den Straßennamen
       local strasse = mw.ustring.sub(adresse,1,nummernstart-1)
       -- Extrahiere die Hausnummer
       local hausnummer = mw.ustring.sub(adresse,nummernstart,adresslaenge)
       -- Prüfe, ob die Nummer vom Format "10-12" oder "10/12" ist
       local punctuation = mw.ustring.find(hausnummer,'%p')
       -- Prüfe, ob die Nummer vom Format "10a" ist
       local alpha = mw.ustring.find(hausnummer,'%a')
       -- Werte das aus und reduziere ggf. die beachtete Ziffernzahl
       local ziffernzahl = 0
       if punctuation then
           ziffernzahl = punctuation - 1
           -- Falls zuerst ein Buchstabe kommt
           if alpha and (alpha-punctuation < 0) then
               ziffernzahl = alpha - 1
           end
       elseif alpha then
           ziffernzahl = alpha - 1
           -- Falls zuerst ein Satzzeichen kommt
           if punctuation and (punctuation-alpha < 0) then
               ziffernzahl = punctuation - 1
           end
       else
           -- Wenn es keine Spezialfälle gibt, bestimme einfach die Länge
           ziffernzahl = mw.ustring.len(hausnummer)
       end
       -- Baue jetzt die Ausgabe zusammen, füge dabei 0en ein, so dass die (erste) Hausnummer 5 Stellen hat
       sortadresse = mw.ustring.toNFD(strasse) .. mw.ustring.rep('0',5-ziffernzahl) .. hausnummer
    else
       -- Falls es keine Ziffern gibt, kann einfach die Adresse normalisiert zurückgegeben werden
       sortadresse = mw.ustring.toNFD(adresse)
    end
    -- Gebe den SortKey zurück
    return sortadresse

end return p