C++遍历Lua table的方法实例
Lua table数据如下:
代码如下:
--$ cat test.lua lua文件 user = { ["name"] = "zhangsan", ["age"] = "22", ["friend"] = { [1] = { ["name"] = "小丽", ["sex"] = "女", ["age"] = "20", }, [2] = { ["name"] = "小罗", ["sex"] = "男", ["age"] = "20", }, }, }
要读出上面table 中所有数据,C++代码如下:
代码如下:
//C++代码: #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; }
运行结果:
代码如下:
$ ./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:小丽
相关推荐
世樹 2020-11-11
SCNUHB 2020-11-10
bleach00 2020-11-10
FellowYourHeart 2020-10-05
momode 2020-09-11
思君夜未眠 2020-09-04
jessieHJ 2020-08-19
行吟阁 2020-08-09
表格的现在还是较为常用的一种标签,但不是用来布局,常见处理、显示表格式数据。在HTML网页中,要想创建表格,就需要使用表格相关的标签。<table> <tr> <td>单元格内的文字</td> ...
gufudhn 2020-08-09
末点 2020-08-03
nimeijian 2020-07-30
好记忆也需烂 2020-07-28
zlsdmx 2020-07-05
tomson 2020-07-05
tianqi 2020-07-05
onlykg 2020-07-04