#include <lua.hpp>
#include <iostream>
#include <string>
using namespace std
bool popTable(lua_State* L, int idx)
{
try{
lua_pushnil(L)
while(lua_next(L, idx) != 0){
int keyType = lua_type(L, -2)
if(keyType == LUA_TNUMBER){
double value = lua_tonumber(L, -2)
cout << "Key:" << value << endl
}else if(keyType == LUA_TSTRING){
const char* value = lua_tostring(L, -2)
cout << "Key:" << value << endl
}else{
cout << "Invalid key type: " << keyType << endl
return false
}
int valueType = lua_type(L, -1)
switch(valueType){
case LUA_TNIL:
{
cout << "Value: nil" << endl
break
}
case LUA_TBOOLEAN:
{
int value = lua_toboolean(L, -1)
cout << value << endl
break
}
case LUA_TNUMBER:
{ cout << "Value:" << lua_tonumber(L, -1) << endl
break
}
case LUA_TSTRING:
{
cout << "Value:" << lua_tostring(L, -1) << endl
break
}
case LUA_TTABLE:
{
cout << "====sub table===" << endl
int index = lua_gettop(L)
if (!popTable(L, index)) {
cout << "popTable error in popTable,error occured" << endl
return false
}
break
}
default:
{
cout << "Invalid value type: " << valueType << endl
return false
}
}
lua_pop(L, 1)
}
}catch(const char* s){
string errMsg = s
lua_pop(L,1)
cout << errMsg << endl
return false
}catch(std::exception& e){
const char* errMsg = e.what()
lua_pop(L,1)
cout << errMsg << endl
return false
}catch(...){
const char* errMsg = lua_tostring(L,-1)
lua_pop(L,1)
cout << errMsg << endl
return false
}
return true
}
int main(int argc, char* argv)
{
lua_State* L = luaL_newstate()
luaL_openlibs(L)
int r = luaL_dofile(L,"./test.lua")
lua_getglobal(L, "user")
int type = lua_type(L,1)
if(type == LUA_TTABLE){
int index = lua_gettop(L)
if(popTable(L,index)){
return 0
}else{
cout << "Error" << endl
return -1
}
}
return 0
} --$ cat test.lua lua文件
user = {
["name"] = "zhangsan",
["age"] = "22",
["friend"] = {
[1] = {
["name"] = "小丽",
["sex"] = "女",
["age"] = "20",
},
[2] = {
["name"] = "小罗",
["sex"] = "男",
["age"] = "20",
},
},
}
运行结果:
$ ./cpptable.linux_64_gcc4
Key:age
Value:22
Key:name
Value:zhangsan
Key:friend
====sub table===
Key:2
====sub table===
Key:sex
Value:男
Key:age
Value:20
Key:name
Value:小罗
Key:1
====sub table===
Key:sex
Value:女
Key:age
Value:20
Key:name
Value:小丽
require "luasql.mysql"env = assert (luasql.mysql())
con = assert (env:connect"my_db")
for b (con, "select a from b") do
print (string.format ("%s", b))
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)