lua字符串与可变字符串和可变模式匹配

问题描述 投票:-2回答:1

我有一个长的可变字符串存储在表索引中,如下所示:

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
1个回答
0
投票

所以,这没什么错。我最初对机器名称的匹配也是在机器名称之后捕获空格。在打印由定界符包围的机器名称后,我发现了这一点。我必须为此添加修剪功能。

这里是我添加的功能:

function trim(string) local trimmed = string:find"%S" return trimmed and string:match(".*%S", trimmed) or "" end

这让我将计算机名称作为变量传递,并剪切结尾的空格。最好在比赛中删掉空格,但我想不出办法将其留为定界符(这对于制表符分隔的值很重要)

© www.soinside.com 2019 - 2024. All rights reserved.