You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby 3.1.2实现用户输入修改CSV并更新本地文件方案

Ruby CSV文件更新解决方案

问题背景

在Ruby 3.1.2环境下,现有如下CSV文件(cars.csv):

make,model,color,doors,email
dodge,charger,black,4,practice1@whatever.com
ford,focus,blue,5,practice2@whatever.com
nissan,350z,black,2,practice3@whatever.com
mazda,miata,white,2,practice4@whatever.com
honda,civid,brown,4,practice5@whatever.com
corvette,stingray,red,2,practice6@whatever.com
ford,fiesta,blue,5,practice7@whatever.com
bmw,m4,black,2,practice8@whatever.com
audi,a5,blue,2,practice9@whatever.com
subaru,brz,black,2,practice10@whatever.com
lexus,rc,black,2,practice11@whatever.com

现有代码可接收用户输入的邮箱,定位对应行修改model字段并在控制台打印修改后的CSV内容,但无法将修改同步到本地的cars.csv文件,同时代码存在冗余,需要优化。

原代码如下:

require "csv"

csv = CSV.read('cars.csv', headers: true)
print "Enter an email: \n> "
demo = gets.chomp
#print csv.find {|row| row['email'] == demo}
got = csv.find {|row| row['email'] == demo}
p got

p got.fields
p got['model']
got['model'] = 'rcf'
p got['model']
p got.fields
#prints out the csv file 
puts csv.to_s

优化后的代码(含文件更新功能)

require "csv"

# 读取CSV文件并转换表头为符号
csv_data = CSV.read('cars.csv', headers: true, header_converters: :symbol)

# 获取并处理用户输入
print "输入要修改的邮箱:\n> "
target_email = gets.chomp.strip

# 定位目标行并执行修改
target_row = csv_data.find { |row| row[:email] == target_email }
if target_row
  print "输入新的model值:\n> "
  new_model = gets.chomp.strip
  target_row[:model] = new_model
  puts "已找到对应行并完成修改"
else
  puts "未找到邮箱为#{target_email}的记录"
  exit 1
end

# 将修改后的数据写入原文件
CSV.open('cars.csv', 'w', headers: csv_data.headers, write_headers: true) do |csv|
  csv_data.each { |row| csv << row }
end

# 打印修改后的内容
puts "\n修改后的CSV内容:"
csv_data.each { |row| puts row.to_csv.chomp }

关键优化说明

  • 文件写入实现:用CSV.open以写入模式('w')打开文件,指定表头参数确保保留原结构,遍历修改后的数据逐行写入,完成本地文件更新。
  • 错误处理:增加未找到目标邮箱时的提示并退出,避免空指针报错。
  • 代码精简:移除原代码中冗余的调试输出,保留必要的交互提示。
  • 表头转换:通过header_converters: :symbol将表头转为符号,用row[:email]代替字符串访问字段,代码更简洁。
  • 输入优化:用strip处理用户输入,去除首尾空白,避免因输入空格导致匹配失败。
  • 交互灵活性:新增用户自定义model值的输入步骤,不再固定修改为rcf。

内容的提问来源于stack exchange,提问作者burner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:15:35