在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
我想允许用户输入一个电子邮件,并能够编辑任何一个列出的选项。例如,一个用户输入电子邮件“practice11@whatever.com
“,它将输出“lexus,rc,black,2,practice11@whatever.com
“。然后从这里程序将输出一些消息,告诉用户选择编辑“make,model,color,doors,email
“,然后能够改变那里的任何东西。就像让我们说他们选择“color
“,然后,他们可以将“practice11@whatever.com
“行的颜色从“black
“更改为“blue
“。我相信这可以通过使用散列和使用key-值,但我不确定如何确切地使编辑部分工作。
这是我当前代码:
require "csv"
csv = CSV.read('cars.csv', headers: true)
demo = gets.chomp
print csv.find {|row| row['email'] == demo}
它所做的一切都是在csv文件中,并允许用户在电子邮件中输入,它将输出特定的行。
1条答案
按热度按时间cld4siwp1#
所以--你的问题有点模糊,涉及到很多隐含的问题,比如“我如何编写可以请求不同选项并相应地执行的代码”--所以,如果你能明确地说明你想问的问题,可能会有所帮助。
从外观上看,您似乎最感兴趣的是了解如何修改CSV表,以及如何获取有关CSV字段/表/数据等的信息。
为此,你有两个朋友:ruby 'p'方法和文档。
“p”方法允许您检查对象。“p someObject”与调用“puts someObject.inspect”相同-它非常方便,就像“puts someObject.class”一样,可以找出您正在处理的对象类型。
在这种情况下,您可以稍微更改代码的最后一行以获取一些信息:
突然我们发现我们正在处理一个CSV::Table
这并不奇怪,让我们去看一下文档。我不知道你使用的是什么版本的ruby,但是2.6.1是最新的,足以提供我们需要的信息,而且现在已经很老了,所以你可能可以访问它:
https://ruby-doc.org/stdlib-2.6.1/libdoc/csv/rdoc/CSV.html
告诉我们,如果我们CSV.read使用标头执行www.example.com:
如果指定了头,阅读方法将返回CSV::Table的示例,其中包含CSV::Row。
所以现在我们知道我们有一个CSV::Table(它很像一个数组/列表,但是有一些方便的方法(比如您正在使用的'find')。
CSV::Row基本上是一个保持其顺序的散列,并且如预期的那样,根据头部进行键控。
所以我们可以做到:
毫无疑问,CSV::Table有一个'to_s'方法,让我们打印出CSV:
接下来你可以接手了。