您的位置:首页 > 编程语言 > Lua

lua进阶8-- C++读取lua文件里的三维表

2015-03-06 09:59 423 查看
前面lua进阶里面讲到用C++读取二维表,但是最近又有了新的需求,lua文件里面出现了三维表,自己摸索了一下,终于找到了解决的方式,在这里面与大家分享一下</span>


我的lua文件里面的三维表结构如下

stage = {
{m_nId = 105,m_nBoss = 0,m_nScoreList = {300,450,600},m_nRewardList = {230401201,13020801,13010411},m_nDropItemList = {0,0,0}},
{m_nId = 106,m_nBoss = 0,m_nScoreList = {630,840,1050},m_nRewardList = {241801101,14000201,18000201},m_nDropItemList = {14000101,241700301,230501301}},
{m_nId = 107,m_nBoss = 0,m_nScoreList = {735,980,1225},m_nRewardList = {230400201,230400411,230500101},m_nDropItemList = {12020101,13010301,230401401}},
{m_nId = 108,m_nBoss = 0,m_nScoreList = {840,1120,1400},m_nRewardList = {19000101,241500901,18040201},m_nDropItemList = {14000401,230401201,14000101}},
{m_nId = 109,m_nBoss = 0,m_nScoreList = {1080,1440,1800},m_nRewardList = {12020301,230600101,241800501},m_nDropItemList = {16000401,230901101,230700301}},
{m_nId = 110,m_nBoss = 1,m_nScoreList = {1200,1600,2000},m_nRewardList = {0,0,220200901},m_nDropItemList = {230902101,231101101,231000401}}
};


读取代码如下

#include <stdio.h>
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#include <iostream>
#include <vector>
#include "string.h"
using namespace std;

int main ( int argc, char *argv[] )
{
 lua_State* L;
 L=lua_open();

 luaopen_base(L);
 luaopen_table(L);
 luaopen_string(L);
 luaopen_math(L);
 
 if (luaL_dofile(L, "stage.lua"))
 {
   printf("run script failed\n");
 }
 else
 {
  int it_idx;
  int t_idx;

  lua_getglobal(L,"stage");
 
  t_idx=lua_gettop(L);
  cout << t_idx << endl;
  lua_pushnil(L);
  while(lua_next(L,t_idx))
   {
       it_idx=lua_gettop(L);
       lua_pushnil(L);
       //cout << "it_idx = " << it_idx << endl;
       int m_id = 0;
       while(lua_next(L,it_idx))
       {
	           const char* strkey = lua_tostring(L,-2);
		   if (strcmp(strkey, "m_nId") == 0) {
			   m_id = (int)lua_tonumber(L, -1);
			   cout << "m_id = " <<m_id << " ";
		   }
		   if (strcmp(strkey, "m_nBoss") == 0) {
			   m_id = (int)lua_tonumber(L, -1);
			   cout << "m_nBoss = " << m_id << " ";
		   }

		   if (strcmp(strkey, "m_nScoreList") == 0)
		   {
			   if (lua_istable(L, -1))
			   {

				   cout << "m_nScoreList = " ;
				   int ll_idx = lua_gettop(L);
				   //cout << "ll_idx = " << ll_idx << endl;
				   lua_pushnil(L);
				   while (lua_next(L, ll_idx))
				   {
					   cout << (int)lua_tonumber(L, -1) << " ";
					   lua_pop(L, 1);
				   }

			   }
		   }

		   if (strcmp(strkey, "m_nRewardList") == 0)
		   {
			   if (lua_istable(L, -1))
			   {

				   cout << " m_nRewardList = " ;
				   int ll_idx = lua_gettop(L);
				  // cout << "ll_idx = " << ll_idx << endl;
				   lua_pushnil(L);
				   while (lua_next(L, ll_idx))
				   {
					   cout << (int)lua_tonumber(L, -1) <<" ";
					   lua_pop(L, 1);
				   }

			   }
		   }

		   if (strcmp(strkey, "m_nDropItemList") == 0)
		   {
			   if (lua_istable(L, -1))
			   {

				   cout << " m_nDropItemList = ";
				   int ll_idx = lua_gettop(L);
				   // cout << "ll_idx = " << ll_idx << endl;
				   lua_pushnil(L);
				   while (lua_next(L, ll_idx))
				   {
					   cout << (int)lua_tonumber(L, -1) << " ";
					   lua_pop(L, 1);
				   }

			   }
		   }
		
           lua_pop(L,1);
       }
       
	   cout << endl;
       
       lua_pop(L,1);
	   //break;
   }
   
  
 }

 lua_close(L);

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: