私のアプリケーションは、ユーザーからアップロードされたファイルを受け入れて解析し、シーク メソッドと巻き戻しメソッドをかなり頻繁に使用して、ファイルからブロックを解析します (行は、データのセクションを囲むために「開始」または「終了」で開始できます)。
新しい要件により、ユーザーは暗号化されたファイルをアップロードできます。ファイルのコンテンツの復号化を実装し、コンテンツ文字列を既存のメソッドに返します。文字列を 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)