From ce1ba2772847bc93c3136694b280fd04d7d5bceb Mon Sep 17 00:00:00 2001 From: VorTechnix <45538536+VorTechnix@users.noreply.github.com> Date: Thu, 22 Jul 2021 13:29:41 -0700 Subject: [PATCH] new split function --- worldeditadditions/utils/strings/split.lua | 29 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/worldeditadditions/utils/strings/split.lua b/worldeditadditions/utils/strings/split.lua index 69e5518..3b5a994 100644 --- a/worldeditadditions/utils/strings/split.lua +++ b/worldeditadditions/utils/strings/split.lua @@ -42,16 +42,37 @@ function worldeditadditions.gsplit(text, pattern, plain) end --- Split a string into substrings separated by a pattern. +--- Split a string into substrings separated by a pattern. -- @param text string The string to iterate over -- @param pattern string The separator pattern -- @param plain boolean If true (or truthy), pattern is interpreted as a -- plain string, not a Lua pattern -- @returns table A sequence table containing the substrings -function worldeditadditions.split(text, pattern, plain) +-- function worldeditadditions.split(text, pattern, plain) +-- local ret = {} +-- for match in worldeditadditions.gsplit(text, pattern, plain) do +-- table.insert(ret, match) +-- end +-- return ret +-- end + +--- Split a string into substrings separated by a pattern. +-- @param str string The string to iterate over +-- @param dlm string The delimiter (separator) pattern +-- @param plain boolean If true (or truthy), pattern is interpreted as a +-- plain string, not a Lua pattern +-- @returns table A sequence table containing the substrings +function worldeditadditions.split (str,dlm,plain) + local pos, ins = 0, 0 local ret = {} - for match in worldeditadditions.gsplit(text, pattern, plain) do - table.insert(ret, match) + repeat + ins = str:find(dlm,pos,plain) + table.insert(ret,str:sub(pos,ins - 1)) + pos = ins + #dlm + until not str:find(dlm,pos,plain) + print(pos..","..#str) + if str:sub(pos,#str) ~= "" then + table.insert(ret,str:sub(pos,#str)) end return ret end