comm.lua 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. --[[抽取脚本工具类]]
  2. common={}
  3. --根据field获取结果对象
  4. function common.getFieldObjects(result,field)
  5. for key, val in pairs(result) do
  6. if key==field then
  7. return val
  8. end
  9. end
  10. return nil
  11. end
  12. --抽取field新增结果赋值object(field,code,ruletext,extfrom,field,value,type,matchtype)
  13. function common.setFieldObjects(result,field,object)
  14. local nofield=true
  15. for key, val in pairs(result) do
  16. if key==field then
  17. nofield=false
  18. table.insert(val, object)
  19. end
  20. end
  21. if nofield then
  22. result[field]={object}
  23. end
  24. return result
  25. end
  26. --输出
  27. function printf(obj)
  28. print(dump(obj) )
  29. end
  30. function dump(obj)
  31. local getIndent, quoteStr, wrapKey, wrapVal, isArray, dumpObj
  32. getIndent = function(level)
  33. return string.rep("\t", level)
  34. end
  35. quoteStr = function(str)
  36. str = string.gsub(str, "[%c\\\"]", {
  37. ["\t"] = "\\t",
  38. ["\r"] = "\\r",
  39. ["\n"] = "\\n",
  40. ["\""] = "\\\"",
  41. ["\\"] = "\\\\",
  42. })
  43. return '"' .. str .. '"'
  44. end
  45. wrapKey = function(val)
  46. if type(val) == "number" then
  47. return "[" .. val .. "]"
  48. elseif type(val) == "string" then
  49. return "[" .. quoteStr(val) .. "]"
  50. else
  51. return "[" .. tostring(val) .. "]"
  52. end
  53. end
  54. wrapVal = function(val, level)
  55. if type(val) == "table" then
  56. return dumpObj(val, level)
  57. elseif type(val) == "number" then
  58. return val
  59. elseif type(val) == "string" then
  60. return quoteStr(val)
  61. else
  62. return tostring(val)
  63. end
  64. end
  65. local isArray = function(arr)
  66. local count = 0
  67. for k, v in pairs(arr) do
  68. count = count + 1
  69. end
  70. for i = 1, count do
  71. if arr[i] == nil then
  72. return false
  73. end
  74. end
  75. return true, count
  76. end
  77. dumpObj = function(obj, level)
  78. if type(obj) ~= "table" then
  79. return wrapVal(obj)
  80. end
  81. level = level + 1
  82. local tokens = {}
  83. tokens[#tokens + 1] = "{"
  84. local ret, count = isArray(obj)
  85. if ret then
  86. for i = 1, count do
  87. tokens[#tokens + 1] = getIndent(level) .. wrapVal(obj[i], level) .. ","
  88. end
  89. else
  90. for k, v in pairs(obj) do
  91. tokens[#tokens + 1] = getIndent(level) .. wrapKey(k) .. " = " .. wrapVal(v, level) .. ","
  92. end
  93. end
  94. tokens[#tokens + 1] = getIndent(level - 1) .. "}"
  95. return table.concat(tokens, "\n")
  96. end
  97. return dumpObj(obj, 0)
  98. end
  99. --通用方法结束
  100. return common;