MST
星途 面试题库

面试题:Ruby 实现 CSV 文件数据转换与写入

给定一个 CSV 文件,其结构为:第一行为表头,包含 'product_name', 'price', 'quantity'。请编写 Ruby 代码,读取该 CSV 文件,将 'price' 列的数据乘以 'quantity' 得到总金额,然后将原数据和新增的总金额列写入到一个新的 CSV 文件中。同时,在写入新文件时,要对所有字符串数据进行转义处理,防止 CSV 注入攻击。
22.7万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
require 'csv'

input_file = 'input.csv'
output_file = 'output.csv'

data = []
CSV.foreach(input_file, headers: true) do |row|
  total_amount = row['price'].to_f * row['quantity'].to_i
  new_row = row.to_h
  new_row['total_amount'] = total_amount
  data << new_row
end

CSV.open(output_file, 'w') do |csv|
  csv << data.first.keys
  data.each do |row|
    escaped_row = row.map do |key, value|
      if value.is_a?(String)
        CSV.generate_line([value]).chomp
      else
        value
      end
    end
    csv << escaped_row
  end
end