Je dois faire une simple division d'une chaîne de caractères, mais il ne semble pas y avoir de fonction pour cela et la méthode manuelle que j'ai testée ne semble pas fonctionner. Comment pourrais-je le faire?
Réponses
Trop de publicités?Vous pouvez utiliser cette méthode:
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
delimiter = string.split(stringtodelimite,pattern)
Vous pourriez utiliser la bibliothèque Penlight. Celle-ci propose une fonction pour diviser une chaîne de caractères en utilisant un délimiteur qui renvoie une liste.
Elle a implémenté bon nombre des fonctions dont nous pourrions avoir besoin en programmation et qui manquent dans Lua.
Voici un exemple de son utilisation.
>
> stringx = require "pl.stringx"
>
> str = "bienvenue dans le monde de lua"
>
> arr = stringx.split(str, " ")
>
> arr
{bienvenue,dans,le,monde,de,lua}
>
J'ai utilisé les exemples ci-dessus pour concevoir ma propre fonction. Mais l'élément manquant pour moi était d'échapper automatiquement les caractères magiques.
Voici ma contribution:
function split(text, delim)
-- retourne un tableau de champs basé sur le texte et le délimiteur (un seul caractère)
local result = {}
local magic = "().%+-*?[]^$"
if delim == nil then
delim = "%s"
elseif string.find(delim, magic, 1, true) then
-- échapper les caractères magiques
delim = "%"..delim
end
local pattern = "[^"..delim.."]+"
for w in string.gmatch(text, pattern) do
table.insert(result, w)
end
return result
end
3 votes
Veuillez consulter Diviser les chaînes de caractères