我的应用程序接受来自用户的上传文件并对其进行解析,大量使用搜索和回放方法来解析文件中的块(行可以以'start'或'end'开头以包含一部分数据,等)。
新要求允许用户上传加密文件。我已经实现了文件内容的解密,并将内容字符串返回给现有方法。我可以将字符串解析为CSV但丢失文件控件。
出于商业原因,存储未加密的文件版本不是一种选择。
我正在使用FasterCSV,但如果我可以保持搜索/回放行为,则不反对使用其他内容。
当前代码:
FasterCSV.open(path, 'rb') do |csv| # Can I open a string as if it were a file?
unless csv.eof? # Catch empty files
# Read, store position, seek, rewind all used during parsing
position = csv.pos
row = csv.readline
csv.seek(pos)
答案 0 :(得分:0)
您不再需要CSV gem,但如果您更喜欢搜索/回放行为,则可以自行滚动字符串。这样的事情可能适用于您的场景:
array_of_lines=unecrypted_file_string.split('\n')
array_of_lines.each_with_index do |line,index|
position=index
row=line
seek=line[10]
end
答案 1 :(得分:0)
经过一些挖掘和实验后,我发现可以使用StringIO
类来保留IO方法,如下所示:
csv = StringIO.new(decrypted_content)
unless csv.nil?
unless csv.eof? # Catch empty files
position = csv.pos
row = csv.readline.chomp.split(',')
csv.seek(pos)
只有更改才需要手动拆分行才能像csv行一样使用它,而不需要额外的工作。