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

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">前面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);
<span style="white-space:pre">	</span>//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;

}

时间: 2024-10-05 17:41:44

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

Flex读取txt文件里的内容报错

Flex读取txt文件里的内容 1.详细错误例如以下 2.错误原因 读取文件不存在 var file:File = new File(File.applicationDirectory.nativePath+"/phone.txt"); 3.解决的方法 将文件导入进去

Flex读取txt文件里的内容(二)

Flex读取txt文件里的内容 自己主动生成的文件 LoadTxt-app.xml: <?xml version="1.0" encoding="utf-8" standalone="no"?> <application xmlns="http://ns.adobe.com/air/application/1.5.3"> <!-- Adobe AIR Application Descriptor

shell程序之逐行读取一文件里的參数且使用此參数每次运行5分钟

/********************************************************************* * Author  : Samson * Date    : 04/18/2014 * Test platform: *              Linux ubuntu 3.2.0-58-generic-pae *              GNU bash, version 4.2.39 * *****************************

用python读取word文件里的表格信息【华为云技术分享】

在企查查查询企业信息的时候,得到了一些word文件,里面有些控股企业的数据放在表格里,需要我们将其提取出来. word文件看起来很复杂,不方便进行结构化.实际上,一个word文档中大概有这么几种类型的内容:paragraph(段落),table(表格),character(字符).我现在要解析的word文档中,基本都是段落和表格,本文主要来讲一下如何从word中解析出表格,并将表格信息进行结构化. 要想使用python解析word文件,我们可以使用包docx,首先我们需要安装它. 安装完成后,我

读取资源文件的工具.

import java.util.ResourceBundle; import org.springframework.util.NumberUtils; /**读取资源文件的工具类. */ public class ConfigUtil { /**读取资源文件里的键值信息. * 比如有键值名为a,其相应的值为整数类型,那么方法即为:readConfigForObject("a",Integer.class). * @param keyName 键值名 * @param require

读取资源文件的几种方法

getResources().里有很多种方法,可以用有道翻译看下.我就不多说了,思路有很多种,每个人的习惯都不一样. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import android.app.Activi

Cocos2d-x Lua 读取Csv文件,更方便的使用数据

我的书上或者是我曾经出售的源码里,都有Csv文件的影子. 也许是先入为主吧,我工作那会用的最久的配置文件就是Csv,所以我在很多游戏里都会情不自禁地优先选择它. Csv文件,格式很简单,就是一行一条数据,字段之间用逗号分隔,策划也可以方便地使用Excel进行编辑. Csv格式的文件,解析起来也很简单,所以自己动手写写很快~(小若:我就喜欢拿来主义,你怎么着) 最近在用Lua写游戏,对于技能.怪物等配置,我还是选择用Csv~ 不得不说,Lua等脚本语言,在某些方面是C++没法比的,这次我就用Csv

Lua读取CSV文件到table中

创建Lua函数载入CSV文件并保存到表中的函数: function GetLines(fileName) indx = 0 myLines ={} for line in io.line(string.format("%s%s", "c:/lua_scripts/",filename)) do indx = indx + 1 myLines[indx] = line end return indx, myLines --returns number of lines

Lua进阶(二)——函数环境、包

函数环境 function foo() print(g or "No g defined!") end foo() setfenv(foo, { g = 100, print = print }) --设置foo的环境为表{ g=100, ...} foo() print(g or "No g defined!") --No g defined! --100 --No g defined! 定义:函数环境就是函数在执行时所见的全局变量的集合,以一个表来承载. 说明: