拥有CSV文件并允许用户编辑



在ruby中,如果我有这样的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

我希望允许用户输入电子邮件,并能够编辑列出的任何一个选项。例如,用户输入电子邮件";CCD_ 1";并且它将输出"0";lexus,rc,black,2,practice11@whatever.com";。然后程序将从这里输出一些消息,该消息将告诉用户选择通过"编辑"进行编辑;CCD_ 3";,然后能够改变那里的一切。就像让我们说他们选择";CCD_ 4";,则它们可以将颜色从";CCD_ 5";至";CCD_ 6";的";CCD_ 7";线我相信这可以使用哈希和键值来完成,但我不确定如何准确地使编辑部分工作。

这是我当前的代码:

require "csv"
csv = CSV.read('cars.csv', headers: true)
demo = gets.chomp
print csv.find {|row| row['email'] == demo}

它所做的一切都是在csv文件中,允许用户在电子邮件中输入,并输出特定的行。

所以-你的问题有点模糊,涉及到许多隐含的问题,比如"我如何编写可以要求不同选项并相应地采取行动的代码因此,如果你能准确地澄清你想问的问题,这可能会有所帮助。

从外观上看,您似乎最感兴趣的是了解如何修改CSV表,并获得有关CSV字段/表/数据等的信息。

为此,您有两个朋友:ruby'p'方法和docs。

"p"方法允许您检查对象"p someObject";与调用"putsomeObject.vinspect"相同,而且它非常方便;将someObject.class";找出你正在处理的对象类型。

在这种情况下,您可以稍微更改代码的最后一行以获得一些信息:

puts csv.class
got = csv.find {|row| row['email'] == demo}
p got

突然间,我们发现我们正在处理一个CSV::Table

这并不奇怪,让我们去看医生吧。我不知道你使用的是什么版本的ruby,但2.6.1已经足够新了,可以提供我们需要的信息,而且在这一点上已经足够旧了,所以你可能可以访问它:

https://ruby-doc.org/stdlib-2.6.1/libdoc/csv/rdoc/CSV.html

告诉我们,如果我们使用标题进行CSV读取:

"如果指定了头,读取方法将返回CSV::Table的实例,该实例由CSV::Row组成">

所以现在我们知道我们有一个CSV::Table(它很像一个数组/列表,但有一些方便的方法(例如您正在使用的"find"(。

CSV::Row基本上是一个散列,它可以维护它的顺序,并且正如预期的那样,根据标头进行键控。

所以我们可以做:

p got.fields
p got['model']
got['model'] = 'edsel'
p got['model']
p got.fields

毫不奇怪,CSV::表有一个"to_s"方法,让我们打印出CSV:

puts csv.to_s

你也许可以从这里拿走。

最新更新