我有一个长的可变字符串存储在表索引中,如下所示:
my_table[4] = MYHOST1.fully.qualfied.com
我有从文件中读取的主机名列表,这些主机名以字符串形式返回。我正在用for循环进行迭代。
MYHOST1 MYHOST2 MYHOST3
由于某些原因:
print (string.match(match_string, machine))
不匹配,即使“ match_string”保留了我表中的正确值,而“ machine”却保留了我反复遍历的正确名称。在这里,我需要对可变字符串进行一些特殊处理吗?
function read_giant_file(file_name)
local header_true = 0
local max_fields = 1
local machine_count = table.maxn(machine_names)
local machine_list = table.concat(machine_names,' ')
--print (machine_count)
--print (machine_list)
for line in io.lines(file_name) do
for machine in machine_list:gmatch"%g-[%s]" do
print ("machine: "..machine)
for field in line:gmatch("(.-)\t") do
table.insert(field_table, field_index, field)
print ("field_index: "..field_index.. "field: "..field)
field_index = field_index + 1
end
if header_true == 0 then
for key, value in pairs(field_table) do
print ("key: "..key," ".."header: "..value)
end
header_true = 1
max_fields = table.maxn(field_table)
print ("write out headers")
for i = 1,table.maxn(field_table) do
print ("i: "..i)i
table.insert(field_table,i,nil)
end
field_index = 1
end -- close loop for header
print ("field index: "..field_index)
print ("max fields: "..max_fields)
if field_index >= max_fields and max_fields > 0 and header_true ~= 0 then
print ("FT: "..field_table[4])
print ("machine: "..machine)
local match_string = field_table[4]
print (string.match(match_string, machine))
i, n = string.find(field_table[4], 'machine')
print (i,n)
if i ~= nil then
print ("matchy")
end
field_index = 1
end
end
end
结束
结束
================================================ =============
所以,这没什么错。我最初对机器名称的匹配也是在机器名称之后捕获空格。在打印由定界符包围的机器名称后,我发现了这一点。我必须为此添加修剪功能。
这里是我添加的功能:
function trim(string)
local trimmed = string:find"%S"
return trimmed and string:match(".*%S", trimmed) or ""
end
这让我将计算机名称作为变量传递,并剪切结尾的空格。最好在比赛中删掉空格,但我想不出办法将其留为定界符(这对于制表符分隔的值很重要)