【发布时间】:2020-04-06 13:26:54
【问题描述】:
我有一个长变量字符串存储在表索引中,如下所示:
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
结束
结束
================================================ ===============
【问题讨论】:
-
能否请您添加打印这两个变量的结果?
-
你能告诉我们完整的代码吗,因为我只能通过看到两个变量名来猜测,而对它们被分配的方式或内容一无所知
-
感谢您的代码。你能把文本和模式作为字符串提供吗?
-
不是确切的文本(我不想/不能在上面公开数据。)但它在功能上与此查询的第一部分中列出的相同
-
如果你不提供两者,你就不能问为什么模式与文本不匹配。这不是很明显吗?您只需提供变量名称。举一个与你的真实数据产生相同结果的例子
标签: string lua pattern-matching string-matching