セルに改行を含むExcelからのファイルを処理する必要がある場合は、解決策もあります。
この方法の大きな欠点は、文字列にセミコロンや二重引用符を使用できないことです。
私はセミコロンなしで行くことを選びます
if file.respond_to?(:read)
csv_contents = file.read
elsif file_data.respond_to?(:path)
csv_contents = File.read(file.path)
else
logger.error "Bad file_data: #{file_data.class.name}: #{file_data.inspect}"
return false
end
result = "string"
csv_contents = csv_contents.force_encoding("iso-8859-1").encode('utf-8') # In my case the files are latin 1...
# Here is the important part (Remove all newlines between quotes):
while !result.nil?
result = csv_contents.sub!(/(\"[^\;]*)[\n\r]([^\;]*\")/){$1 + ", " + $2}
end
CSV.parse(csv_contents, headers: false, :row_sep => :auto, col_sep: ";") do |row|
# do whatever
end
私の場合、ソリューションは正常に機能します。大きなファイルを処理すると、問題が発生する可能性があります。
引用符なしで使用したい場合は、正規表現のセミコロンを引用符に置き換えてください。