【发布时间】:2017-05-26 01:20:15
【问题描述】:
我有这个 CSV 文件:
col1, col2, col3, col4, col5
name1, contact1, addr, ess1, zip1, comment1 <==
name2, contact2, address2, zip2, comment2
name3, contact3, address3, zip3, comment3
当我数列时:
columns = CSV.read(file_path, headers: true).headers
当第二行(第 1 条记录/行)的列数超过列标题数时,这将返回更大的数字:6。
打印的标题:col1, col2, col3, col4, col5, nil
我想正确计算 CSV 列标题,以将其与每条记录/行的列数进行比较。
columns = CSV.read(file_path, headers: true).headers
logger.info("COLUMN NAMES: #{columns.inspect}")
logger.info("COLUMN COUNT: #{columns.count}")
CSV.foreach(file_path, option) do |row|
# Check if a row columns matches file column headers count
if row.count != columns.count
logger.info("Error: Row count not match.")
File.delete(lock_file)
exit
end
end
我想在保存记录之前将COLUMN HEADERS COUNT 与RECORD COLUMNS COUNT 匹配。如果记录的列多于标题,则记录中可能会出现逗号,。
这也可能意味着用户提供了无效的记录数据,并且记录列将不匹配 DB 表上的每个字段。
【问题讨论】:
-
大概算一下第一行有多少
nil? -
@c650 我敢打赌第一行没有
nil,因为它超过了列标题的数量。标题:5|行列:6 -
如果您解释为什么要这样做,它可能会帮助我们回答您。这听起来有点像“XY Problem”。
-
@theTinMan 感谢您指出这一点。我更新了问题并添加了 EDIT 部分为什么我需要它来工作。
标签: ruby-on-rails ruby csv