Spaces:
Sleeping
Sleeping
--[[ | |
CSVWriter.lua - Write CSV files | |
]]-- | |
CSVWriter = Polo { | |
TIME_FORMAT = '%02d:%02d:%02d,%03d', | |
DELIMITERS = { | |
{ char = ',', name = 'Comma' }, | |
{ char = ';', name = 'Semicolon' }, | |
{ char = '\t', name = 'Tab' }, | |
}, | |
new = function(options) | |
options = options or {} | |
return { | |
file = options.file, | |
delimiter = options.delimiter or ',', | |
include_header_row = options.include_header_row or false, | |
} | |
end, | |
} | |
function CSVWriter:init() | |
assert(self.file, 'missing file') | |
end | |
CSVWriter.format_time = function (time) | |
local milliseconds = math.floor(time * 1000) % 1000 | |
local seconds = math.floor(time) % 60 | |
local minutes = math.floor(time / 60) % 60 | |
local hours = math.floor(time / 3600) | |
return string.format(CSVWriter.TIME_FORMAT, hours, minutes, seconds, milliseconds) | |
end | |
function CSVWriter:write(transcript) | |
if self.include_header_row then | |
self:write_header_row() | |
end | |
local sequence_number = 1 | |
for _, segment in pairs(transcript:get_segments()) do | |
self:write_segment(segment, sequence_number) | |
sequence_number = sequence_number + 1 | |
end | |
end | |
function CSVWriter:write_header_row() | |
local fields = { | |
CSVWriter._quoted('Sequence Number'), | |
CSVWriter._quoted('Start Time'), | |
CSVWriter._quoted('End Time'), | |
CSVWriter._quoted('Text'), | |
CSVWriter._quoted('File'), | |
} | |
self.file:write(table.concat(fields, self.delimiter)) | |
self.file:write('\n') | |
end | |
function CSVWriter:write_segment(segment, sequence_number) | |
local start = segment:get('start') | |
local end_ = segment:get('end') | |
local text = segment:get('text') | |
local file = segment:get_file_with_extension() | |
self:write_line(text, sequence_number, start, end_, file) | |
end | |
function CSVWriter:write_line(line, sequence_number, start, end_, file) | |
local fields = { | |
sequence_number, | |
CSVWriter._quoted(CSVWriter.format_time(start)), | |
CSVWriter._quoted(CSVWriter.format_time(end_)), | |
CSVWriter._quoted(line), | |
CSVWriter._quoted(file), | |
} | |
self.file:write(table.concat(fields, self.delimiter)) | |
self.file:write('\n') | |
end | |
function CSVWriter._quoted(input_string) | |
return table.concat({'"', input_string:gsub('"', '""'), '"'}) | |
end | |