加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

删除文件中的行 – Ruby

发布时间:2020-12-17 04:04:16 所属栏目:百科 来源:网络整理
导读:在特定行中存在特定值的 ruby中从CSV文件中删除行的巧妙方法是什么? 这是一个文件的例子: 350 lbs.,Outrigger Footprint,61" x 53",Weight,767 lbs.,300-2080350 lbs.,817 lbs.,300-2580350 lbs.,69" x 61",867 lbs.,300-3080350 lbs.,300-3080 理想情况下
在特定行中存在特定值的 ruby中从CSV文件中删除行的巧妙方法是什么?

这是一个文件的例子:

350 lbs.,Outrigger Footprint,61" x 53",Weight,767 lbs.,300-2080
350 lbs.,817 lbs.,300-2580
350 lbs.,69" x 61",867 lbs.,300-3080
350 lbs.,300-3080

理想情况下,我想要一个只用这个创建的新文件:

350 lbs.,300-3080

给这个时:

300-2580
300-3080
300-2080

所以我知道我可以用sort filename | uniq -d做到这一点,但我正在努力学习Ruby(有点痛苦).

提前致谢,
中号

解决方法

您可以使用它来获取csv文件中数组中的唯一行

File.readlines("file.csv").uniq
=> ["350 lbs.,61" x 53",300-2080n","350 lbs.,300-2580n",69" x 61",300-3080n"]

要将其写入新文件,您可以在写入模式下打开文件,将其写入文件:

File.open("new_csv","w+") { |file| file.puts File.readlines("csv").uniq }

为了比较值,您可以在“,”上使用split函数来访问每列,如下所示:

rows = File.readlines("csv").map(&:chomp) # equivalent to File.readlines.map { |f| f.chomp }
mapped_columns = rows.map { |r| r.split(",").map(&:strip) }
=> [["350 lbs."," Outrigger Footprint"," 61" x 53""," Weight"," 767 lbs."," 300-2080"],["350 lbs."," 817 lbs."," 300-2580"],.....]
mapped_columns[0][5]
=> "300-2080"

如果您想要更多功能,最好安装FasterCSV gem.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读