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

kx7yvsdv  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(120)

在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文件中,并允许用户在电子邮件中输入,它将输出特定的行。

cld4siwp

cld4siwp1#

所以--你的问题有点模糊,涉及到很多隐含的问题,比如“我如何编写可以请求不同选项并相应地执行的代码”--所以,如果你能明确地说明你想问的问题,可能会有所帮助。
从外观上看,您似乎最感兴趣的是了解如何修改CSV表,以及如何获取有关CSV字段/表/数据等的信息。
为此,你有两个朋友:ruby 'p'方法和文档。
“p”方法允许您检查对象。“p someObject”与调用“puts someObject.inspect”相同-它非常方便,就像“puts 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.read使用标头执行www.example.com:
如果指定了头,阅读方法将返回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::Table有一个'to_s'方法,让我们打印出CSV:

puts csv.to_s

接下来你可以接手了。

相关问题