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

Ruby操作CSV文件:检查值是否存在并提取对应数组

Ruby解析CSV:检查指定值并提取对应行

需求梳理

你想要实现的功能主要有这几点:

  • 让用户输入产品序列号
  • 遍历procedures/Serial.csv文件的每一行,检查输入的序列号是否存在
  • 提取所有包含该序列号的行并展示出来

你已编写的部分代码

require 'csv'

########
## Ask for Serial number
########
serial_number = ask("Product serial number?", true)
serial_number = serial_number.to_s
serial_number = serial_number.upcase
stamp_date= Time.now
old = Time.now.to_i

###################
## CHECK if SN exist in Serial List
###################
CSV.foreach('procedures/Serial.csv') do |row|
  check_serial = row[0]

补全后的完整代码

我帮你把代码补全,同时加上注释说明每个步骤的作用:

require 'csv'

########
## Ask for Serial number
########
# 这里假设你用的是类似Highline库的ask方法来获取用户输入
serial_number = ask("Product serial number?", true)
serial_number = serial_number.to_s.strip.upcase  # 加上strip去除前后空格,避免匹配失误
stamp_date = Time.now
old = Time.now.to_i

###################
## CHECK if SN exist in Serial List & 提取匹配行
###################
matching_rows = []  # 用来存储所有匹配的行

CSV.foreach('procedures/Serial.csv') do |row|
  check_serial = row[0]
  # 检查当前行的第一个元素是否和输入的序列号匹配
  if check_serial == serial_number
    matching_rows << row  # 匹配成功就把该行存入数组
  end
end

# 展示最终结果
if matching_rows.empty?
  puts "没有找到包含序列号 #{serial_number} 的记录"
else
  puts "找到 #{matching_rows.size} 条包含序列号 #{serial_number} 的记录:"
  matching_rows.each_with_index do |row, index|
    puts "#{index + 1}. #{row.join(', ')}"  # 把行数组转成逗号分隔的字符串,更易读
  end
end

小细节优化说明

  • 给serial_number的处理加上了strip,能去除用户输入时不小心加的前后空格,避免因为无关空格导致匹配失败
  • 用matching_rows数组统一收集匹配行,遍历完整个CSV后再统一输出,比边遍历边输出逻辑更清晰
  • 根据匹配结果的数量给出不同提示,用户能直观知道查询结果状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:50:16