„Modul:AdressenSort“ – Versionsunterschied
Erscheinungsbild
[gesichtete Version] | [gesichtete Version] |
Inhalt gelöscht Inhalt hinzugefügt
Cirdan (Diskussion | Beiträge) thx |
Cirdan (Diskussion | Beiträge) erkenne ein paar häufige Worte, die Sortierprobleme machen, siehe Wikipedia_Diskussion:Lua/Modul/AdressenSort; Rest kann mit der gsub-Funktion ggf. auch einfacher gehalten werden |
||
Zeile 9: | Zeile 9: | ||
local rohadresse = frame.args[1] |
local rohadresse = frame.args[1] |
||
-- Ersetze eckige Klammern |
-- Ersetze eckige Klammern |
||
local adresse = rohadresse:gsub("[()%[%]|<>]", "") |
local adresse = rohadresse:gsub("[()%[%]|<>]", ""):gsub(", %d*",""):gsub(" bis %d*", ""):gsub(" und %d*", ""):gsub("/%d*","") |
||
-- Suche nach der Hausnummer; letztes Auftreten eines Ziffer-"Wortes" |
-- Suche nach der Hausnummer; letztes Auftreten eines Ziffer-"Wortes" |
||
strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$") |
strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$") |
||
if hausnummer then |
if hausnummer then |
||
-- Prüfe, ob die Nummer vom Format "10- |
-- Prüfe, ob die Nummer vom Format "10-12" ist |
||
local punctuation = mw.ustring.find(hausnummer,'%p') |
local punctuation = mw.ustring.find(hausnummer,'%p') |
||
-- Prüfe, ob die Nummer vom Format "10a" ist |
-- Prüfe, ob die Nummer vom Format "10a" ist |
Version vom 6. Februar 2016, 22:54 Uhr
Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | ||
Modul | Deutsch
|
Modul: | Dokumentation |
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
local p = {}
function p.convert(frame)
-- lade Sort-Modul, um später Sonderzeichen umwandeln zu können
local lucky, Sort = pcall( require, "Module:Sort" )
Sort = Sort.Sort()
local hausnummer, sortadresse, strasse, ziffernzahl
-- Lese Parameter
local rohadresse = frame.args[1]
-- Ersetze eckige Klammern
local adresse = rohadresse:gsub("[()%[%]|<>]", ""):gsub(", %d*",""):gsub(" bis %d*", ""):gsub(" und %d*", ""):gsub("/%d*","")
-- Suche nach der Hausnummer; letztes Auftreten eines Ziffer-"Wortes"
strasse, hausnummer = mw.ustring.match(adresse, "^(.+) (%d[%-–/%d]*%a?)$")
if hausnummer then
-- Prüfe, ob die Nummer vom Format "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
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
end
-- Ersetze Sonderzeichen usw.
if hausnummer then
sortadresse = Sort.lex(strasse, "latin") ..
mw.ustring.rep('0',8-ziffernzahl) .. hausnummer
else
sortadresse = Sort.lex(adresse, "latin")
end
-- Gebe den SortKey zurück
return sortadresse
end
return p