使用搜索,倒带,位置解析像CSV文件一样的字符串

时间:2013-05-29 11:17:47

标签: ruby-on-rails csv file-io

我的应用程序接受来自用户的上传文件并对其进行解析,大量使用搜索和回放方法来解析文件中的块(行可以以'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)

2 个答案:

答案 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行一样使用它,而不需要额外的工作。