2012-07-13 207 views
1

我只發現這與我正在尋找的相關:Split string by count of characters,但它對我的意思沒有用處。將lua字符串拆分爲字符

我有一個字符串變量,這是一個3個數字(可以從000到999)。我需要分離每個數字(字符)並將它們放入表格中。

我是一個使用lua的遊戲mod編程,它有一些額外的功能。如果你能幫助我使用它:http://wiki.multitheftauto.com/wiki/Split會很棒,但其他任何方式都可以。

在此先感謝

回答

4

修正到OP想問什麼:

到剛剛在3個數字分成3位數字,這是更簡單:

s='429' 
c1,c2,c3=s:match('(%d)(%d)(%d)') 
t={tonumber(c1),tonumber(c2),tonumber(c3)} 

「如何分割由3位數字組成的長字符串」的答案爲:

這是微不足道的。你可能需要看看gmatch function in the reference manual

s="123456789" 
res={} 
for num in s:gmatch('%d%d%d') do 
    res[#res+1]=tonumber(num) 
end 

,或者如果你不喜歡循環:

res={} 
s:gsub('%d%d%d',function(n)res[#res+1]=tonumber(n)end) 
+0

第一個代碼沒有工作,第二個正是我所需要的。接受你的答案,謝謝:) – Karevan 2012-07-13 14:34:45

+0

奇怪。在這裏他們完全一樣。 – jpjacobs 2012-07-13 14:38:44

+0

好吧,我仍然有一個問題,表的第一個索引工作正常,如果字符串低於009,否則它等於完整的字符串:s和其他值爲零 – Karevan 2012-07-13 14:40:51

0

我一直在尋找這樣的事情,但避免了循環 - 希望有它作爲一個-襯墊。最終,我發現從lua-users wiki: Split Join這個例子:

fields = {str:match((str:gsub("[^"..sep.."]*"..sep, "([^"..sep.."]*)"..sep)))} 

...這正是我想要的那種語法 - 一個襯墊,返回表 - 除非,我真的不明白是怎麼回事:/儘管如此,一些戳約後,我設法找到正確的語法分裂成這個成語,這顯然是個字符:

fields = { str:match((str:gsub(".", "(.)"))) } 

我猜,什麼情況是,gsub基本上把括號「(.)」各地各字符'.' - 以便match將這些視爲一個單獨的匹配單元,並將它們「提取」爲單獨的單元以及...但我仍然不明白爲什麼在str:gsub(".", "(.)")塊上有多餘的括號。

我Lua5.1測試此:

str = "a - b - c" 
fields = { str:match((str:gsub(".", "(.)"))) } 
print(table_print(fields)) 

...其中table_printlua-users wiki: Table Serialization;並打印此代碼:

"a" 
" " 
"-" 
" " 
"b" 
" " 
"-" 
" " 
"c"