Module:ParseCSV
From Against the Storm Official Wiki
Documentation for this module may be created at Module:ParseCSV/doc
--- Module for parsing CSV data into a Lua table. -- @module ParseCSV local ParseCSV = {} --- Parses the CSV data and returns the header and rows as a Lua table. -- @tparam string csvString The CSV data to be parsed. -- @treturn table The header of the CSV data. -- @treturn table The rows of the CSV data. function ParseCSV.parseCSV(csvString) -- Check for an end-of-file comma if csvString:sub(-1) == ',' then csvString = csvString:sub(1, -2) -- Remove the trailing comma end local header = nil local rows = {} -- Separate the csv data into lines/rows by gmatch'ing on carriage returns -- and/or newlines for line in csvString:gmatch("[^\r\n]+") do -- the first line will be the header, after we build it, everything else -- goes into the rows table if not header then -- we started with nil, so replace nil with a blank table header = {} -- Separate the rows into fields by gmatch'ing on commas for field in line:gmatch("[^,]+") do -- append the last-matched field (value) to the header table table.insert(header, field) end -- there is only one row in the header table, so we don't need to do -- anything else else -- build each line separately as a new table local row = {} for field in line:gmatch("[^,]+") do -- append the last-matched field (value) to the row table table.insert(row, field) end --append the constructed row to the rows table table.insert(rows, row) end end -- for each line -- Return the header and the rows data table return header, rows end -- parseCSV function return ParseCSV