在 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
我希望允許用戶輸入電子郵件并能夠編輯列出的任何一個選項。例如,用戶輸入電子郵件“ [email protected]”,它將輸出“ lexus,rc,black,2,[email protected]”。然后從這里程式將輸出一些訊息,告訴用戶通過“ make,model,color,doors,email”選擇編輯,然后能夠更改那里的任何內容。就像假設他們選擇“ color”,那么他們可以將顏色從“ black”更改blue為“ ”行的“ [email protected]”。我相信這可以使用散列和鍵值來完成,但我不確定如何使編輯部分準確作業。
這是我當前的代碼:
require "csv"
csv = CSV.read('cars.csv', headers: true)
demo = gets.chomp
print csv.find {|row| row['email'] == demo}
它所做的一切都在 csv 檔案中,并允許用戶輸入電子郵件,它將輸出該特定行。
uj5u.com熱心網友回復:
所以 - 你的問題有點含糊,涉及一些隱含的問題,例如“我如何撰寫可以要求不同選項并采取相應行動的代碼” - 所以如果你確切地澄清你想問的問題可能會有所幫助。
從外觀上看,您似乎最感興趣的是了解如何修改 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:
“如果指定了標題,讀取方法將回傳一個 CSV::Table 的實體,由 CSV::Row 組成。”
所以現在我們知道我們有一個 CSV::Table(它很像一個陣列/串列,但有一些方便的方法(例如您正在使用的“查找”)。
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
你可能可以從這里拿走它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/515546.html
標籤:红宝石CSV哈希
