2013-05-29 48 views
0

我的應用程序接受來自用戶的上傳文件並對其進行解析,使用seek和rewind方法來分析文件中的塊(行可以以'開始「或」結束「來包圍一段數據等)。使用seek,rewind,解析字符串像CSV文件

新的要求允許用戶上傳加密文件。我已經實現了對文件內容的解密並將內容字符串返回給現有的方法。我可以將字符串解析爲CSV,但會丟失文件控件。

由於商業原因,存儲未加密的文件版本不是一個選項。

我正在使用FasterCSV,但如果我可以保持seek/rewind行爲,則不會厭惡使用其他東西。

當前代碼:

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

一些挖掘和實驗後,我發現這是可能保留IO方法通過使用StringIO類,像這樣:

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行,沒有太多額外的工作。

0

你不需要CSV寶石了,但如果你喜歡尋求/快退的行爲,你可以滾你自己的字符串。這樣的事情可能會爲你的工作情況:

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