2013-04-15 37 views
-1

我有了存储在它的表中的格式如下外部LUA文件:的Lua访问表存储在外部文件

sgeT = { 
    2535047 = { 
    { 
     ["account"] = "TG-MCB110105", 
     ["exec"] = "/share/home/00288/tg455591/NAMD_2.8b3/NAMD_2.8b3_Linux-x86_64-MVAPICH-Intel-Ranger/namd2", 
     ["execEpoch"] = 1305825864, 
     ["execModify"] = "Thu May 19 12:24:24 2011", 
     ["execType"] = "user:binary", 
     ["jobID"] = "2535047", 
     ["numCores"] = "128", 
     ["numNodes"] = "8", 
     pkgT = { 
     }, 
     ["runTime"] = "65125", 
     ["sha1"] = "e157dd510a7be4d775d6ceb271373ea24e7f9559", 
     sizeT = { 
      ["bss"] = "104552", 
      ["data"] = "192168", 
      ["text"] = "10650813", 
     }, 
     ["startEpoch"] = "1335843433", 
     ["startTime"] = "Mon Apr 30 22:37:13 2012", 
     ["user"] = "guo", 
    }, 
}, 
2535094 = { 
{ 
    ["account"] = "TG-MCB110105", 
    ["exec"] = "/share/home/00288/tg455591/NAMD_2.8b3/NAMD_2.8b3_Linux-x86_64-MVAPICH-Intel-Ranger/namd2", 
    ["execEpoch"] = 1305825864, 
    ["execModify"] = "Thu May 19 12:24:24 2011", 
    ["execType"] = "user:binary", 
    ["jobID"] = "2535094", 
    ["numCores"] = "128", 
    ["numNodes"] = "8", 
    pkgT = { 
    }, 
    ["runTime"] = "81635", 
    ["sha1"] = "e157dd510a7be4d775d6ceb271373ea24e7f9559", 
    sizeT = { 
     ["bss"] = "104552", 
     ["data"] = "192168", 
     ["text"] = "10650813", 
    }, 
    ["startEpoch"] = "1335823028", 
    ["startTime"] = "Mon Apr 30 16:57:08 2012", 
    ["user"] = "guo", 
    }, 
} 

我想通过像数组表来迭代并返回EXEC键,值对,我完全新的Lua和我使用下面的脚本:

FileStr = "lariatData-sgeT-2012-05-31.lua" 
Hnd, ErrStd = io.open(FileStr, "r") 
myTable = loadTable(FileStr) 
if Hnd then 
for Str in Hnd:lines() do 
    print(Str, "\n") 
    for exec, val in pairs(myTable) do 
     print(exec.." "..val, "\n") 
    end 
end 
Hnd.close() 
else 
    print(ErrStr, "\n") 
end 

但是,它返回该表是零。我究竟做错了什么?

+0

什么是'loadTable'? – hjpotter92

+0

我想加载存储在FileStr中的表数据。这可能是不正确的。 – amber4478

+0

你是如何得到文件中的表格的?声明是错误的。 '2535047'应该是'[2535047]',同样''[2535094]' – hjpotter92

回答

1

在上述意见延续:

-- Notice that I've used `[2535047]` 
sgeT = { 
    [2535047] = { 
    { 
     ["account"] = "TG-MCB110105", 
     ["exec"] = "/share/home/00288/tg455591/NAMD_2.8b3/NAMD_2.8b3_Linux-x86_64-MVAPICH-Intel-Ranger/namd2", 
     ["execEpoch"] = 1305825864, 
     ["execModify"] = "Thu May 19 12:24:24 2011", 
     ["execType"] = "user:binary", 
     ["jobID"] = "2535047", 
     ["numCores"] = "128", 
     ["numNodes"] = "8", 
     pkgT = { 
     }, 
     ["runTime"] = "65125", 
     ["sha1"] = "e157dd510a7be4d775d6ceb271373ea24e7f9559", 
     sizeT = { 
      ["bss"] = "104552", 
      ["data"] = "192168", 
      ["text"] = "10650813", 
     }, 
     ["startEpoch"] = "1335843433", 
     ["startTime"] = "Mon Apr 30 22:37:13 2012", 
     ["user"] = "guo", 
    }, 
}, 
} 

以上是您的文件。那么,你的Lua程序应该是:

FileStr = "lariatData-sgeT-2012-05-31.lua" 
Hnd, ErrStr = io.open(FileStr, "r") 
if Hnd then 
    dofile(FileStr) 
    for Str in Hnd:lines() do 
     print(Str, "\n") 
     for exec, val in pairs(sgeT) do 
      print(exec.." "..val, "\n") 
     end 
    end 
    Hnd.close() 
else 
    print(ErrStr, "\n") 
end 
+0

试过你的代码,它返回该表的索引仍然是零 – amber4478

+0

好吧我调整了数字指标,包括方括号,现在我得到以下错误:stdin:6:尝试连接本地'val'(a表值) 堆栈回溯: \t stdin:6:主要区块 \t [C]:in? – amber4478

+0

请注意,我调整了打印语句只返回值,现在它返回的是十六进制内存位置。 – amber4478