10 Jahre Stabführer.de
Stabführer.de wird 10 Jahre alt!
Am besten feiert man das mit neuen Informationen. Gesucht werden daher verstärkt fehlenden Daten, interessante Geschichten und alle Arten von Fotos, Dokumente usw., die es wert sind erhalten zu werden. Gern per Email an info@stabfuehrer.de

Modul:Str

Aus Stabführer.de
Version vom 4. Juli 2025, 12:45 Uhr von MAPtheMOP (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „function escape_lua_regex(str) return mw.ustring.gsub(str, ".", { ["%"] = "%%"; ["^"] = "%^"; ["$"] = "%$"; ["."] = "%."; ["("] = "%("; [")"] = "%)"; ["["] = "%["; ["]"] = "%]"; ["?"] = "%?"; ["*"] = "%*"; ["+"] = "%+"; ["-"] = "%-"; ["\0"] = "%z"; }) end local function trim(s) s = mw.ustring.gsub(s,"\n",""); while mw.ustring.sub(s,1,1) == " " do s= mw.ustring.sub(s,2,-1); end wh…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

function escape_lua_regex(str) return mw.ustring.gsub(str, ".", { ["%"] = "%%"; ["^"] = "%^"; ["$"] = "%$"; ["."] = "%."; ["("] = "%("; [")"] = "%)"; ["["] = "%["; ["]"] = "%]"; ["?"] = "%?"; ["*"] = "%*"; ["+"] = "%+"; ["-"] = "%-"; ["\0"] = "%z";

 	})

end

local function trim(s) s = mw.ustring.gsub(s,"\n",""); while mw.ustring.sub(s,1,1) == " " do s= mw.ustring.sub(s,2,-1); end while mw.ustring.sub(s,-1,-1) == " " do s= mw.ustring.sub(s,1,-2); end return s; end

local Str = {} function Str.len(frame) local s = trim((frame.args[1] or "")); return mw.ustring.len(s); end

function Str.left(frame) local s = trim((frame.args[1] or "")); local idx = tonumber(frame.args[2]) or 0; if idx < 1 then return ""; end return mw.ustring.sub(s,1,idx); end

function Str.right(frame) local s = trim((frame.args[1] or "")); local length = tonumber(frame.args[2]) or 0; if length < 1 then return "" else length = -length; end return mw.ustring.sub(s,length,-1) end

function Str.index(frame) local s = trim((frame.args[1] or "")); local idx = tonumber(frame.args[2]) or 0; if idx < 1 then return "" end return mw.ustring.sub(s,idx,idx) end

function Str.sub(frame) local s = trim((frame.args[1] or "")); local von = tonumber(frame.args[2]) or 1; local length = tonumber(frame.args[3]) or 0; if (von < 1) then von = 1 end local bis = von + length - 1 if (bis < von) then return "" end return mw.ustring.sub(s,von,bis) end

function Str.crop(frame) local s = trim((frame.args[1] or "")); local cut = tonumber(frame.args[2]) or 0; local length = mw.ustring.len(s) if cut < 1 then return s; end return mw.ustring.sub(s,1,length - cut) end

function Str.cropleft(frame) local s = trim((frame.args[1] or "")); local cut = tonumber(frame.args[2]) or 0; local length = mw.ustring.len(s) if cut < 1 then return s; end return mw.ustring.sub(s,cut+1,-1); end

function Str.find(frame) local text = trim((frame.args[1] or "")); local pat = frame.args[2] or ""; if pat == "" then return 1 end local idx = mw.ustring.find(text,pat,1,true) if idx then return idx; else return -1; end end

function Str.hex2dez(frame) a = tonumber(frame.args[1],16) or 0; return a end

function Str.match(frame) local text = frame.args[1] or "" local pattern = frame.args[2] or "" local index = tonumber(frame.args[3]) or 0 if (text == "" or pattern == "") then return "" end -- return all captures (denoted by brackets in the pattern) if index is zero, otherwise return only the index-th capture if index <= 0 then return mw.ustring.match(text, pattern) else return ({mw.ustring.match(text, pattern)})[index] end end

function Str.rep(frame) local repetitions = tonumber(frame.args[2]) or 0; return mw.ustring.rep( frame.args[1] or , repetitions ); end

function Str.replace(frame) local text = frame.args[1] or ""; -- Text, der bearbeitet werden soll local search = frame.args[2] or ""; -- Textstellen innerhalb von "text" die ersetzt werden sollen local replace = frame.args[3] or ""; -- Ersetzungstext if text == "" or search == "" then return ""; end local count = tonumber(frame.args[4]) -- Anzahl der Ersetzungen (optional) local regexsearch = frame.args[5] -- beliebiger Wert um dafür zu sorgen, dass der Suchtext "search" als Lua-regulärer Ausdruck behandelt werden soll if not regexsearch or regexsearch == "" then search = escape_lua_regex(search) replace = mw.ustring.gsub(replace, "%%", "%%%%") end local result if count then result,_ = mw.ustring.gsub(text, search, replace, count) else result,_ = mw.ustring.gsub(text, search, replace) end return result end

-- richtet Zahlen numerisch aus function Str.adjustnumber(frame) local ausgabe; local text = frame.args[1] or "" -- Text, der bearbeitet werden soll, i.d.R. eine Dezimalzahl local i_li = math.floor(tonumber(frame.args[2])) or 2; -- maximale Stellen links vom Trennzeichen local i_re = math.floor(tonumber(frame.args[3])) or 2; -- maximale Stellen rechts vom Trennzeichen local sign = frame.args['Z'] or "," -- Trennzeichen local zeroes='00000000000000000000'; -- 20 duerften ausreichen. local zpos = 0; local len = mw.ustring.len(text); if not text or sign == "" then zpos = len + 1; else zpos = mw.ustring.find(text, sign,1, true) or len; end

local zl = 0; local zr = 0; local t_li = ""; local t_re = ""; local z_li =""; local z_re ="";

if zpos > 1 then t_li = mw.ustring.sub(text,1, zpos-1); else t_li=""; end

if len-zpos > 0 then t_re = mw.ustring.sub(text,zpos+1,-1); else t_re=""; end

zl = i_li - mw.ustring.len(t_li); if zl < 1 then zl = 0; z_li = ""; else z_li = '' .. mw.ustring.sub(zeroes,1,zl) .. ''; end

zr = i_re - mw.ustring.len(t_re); if zr < 1 then zr = 0; z_re =""; else z_re ='' .. mw.ustring.sub(zeroes,1,zr) .. ''; end ausgabe = z_li .. t_li .. sign .. t_re .. z_re; return ausgabe; end

-- Konvertierung von Mathe-Minus, Geviert-, Halbgeviert- und Viertelgeviertstrich, sowie U+2012 ins ASCII-Minus. function Str.minus(frame) local s = frame.args[1] or ""; s = mw.ustring.gsub(s,'−','-'); -- Erstes Zeichen ist U+2212 (Mathe-Minus) s = mw.ustring.gsub(s,'‐','-'); -- Erstes Zeichen ist U+2010 (Viertelgeviertstrich)! s = mw.ustring.gsub(s,'‒','-'); -- Erstes Zeichen ist U+2012 (Figure dash)! s = mw.ustring.gsub(s,'–','-'); -- Erstes Zeichen ist U+2013 (Halbgeviertstrich)! s = mw.ustring.gsub(s,'—','-'); -- Erstes Zeichen ist U+2014 (Geviertstrich)! return s; end

-- Die folgende Stringfunktion rundet Zahlen und gibt im Unterschied zu -- "round" im Modul FormatNum auch nachfolgende Nullen aus. -- So wird "1.12" bei drei Nachkommastellen als "1.120" zurückgegeben. function Str.round(frame) local num = tonumber(frame.args[1] or ) or 'NaN'; -- zu rundende Zahl local prec = tonumber(frame.args[2] or ) or 'NaN'; -- Dezimalstellen if num == 'NaN' or prec =='NaN' then return "NaN"; end prec = math.floor(prec); local out = ""; local rnd = 10; if prec > 0 then local fmt = "%." .. tostring(prec) .. "f"; out = string.format(fmt,num); -- Zahlen haben nur ASCII-Zeichen else rnd = 10^(-prec); num = math.floor(num/rnd + 0.5) * rnd; out = string.format("%d",num); -- Zahlen haben nur ASCII-Zeichen end return out; end

return Str