Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
53
Task/Multisplit/Lua/multisplit.lua
Normal file
53
Task/Multisplit/Lua/multisplit.lua
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
--[[
|
||||
Returns a table of substrings by splitting the given string on
|
||||
occurrences of the given character delimiters, which may be specified
|
||||
as a single- or multi-character string or a table of such strings.
|
||||
If chars is omitted, it defaults to the set of all space characters,
|
||||
and keep is taken to be false. The limit and keep arguments are
|
||||
optional: they are a maximum size for the result and a flag
|
||||
determining whether empty fields should be kept in the result.
|
||||
]]
|
||||
function split (str, chars, limit, keep)
|
||||
local limit, splitTable, entry, pos, match = limit or 0, {}, "", 1
|
||||
if keep == nil then keep = true end
|
||||
if not chars then
|
||||
for e in string.gmatch(str, "%S+") do
|
||||
table.insert(splitTable, e)
|
||||
end
|
||||
return splitTable
|
||||
end
|
||||
while pos <= str:len() do
|
||||
match = nil
|
||||
if type(chars) == "table" then
|
||||
for _, delim in pairs(chars) do
|
||||
if str:sub(pos, pos + delim:len() - 1) == delim then
|
||||
match = string.len(delim) - 1
|
||||
break
|
||||
end
|
||||
end
|
||||
elseif str:sub(pos, pos + chars:len() - 1) == chars then
|
||||
match = string.len(chars) - 1
|
||||
end
|
||||
if match then
|
||||
if not (keep == false and entry == "") then
|
||||
table.insert(splitTable, entry)
|
||||
if #splitTable == limit then return splitTable end
|
||||
entry = ""
|
||||
end
|
||||
else
|
||||
entry = entry .. str:sub(pos, pos)
|
||||
end
|
||||
pos = pos + 1 + (match or 0)
|
||||
end
|
||||
if entry ~= "" then table.insert(splitTable, entry) end
|
||||
return splitTable
|
||||
end
|
||||
|
||||
local multisplit = split("a!===b=!=c", {"==", "!=", "="})
|
||||
|
||||
-- Returned result is a table (key/value pairs) - display all entries
|
||||
print("Key\tValue")
|
||||
print("---\t-----")
|
||||
for k, v in pairs(multisplit) do
|
||||
print(k, v)
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue