String lua字符串与变量字符串和变量模式匹配
我在表索引中存储了一个长变量字符串,如下所示:String lua字符串与变量字符串和变量模式匹配,string,lua,pattern-matching,string-matching,String,Lua,Pattern Matching,String Matching,我在表索引中存储了一个长变量字符串,如下所示: my_table[4] = MYHOST1.fully.qualfied.com 我有一个从文件中读取的主机名列表,它以字符串形式返回。我正在用for循环迭代这个过程 MYHOST1 MYHOST2 MYHOST3 出于某种原因: print (string.match(match_string, machine)) 不匹配,即使“match_string”保存表中的正确值,“machine”保存我迭代的正确名称。这里我需要对变量字符串做一
my_table[4] = MYHOST1.fully.qualfied.com
我有一个从文件中读取的主机名列表,它以字符串形式返回。我正在用for循环迭代这个过程
MYHOST1 MYHOST2 MYHOST3
出于某种原因:
print (string.match(match_string, machine))
不匹配,即使“match_string”保存表中的正确值,“machine”保存我迭代的正确名称。这里我需要对变量字符串做一些特殊的处理吗
下面是整个函数,其中包含大量调试。我不确定我是否正在为论坛格式化这篇文章。我的复制和粘贴非常混乱。
结束
结束
================================================================所以,这没有什么问题。我最初匹配的机器名也是捕获机器名后的空白。我在打印了被分隔符包围的机器名后发现了这一点。我必须为此添加一个修剪函数 下面是我添加的函数:
功能微调(字符串)
本地修剪=字符串:查找“%S”
返回修剪后的字符串:匹配(“%S”,修剪)或“”
结束
这使我可以将机器名作为变量传递,并删除后面的空格。在匹配中删减空白可能更好,但我无法找到一种方法来做到这一点,并将其保留为分隔符(这对于制表符分隔的值很重要)您能添加打印这两个变量的结果吗?您能给我们显示完整的代码吗?因为我只能通过看到两个变量名进行猜测,而不知道它们是如何分配给代码的。请您将文本和模式作为字符串提供好吗?不是确切的文本(我不想/不能在其上公开数据),但在功能上是相同的,在本查询的第一部分中列出了。如果您不同时提供这两个文本,您无法问为什么模式与文本不匹配。这不是很明显吗?您只需提供变量名。给出一个与实际数据产生相同结果的示例
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