У меня есть длинная строка переменной, хранящаяся в индексе таблицы, например:
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
Конец
Конец
================================================== ===========
1 ответ
Так что в этом не было ничего плохого. Мое исходное совпадение с именем машины также заключалось в захвате пробелов после имени машины. Я понял это после того, как напечатал имя машины, окруженное разделителями. Мне пришлось добавить функцию обрезки для этого.
Вот функция, которую я добавил:
function trim(string)
local trimmed = string:find"%S"
return trimmed and string:match(".*%S", trimmed) or ""
end
Это позволило мне передать имя машины в качестве переменной и сократить пробелы в конце. Возможно, было бы лучше вырезать пробел в совпадении, но я не мог найти способ сделать это и оставить его в качестве разделителя (что важно для значений, разделенных табуляцией).
Похожие вопросы
Новые вопросы
string
Строка - это конечная последовательность символов, обычно используемая для текста, хотя иногда для произвольных данных.