1

我的应用程序接受用户上传的文件并对其进行解析,大量使用查找和倒带方法来解析文件中的块(行可以以“开始”或“结束”开头以包含一段数据等)。

一项新要求允许用户上传加密文件。我已经实现了文件内容的解密,并将内容字符串返回给现有方法。我可以将字符串解析为 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)
4

2 回答 2

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
于 2013-05-29T14:10:59.573 回答
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 行一样使用它,不需要太多额外的工作。

于 2013-06-07T09:10:36.393 回答