【lua】lua练手基础

lua的库文件地址: http://luaforge.net/projects/

lua官网 http://lua.org

--[[
print string.
multiple line comments.
like {} in Tcl.
]]--
print ("hello")
-- comments of this file.

-- variables
num = 1
str = "abc"
tab = {}
d = print

-- print type the variables.
print (type(num))
print (type(str))
print (type(tab))
print (type(d))

-- print global variables names.
print ("This lua version is:",_VERSION)


-- strings example.
lineStr = "single 'quoted' string and double \"quoted\" string inside."
print (lineStr)
lineStr2 = 'single \'quoted\' string and double "quoted" string inside.'
print (lineStr2)
mutipleLine = [[
mutiple line 1
with 'single' line
and "double" quoted strings inside.
]]
print(mutipleLine)


-- muliple assignments are valid.
a,b,c,d,e = 1, 2, 'three', "four", 5.501
print (a,b,c,d,e)

-- swap two variables
print(a, b)
a, b = b, a
print(a, b)

-- two dots (..) are used to concatenate strings.
print("a="..a.."\n",
"b="..b.."\n",
c.." c add d is:"..d.."\n",
e.." e add d is:"..d.."\n",
d.." d add e is:"..e.."\n")

-- io.write writes to stdout but without new line.
io.write("io.write".."without new line.")
-- print '\n'
print()


------------------------------table structure--------------------------
-- table is like array in C.
taba = {}
tabb = {1,2,3.3,"four"}
tabc = {"a", "b", "c", 4, 5.5}
-- print table this pointer.
print(taba, tabb, tabc)
-- print value in table with index id.
print(taba[0], tabb[1], tabc[2])

i = 1
while i < 6 do
io.write(tabc[i].."\n")
i = i + 1
end

-- table with string index.
addr = {}
addr.street = "shunyi"
addr.name = "北京顺义区"
addr.age = 24
-- print street with two style.
print(addr.street..addr["age"])
print(addr["street"], addr.name)


---------------------------------condition-----------------------------
if true then
print("if is true")
end
a = 1
if a == 1 then
print("if is true a == 1")
end

b = "happy"
if b == "sad" then
print("if b == \"sad\"")
else
print("else case.")
end

c = 3
if c == 1 then
print("if c==1 case")
elseif c ~= 2 then
print("elseif c is not equal to 2 case")
else
print("else case:"..tostring(c))
end

---------------------------------conditional assignments----------------
a = 1
-- it is same to b = (a == 1) ? "one" : "not one"
b = (a == 1) and "one" or "not one"
-- is equialent to
print("=(true or false) ?"..b)
--[[
a = 1
if a == 1 then
b = "one"
else
b = "not one"
end
print("=(true or false) ?"..b)
]]--
---------------------------------while----------------------------------
-- while statement. like while in C.
a = 10
while a > 0 do
print("while a:"..a)
a = a-1
end

-- repeat statement. like do .. while in C.
repeat
print("repeat a:"..a)
a = a+1
until a == 8

-- for statement.
-- numeric iteration form.
-- for a=start,end,step do statement end
for a=1,10, 2 do print("for a:"..a) end
-- Sequential iteration form.
for key, value in pairs({"k1", 1, "k2", 3, 6, "value3"})
do
-- key is index in pairs.
print(index, key, value)
end

a={1,2,3,"four",5.5, 6.6}
-- index is iteration for table(array in C) a.
for index, v in pairs(a)
do
print(index, v)
end

-----------------------------------break------------------------------
a = 0
while true do
a = a + 1
if a == 10 then
print("a is 10 break while.")
break
else
print("a is"..a.."no continue statement is running.")
end
end

print("a is "..a.."after while break.")

----------------------------------function-----------------------------
function func()
print("function func is called.")
return "func return string."
end

print(func())
a = func()
print("func ret is:"..a)
-- function with mutiple return variables.
function infomation(a, b, c)
print("function infomation is called with argument:",a,b,c)
return a,b,c, "return string in infomation."
end

a,b,c=1,2,3
a,b,c,d=infomation(a,b,c)
print(a,b,c,d)


-- global and local
-- local is local scope.
-- all variables are global in scope by default.
b = "global string for variable b."
function myfunc()
local b = "local string variable for variable b."
print(b)
a = "global string for variable a."
end
myfunc()
print(a)
-------------------------format------------------------------------
function printf(fmt, ...)
io.write(string.format(fmt, ...))
end

printf("Hello %s from %s in %s \n",
os.getenv("USER") or "NULL", _VERSION, os.date())


printf("int:(%d), string:(%s), double:(%.7f)\n",
100, "string test format", 3.1415926)

--------------------------build in library-------------------------
print("build in library test......")
print(math.sqrt(36), math.pi, math.rad(100), math.random())
print(math.exp(10+2))

--------------------------string operation-------------------------
str = "this is String."
-- return ASCII code of one char like %C in C.
print(str:byte(1).."-"..str:byte(3))
-- find the postion of substr in total string.
print(string.find(str, "is"))
print("strlen:"..string.len(str))
--repeat string 3 times.
print("string.rep:"..string.rep(str, 3))
--reverse string by every byte.
print("string.reverse:"..string.reverse(str))
-- to uppercase.
print("string.upper:"..string.upper(str))
-- to lowercase.
print("string.lower:"..string.lower(str))
--substr from index 2 to index 4.
print("string.sub:"..string.sub(str, 2, 4))
print("string.sub:"..string.sub(str, 1, -1))
print("string.sub:"..string.sub(str, 2, -3))
print("string.dump:"..string.dump(printf))
--------------------------table operation--------------------------
a = {2}
table.insert(a, 4)
table.insert(a, 7)
-- order by desc.
table.sort(a, function(v1, v2) return v1 > v2 end)
for i, v in ipairs(a) do print(i, v) end
--Returns the largest positive numerical index of the given table
print("max in table a is:"..table.maxn(a))
print("remove max number in table a is:"..table.remove(a, table.maxn(a)))
for i, v in ipairs(a) do print("after remove:"..i, v) end
table.concat(a, nil, 1, 2)
for i, v in ipairs(a) do print("after concat:"..i, v) end
--[[
--------------------------io operation-----------------------------
-- print seconds from 1970.01.01 to now
print("os.clock:"..os.clock())
print("os.time:"..os.time())
print("os.date():"..os.date())
-- print 12/08/13 21:11:00
print("os.date(%c):"..os.date("%c"))
t1=os.time()-20
t2=os.time()
-- get time inteval between two time t2,t1.
print("os.difftime():"..os.difftime(t2,t1))
-- it is same to system in C or exec in Tcl.
print("os.execute:"..os.execute("dir"))
-- exit
-- os.exit()
-- getenv
print("env PATH is:"..os.getenv("PATH"))
print("get tmpfile:"..os.tmpname())
--print(os.rename("1.txt", "2.txt"))
--print(os.remove("2.txt"))
-- write log function
function writelog(fmt, ...)
local log = io.open("log.2013", "a+")
log:write(string.format(fmt, ...))
log:flush()
io.close(log)
end
writelog("This is buffer:%s, int:%d\n", "log test", 1001)

-- dump file content function.
function dumpfile(fn)
local log = io.open(fn, "r")
for line in log:lines() do print(line) end
io.close(log)
end

dumpfile("log.2013")
]]--

格式化的时间串转成时间秒

function DateTime2Secs(timeStr)
    if string.find(timeStr, '-') and string.find(timeStr, '.') then
        local tab = {}
        tab["year"]  = string.sub(timeStr, 1,4)
        tab["month"] = string.sub(timeStr, 6,7)
        tab["day"]   = string.sub(timeStr, 9,10)
        tab["hour"]  = string.sub(timeStr, 12,13)
        tab["min"]   = string.sub(timeStr, 15,16)
        tab["sec"]   = string.sub(timeStr, 18,19)
        tab["isdst"] = false
        return os.time(tab)
    end
    return 0
end

如:

local timeSecs = Time2Secs("2016-09-27 13:38:49")
print(timeSecs)