【问题标题】:reading Lua file with c#用c#读取Lua文件
【发布时间】:2012-03-07 05:07:36
【问题描述】:

我已在我的 Visual Studio 2008 c# 项目中成功引用了 luainterface。

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    Lua lua = new Lua();

    var result = lua.DoFile(@"C:\testing\regex\test-data.lua");

    string bla;

    foreach (DictionaryEntry member in lua.GetTable("test_data"))
    {
        Console.WriteLine("({0}) {1} = {2}",
          member.Value.GetType().ToString(),
          member.Key,
          member.Value);


    }

}

我得到的输出是:

(LuaInterface.LuaTable) 1 = table
(LuaInterface.LuaTable) 2 = table
(LuaInterface.LuaTable) 3 = table
(LuaInterface.LuaTable) 4 = table
(LuaInterface.LuaTable) 5 = table
(LuaInterface.LuaTable) 6 = table
(LuaInterface.LuaTable) 7 = table
(LuaInterface.LuaTable) 8 = table
(LuaInterface.LuaTable) 9 = table
(LuaInterface.LuaTable) 10 = table
(LuaInterface.LuaTable) 11 = table
(LuaInterface.LuaTable) 12 = table
(LuaInterface.LuaTable) 13 = table
(LuaInterface.LuaTable) 14 = table
(LuaInterface.LuaTable) 15 = table
(LuaInterface.LuaTable) 16 = table
(LuaInterface.LuaTable) 17 = table
(LuaInterface.LuaTable) 18 = table
(LuaInterface.LuaTable) 19 = table
(LuaInterface.LuaTable) 20 = table
(LuaInterface.LuaTable) 21 = table
(LuaInterface.LuaTable) 22 = table
(LuaInterface.LuaTable) 23 = table
(LuaInterface.LuaTable) 24 = table
(LuaInterface.LuaTable) 25 = table
(LuaInterface.LuaTable) 26 = table
(LuaInterface.LuaTable) 27 = table
(LuaInterface.LuaTable) 28 = table

我的数据如下所示:

test_data = {
{
  id = '001-000505',
  cnv = {
    e9 = 0,
    i6 = 0,
  },
  rel = {
    rs10850985 = '-',
    rs38932097 = '-',
    rs5030655 = '-',
    rs10655852 = '-',
    rs28371725 = '-',
  },
  result = '*5/*5',
  gt = {
    rs31080985 = { '-', '-' },
    rs16947 = { '-', '-' },
    rs3892097 = { '-', '-' },
    rs503350655 = { '-', '-' },
    rs50530865 = { '-', '-' },
    rs5030656 = { '-', '-' },
    rs106371706 = { '-', '-' },
    rs59421388 = { '-', '-' },
    rs7693258 = { '-', '-' },
    rs28371725 = { '-', '-' },
  },
},
{
  id = '004-AATTGG',
  cnv = {
    e9 = 1,
    i6 = 1,
  },
  rel = {
    rs1080985 = '>>',
    rs3892097 = '>>',
    rs505306d55 = '>>',
    rs1065852 = '>>',
    rs2837d1725 = '>>',
  },
  result = '*1/*5',
  gt = {
    rs10830985 = { 'C', 'C' },
    rs164947 = { 'C', 'C' },
    rs3892097 = { 'G', 'G' },
    rs5030e655 = { 'T', 'T' },
    rs5030865 = { 'G', 'G' },
    rs5030656 = { 'AAG', 'AAG' },
    rs1065852 = { 'C', 'C' },
    rs28371706 = { 'C', 'C' },
    rs59421388 = { 'G', 'G' },
    rs769258 = { 'G', 'G' },
    rs28371725 = { 'G', 'G' },
  },
},
{
  id = '003-0300101',
  cnv = {
    e9 = 1,
    i6 = 1,
  },
  rel = {
    rs1080985 = '>>',
    rs3892097 = '>>',
    rs50530655 = '>>',
    rs10365852 = '>>',
    rs283271725 = '<<',
  },
  result = '*41/*5',
  gt = {
    rs1080985 = { 'C', 'C' },
    rs16947 = { 'T', 'T' },
    rs3892097 = { 'G', 'G' },
    rs5030655 = { 'T', 'T' },
    rs5030865 = { 'G', 'G' },
    rs5030656 = { 'AAG', 'AAG' },
    rs1065852 = { 'C', 'C' },
    rs28371706 = { 'C', 'C' },
    rs593421388 = { 'G', 'G' },
    rs7659258 = { 'G', 'G' },
    rs28371725 = { 'A', 'A' },
  },
},
{
  id = '007-CCAA',
  cnv = {
    e9 = 1,
    i6 = 1,
  },
  rel = {
    rs1080985 = '>>',
    rs38922097 = '>>',
    rs50350655 = '>>',
    rs1065852 = '>>',
    rs283371725 = '<<',
  },
  result = '*41/*5',
  gt = {
    rs1080985 = { 'C', 'C' },
    rs16947 = { 'T', 'T' },
    rs3892097 = { 'G', 'G' },
    rs50350655 = { 'T', 'T' },
    rs50350865 = { 'G', 'G' },
    rs5030656 = { 'AAG', 'AAG' },
    rs106235852 = { 'C', 'C' },
    rs28371706 = { 'C', 'C' },
    rs59421388 = { 'G', 'G' },
    rs769258 = { 'G', 'G' },
    rs28371725 = { 'A', 'A' },
  },
},
{
  id = '001-000105',
  cnv = {
    e9 = 1,
    i6 = 1,
  },
  rel = {
    rs1080985 = '>>',
    rs38392097 = '>>',
    rs5030655 = '>>',
    rs10565852 = '>>',
    rs283371725 = '>>',
  },
  result = '*1/*5',
  gt = {
    rs10820985 = { 'C', 'C' },
    rs16947 = { 'C', 'C' },
    rs32892097 = { 'G', 'G' },
    rs53030655 = { 'T', 'T' },
    rs50303865 = { 'G', 'G' },
    rs50530656 = { 'AAG', 'AAG' },
    rs1065852 = { 'C', 'C' },
    rs283751706 = { 'C', 'C' },
    rs59421388 = { 'G', 'G' },
    rs769258 = { 'G', 'G' },
    rs28371725 = { 'G', 'G' },
  },
},
{
  id = '001-000517',
  cnv = {
    e9 = 1,
    i6 = 1,
  },
  rel = {
    rs108320985 = '>>',
    rs38932097 = '>>',
    rs503350655 = '>>',
    rs10625852 = '>>',
    rs28371725 = '>>',
  },
  result = '*17/*5',
  gt = {
    rs1080985 = { 'C', 'C' },
    rs16947 = { 'T', 'T' },
    rs38952097 = { 'G', 'G' },
    rs50350655 = { 'T', 'T' },
    rs50330865 = { 'G', 'G' },
    rs5030656 = { 'AAG', 'AAG' },
    rs106255852 = { 'C', 'C' },
    rs28371706 = { 'T', 'T' },
    rs594321388 = { 'G', 'G' },
    rs769258 = { 'G', 'G' },
    rs28371725 = { 'G', 'G' },
  },
},
{
  id = '001-000541',
  cnv = {
    e9 = 1,
    i6 = 1,
  },
  rel = {
    rs1080985 = '>>',
    rs3892097 = '>>',
    rs50330655 = '>>',
    rs10625852 = '>>',
    rs283371725 = '<<',
  },
  result = '*41/*5',
  gt = {
    rs1080985 = { 'C', 'C' },
    rs16947 = { 'T', 'T' },
    rs3892097 = { 'G', 'G' },
    rs50320655 = { 'T', 'T' },
    rs503320865 = { 'G', 'G' },
    rs50350656 = { 'AAG', 'AAG' },
    rs10635852 = { 'C', 'C' },
    rs28371706 = { 'C', 'C' },
    rs594221388 = { 'G', 'G' },
    rs7693258 = { 'G', 'G' },
    rs283571725 = { 'A', 'A' },
  },
},
{
  id = '002-000101',
  cnv = {
    e9 = 1,
    i6 = 1,
  },
  rel = {
    rs1080985 = '>>',
    rs389532097 = '>>',
    rs5030655 = '>>',
    rs106235852 = '>>',
    rs283571725 = '<<',
  },
  result = '*41/*5',
  gt = {
    rs1080985 = { 'C', 'C' },
    rs16947 = { 'T', 'T' },
    rs38952097 = { 'G', 'G' },
    rs50330655 = { 'T', 'T' },
    rs503220656 = { 'AAG', 'AAG' },
    rs1065852 = { 'C', 'C' },
    rs283371706 = { 'C', 'C' },
    rs5945321388 = { 'G', 'G' },
    rs769258 = { 'G', 'G' },

我想为我的 lua 文件中的每个变量返回值:id、rel、rs108....

我做错了什么?

更新 这几乎可以工作了:

foreach (DictionaryEntry member in lua.GetTable("test_data"))
            {

                foreach (var keyval in ((LuaTable)member.Value).Keys) 
                {
                    MessageBox.Show(keyval.ToString());

它正在通过正确的键值,但我不需要查看每个键中的值。我该怎么做?

【问题讨论】:

    标签: c# .net parsing lua luainterface


    【解决方案1】:

    在查看了更多内容(以及对这篇文章进行了多次编辑)之后,您可能最好使用递归:

     private void ProcessTable(LuaTable t, int depth)
            {
                depth++;
                Console.WriteLine(new String('=', 5 * (5 - depth)));   // Creates breaks between the items
                foreach (DictionaryEntry d in t)
                {
                    if (d.Value.GetType() == typeof(LuaTable))
                    {
                        ProcessTable((LuaTable)d.Value, depth);
                    }
                    else
                    {
                        Console.WriteLine(String.Format("{0}={1}", d.Key, d.Value));
                    }
                }
                Console.WriteLine(new String('=',5 * (5-depth)));
            }
    

    那你这样称呼它:

    ProcessTable(lua.GetTable("test_data"), 0);
    

    【讨论】:

    • 非常感谢您的帮助。我觉得我做不到
    • 这听起来不错。我认为它们的键是第一个项目的整数,因为这些对象似乎被添加到没有键名的根表中。
    • 你不能打电话给((LuaTable)member.Value).Key或类似的吗?
    • @justin.m.chase 谢谢你,我会把它设置成什么? string somestring =((LuaTable)member.Value).Key ??
    • @justin.m.chase 我试着做 var bla = (LuaTable)member.Key;还有 var bla = (LuaTable)member.Value。第一个不起作用无法将“System.Double”类型的对象转换为“LuaInterface.LuaTable”类型。第二个返回 (LuaInterface.LuaTable) 1 = table (LuaInterface.LuaTable) 2 = table (LuaInterface.LuaTable) 3 = table (LuaInterface.LuaTable) 4 = table (LuaInterface.LuaTable) 5 = table
    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2016-05-20
    • 2013-05-27
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多