2013-04-15 98 views
4

我有一個結構爲外部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", 
    }, 
    }, 

我嘗試使用下面的LUA腳本打印EXEC鍵/值對如下:

function DeepPrint (e) 
    if type(e) == "table" then 
     for k,v in pairs(e) do 
      if k == "exec" then 
      print(k) 
      DeepPrint(v)  
      end 
     end 
    else 
    print(e) 
    end 
end 


FileStr = "lariatData-sgeT-2012-05-01_2.lua" 
Hnd, ErrStr = io.open(FileStr, "r") 
if Hnd then 
    dofile(FileStr) 
    for Str in Hnd:lines() do  
     DeepPrint(sgeT)    
    end 
Hnd.close() 
else 
    print(ErrStr, "\n") 
end 

理想的情況下,我想打印的數值指標和exec值,如:

2535047 execVal 

然而,當我運行代碼時什麼也沒有返回。最初數字指數並未包含在方括號中,但我添加了它們以使文件能夠被讀取。但是,由於它們不是連續的,我不能像數組一樣循環它們,但我相信這些數字指數可能是我的問題的根源。我不確定我的代碼有什麼問題,但它什麼也沒有返回。任何人都可以推薦我如何修復代碼,以便我可以得到適當的鍵和值來返回?提前致謝!!!

回答

1

由於您的表格具有固定結構,因此您可以簡單地使用語法糖sgeT[key1][key2]來訪問exec鍵。

for i, v in pairs(sgeT) do 
    print(i, v[1].exec) 
end 

這裏是一個工作示例:http://eval.in/16460

1

您遍歷文件中的行,但你已經處理並加載該文件(作爲一個Lua塊),因此它不再需要。只是這樣做:

dofile(FileStr) 
DeepPrint(sgeT) 

的主要問題是,你只叫DeepPrint遞歸那些具有價值exec鍵,但沒有在第一級上的按鍵做(所以沒有東西,你沒去打印超過第一級)。在致電DeepPrint之前,您可能需要先關閉if

function DeepPrint (e) 
    if type(e) == "table" then 
     for k,v in pairs(e) do 
      if k == "exec" then 
      print(k) 
      end 
      DeepPrint(v)  
     end 
    else 
    print(e) 
    end 
end