今天需要寫乙個解析csv到lua的小工具,其中用到了 lua庫中的string.gsub(),之前一直對這個方法不是很了解,今天終於好好試了一把,很強大,很過癮,很方便。。。
源csv檔案是:
等級,1階所需經驗,2階所需經驗,3階所需經驗,4階所需經驗,5階所需經驗,每個格仔所需金幣1,75,90,100,110,120,63
2,98,117,130,143,156,66
3,130,156,173,190,208,69
4,173,207,230,253,276,72
轉換後的要求的格式是:
1local lvlexp =, --
13 , --
24 , --
35 , --46
}78return lvlexp
那麼我寫的小工具是:
--[[--- switchcsvtolua: 轉換csv -- 此處是匹配魔物公升級表的轉換器
- @param: ... - csv 檔案路徑
]]function
switchcsvtolua(...)
--local frompath = "/users/guy/desktop/creepupgrade/lvlexp.csv"
local arg =
local frompath = arg[1
]
local filef = assert(io.open(frompath, "r+"
))
--local frompath = "/users/guy/desktop/creepupgrade/lvlexp.lua"
local topath = string_gsub(frompath, "
/%a+.csv
", function(h) --
匹配路徑中的 /lvlexp.csv
return string_gsub(h, "
.csv
", "
.lua
") --
替換.csv 為 .lua
end)
local filet = assert(io.open(topath, "w+"
)) filef:read()
--拋棄第一行索引
local filetitle = "
local lvlexp = \n\nreturn lvlexp
"filet:write(filetitle)
local lineindex = 1
local nextline =filef:read()
while nextline do
--只要下一行存在即寫入
local aline =string.trim(nextline)
local beginindex = string_find(aline, "
,") + 1
--找到第乙個 , 的座標
local len =string_len(aline)
aline = string_sub(aline, beginindex, len) --
刪除每行的 第乙個索引元素
aline = "
, --
" .. lineindex .. "\n"
--為每一行新增 lua**格式
aline = string_gsub(aline, "
,%d+}
", function(h) --
匹配每行的最後乙個數字
return string_gsub(h, "
,", "
, coin =
") --
為這個數字新增乙個索引
end)
filet:write(aline)
nextline =filef:read()
lineindex = lineindex + 1
endfilet:write(filefinish)
filef.close()
filet.close()
end--[[
--- switchcsvtolua: 轉換csv
- @param: ... - csv 檔案路徑
]]switchcsvtolua(...)
注意上面的**中的類似 string_gusd() 這樣的函式是我在檔案的上面 宣告了 local string_gusd = string.gusd ,即lua庫中的函式,希望讀者不要迷惑,此處是為了提高效率才寫成了區域性變數,不要糾結。。。
下面貼出我在使用 string.gusd()時用到的正規表示式的參考的帖子,
**自 感謝原作者。
模式匹配函式
lua中的正規表示式
lua中的正規表示式與posix的正規表示式有一些區別。產生區別的主要原因在於lua追求與標準庫的短小精悍,而完成完整的posix正則需要4000行以上的 lua不願意為此犧牲簡介性,所以在正則的規則上有所妥協。下表列出lu支援的所有字元類 字元類說明 任意字元 a字母 c控制字元 d數字 l小寫字...
lua 正規表示式使用
在使用lua的string庫匹配模式的時候,對於一些比較麻煩的處理,搜網頁總是不得其所,下面是接觸到的一些經典用法 string.find string.gsub string.sub 對這三個方法的基本使用不概述了 現有乙個需求如下 替換 字串 戰鬥力增加 為 戰鬥力增加5 注5是帶入a b值算出...
Lua正規表示式
正規表示式作為一種通用的算式,大量用於文字處理邏輯中,其主要好處是速度能夠達到極致,而且 量通常會非常少,本篇主要介紹lua中的正則使用,由於這樣的文章網上隨處都可以搜到,而且不乏整理的不錯的,這裡就不想再重新做這件事情。正規表示式主要處理匹配問題,即通過給定語義萬用字元串,返回匹配成功的字串列表。...