J'ai googlé et je ne comprends tout simplement pas. Cela semble être une fonction si simple, mais bien sûr, Lua ne l’a pas.
En Python je ferais
string = "cat,dog"
one, two = string.split(",")
et puis j'aurais deux variables, une = chat. deux = chien
Comment puis-je faire cela à Lua!?
Si vous pouvez utiliser des bibliothèques, la réponse est (comme souvent en Lua) d'utiliser utilisez Penlight .
Si Penlight est trop lourd pour vous et que vous souhaitez simplement diviser une chaîne avec une virgule single comme dans votre exemple, vous pouvez procéder comme suit:
string = "cat,dog"
one, two = string:match("([^,]+),([^,]+)")
Essaye ça
str = 'cat,dog'
for Word in string.gmatch(str, '([^,]+)') do
print(Word)
end
'[^,]' signifie "tout sauf la virgule, le signe + signifie" un ou plusieurs caractères ". La parenthèse crée une capture (inutile dans ce cas).
Ajoutez cette fonction de partage en haut de votre page:
function string:split( inSplitPattern, outResults )
if not outResults then
outResults = { }
end
local theStart = 1
local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
while theSplitStart do
table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
theStart = theSplitEnd + 1
theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
end
table.insert( outResults, string.sub( self, theStart ) )
return outResults
end
Ensuite, procédez comme suit:
local myString = "Flintstone, Fred, 101 Rockledge, Bedrock, 98775, 555-555-1212"
local myTable = myString:split(", ")
for i = 1, #myTable do
print( myTable[i] ) -- This will give your needed output
end
Pour plus d'informations, visitez: Tutorial: Lua String Magic
Keep Coding ............... :)
- comme C strtok, divise un ou plusieurs caractères séparateurs (recherche toutes les chaînes ne contenant aucun des délimiteurs)
function split(source, delimiters)
local elements = {}
local pattern = '([^'..delimiters..']+)'
string.gsub(source, pattern, function(value) elements[#elements + 1] = value; end);
return elements
end
- exemple: var elements = split ("au revoir # au revoir, mademoiselle $ american @ pie", ", # $ @") -- renvoie "au revoir" "au revoir" "mademoiselle" "américaine"
Voici comment je fais ça sur mediawiki:
str = "cat,dog"
local result = mw.text.split(str,"%s*,%s*")
-- result[0] will give "cat", result[1] will give "dog"
en fait, si vous ne vous souciez pas des espaces, vous pouvez utiliser:
str = "cat,dog"
local result = mw.text.split(str,",")
-- result[0] will give "cat", result[1] will give "dog"
Des fonctions telles que string.split()
sont largement inutiles dans Lua, car vous pouvezexprimer des opérations de chaîne dans LPEG . Si vous avez toujours besoin d'une fonction dédiée, une approche pratique estpour définir une fabrique de séparateurs (mk_splitter()
dans l'extrait ci-dessous) duquel vous pouvez ensuite obtenir des séparateurs personnalisés.
local lpeg = require "lpeg"
local lpegmatch = lpeg.match
local P, C = lpeg.P, lpeg.C
local mk_splitter = function (pat)
if not pat then
return
end
pat = P (pat)
local nopat = 1 - pat
local splitter = (pat + C (nopat^1))^0
return function (str)
return lpegmatch (splitter, str)
end
end
L’avantage d’utiliser LPEG est que la fonction accepte comme argument les chaînes et les modèles Lua valides.
Voici comment vous l'utiliseriez pour créer une fonction qui divise les chaînes au caractère ,
:
commasplitter = mk_splitter ","
print (commasplitter [[foo, bar, baz, xyzzy,]])
print (commasplitter [[a,b,c,d,e,f,g,h]])
Pour gérer également les espaces optionnels, vous pouvez effectuer les tâches suivantes:
str = "cat,dog,mouse, horse"
for Word in str:gmatch('[^,%s]+') do
print(Word)
end
La sortie sera:
cat
dog
mouse
horse