чтение csv в хеш

Здравствуйте, я новичок в lua и пытаюсь просмотреть CSV по одной строке за раз. Я хотел бы сохранить каждую строку, прочитанную из CSV, в хеш-таблице. Текущее состояние экспериментального кода выглядит следующим образом: -

local fp = assert(io.open ("fields.csv"))
local line=fp:read()
local headers=ParseCSVLine(line,",") 
-- for i,v in ipairs(headers) do print(i,v) end    -- this print outs the CSV header nicely


-- now read the next line from the file and store in a hash
local line=fp:read()
local cols=ParseCSVLine(line,",")
local myfields={}
for i,v in ipairs(headers) do
   -- print( v,cols[i])                            -- this print out the contents nicely
   myfields[v]=cols[i]                             ------ this is where things go bad -----
   end
for i,v in ipairs(myfields) do print(i,v) end      ------ this print nothing!

ParseCSVLine взят из http://lua-users.org/wiki/LuaCsv. Однако проблема заключается в присвоении myfields [v]. Глядя на различные документы, синтаксис того, что разрешено в [], довольно странный, и кажется, что Lua не позволяет использовать здесь символы. Как создать новую таблицу в myfields?


lua
person ferg    schedule 11.01.2011    source источник
comment
Я не знал, что у меня есть! Кажется, я помню, что снял отметку со звездочки под вопросом, так как это определенно не был моим любимым вопросом. В то время ваш ответ был очень полезным. Спасибо.   -  person ferg    schedule 20.05.2013


Ответы (1)


Присвоение таблице выглядит нормально. Проблема заключается в печати содержимого таблицы: вы использовали ipairs там, где должны были использовать pairs. ipairs используется при итерации по массиву (таблица, где ключи представляют собой последовательные числа 1,2,3, ...), а pairs может использоваться для любой таблицы для получения пар ключ / значение, например:

for k,v in pairs(myfields) do print(k,v) end
person interjay    schedule 11.01.2011