Jump to navigation
Jump to search
Notmyhandle (talk | contribs) (more debugging formatting) |
Notmyhandle (talk | contribs) (fixed string.format which was calling for a digit but it's a string) |
||
Line 24: | Line 24: | ||
rindexdebug = string.format ("%s %d %s", "rindex = ", rindex, "<br>") | rindexdebug = string.format ("%s %d %s", "rindex = ", rindex, "<br>") | ||
capturedstring = string.sub(frame.args[1], (rindex*-1), 0) | capturedstring = string.sub(frame.args[1], (rindex*-1), 0) | ||
capturedstringdebug = string.format ("%s % | capturedstringdebug = string.format ("%s %s", "capturedstring = ", capturedstring) | ||
finalstring = string.format ("%s %s", rindexdebug, capturedstringdebug) | finalstring = string.format ("%s %s", rindexdebug, capturedstringdebug) | ||
else | else |
Revision as of 22:33, 9 August 2014
Documentation for this module may be created at Module:Explode/Documentation
--[[
This module is used to explode a passed string into parts. First parameter is the divider string to divide the string at. The second parameter is the string.
]]--
local p = {}
function p.explode(frame)
--[[
By Notmyhandle
args:
1:string
2:delimiter character (divider character)
]]--
--If no string is present, don't waste any more time.
if (frame.args[1]=='') then return false end
local finalstring,rindex,s,e = 0
local rindexdebug,capturedstring,capturedstringdebug = "string"
--capture the starting index
s = string.find(frame.args[1],frame.args[2])
if (frame.args[3]=='left') then
--capture the index of the left side of the first delimiter character
rindex = (s)
rindexdebug = string.format ("%s %d %s", "rindex = ", rindex, "<br>")
capturedstring = string.sub(frame.args[1], (rindex*-1), 0)
capturedstringdebug = string.format ("%s %s", "capturedstring = ", capturedstring)
finalstring = string.format ("%s %s", rindexdebug, capturedstringdebug)
else
--capture the index of the right side of the first delimiter character
rindex = (s+1)
finalstring = string.sub(frame.args[1], rindex)
end
return finalstring
end
function p.explode2(frame)
--[[
args:
1:delimiter character (divider character)
2:string
]]--
if (frame.args[1]=='') then return false end
local pos,arr = 0,{}
-- for each divider found
for st,sp in function() return string.find(frame.args[2],frame.args[1],pos,true) end do
table.insert(arr,string.sub(frame.args[2],pos,st-1)) -- Attach chars left of current divider
pos = sp + 1 -- Jump past current divider
end
table.insert(arr,string.sub(frame.args[2],pos)) -- Attach chars right of last divider
return arr
end
function p.find(frame)
--[[
args:
1:string
2:delimiter character (divider character)
3:starting position (far left if not set)
4:set to 'true' if you want plain matching enabled.
See http://lua-users.org/wiki/StringLibraryTutorial
]]--
return string.find(frame.args[1],frame.args[2],frame.args[3],frame.args[4])
end
function p.split(frame)
--[[
args:
1:string
2:delimiter character (divider character)
]]--
local t = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. frame.args[2]
local last_end = 1
local s, e, cap = frame.args[1]:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t,cap)
end
last_end = e+1
s, e, cap = frame.args[1]:find(fpat, last_end)
end
if last_end <= #frame.args[1] then
cap = frame.args[1]:sub(last_end)
table.insert(t, cap)
end
return t
end
return p