[英]Problems trying to parse CSV file with umlaut's etc in it using Ruby 1.8 / FasterCSV
[英]trying to find the 1st instance of a string in a CSV using fastercsv
我正在嘗試打開CSV文件,查找字符串,然后返回csv文件的第二列,但僅返回它的第一個實例。 我已經了解了以下內容,但不幸的是,它返回了每個實例。 我有點糊塗了。
Ruby的神能幫忙嗎? 在此先感謝。
中號
就此示例而言,假設names.csv是具有以下內容的文件:
foo, happy
foo, sad
bar, tired
foo, hungry
foo, bad
#!/usr/local/bin/ruby -w
require 'rubygems'
require 'fastercsv'
require 'pp'
FasterCSV.open('newfile.csv', 'w') do |output|
FasterCSV.foreach('names.csv') do |lookup|
index_PL = lookup.index('foo')
if index_PL
output << lookup[2]
end
end
end
好的,所以,如果我想返回foo的所有實例,但是要在csv中返回,那該如何工作? 所以我想要的結果是快樂,悲傷,飢餓,壞。 我以為會是:
FasterCSV.open('newfile.csv', 'w') do |output|
FasterCSV.foreach('names.csv') do |lookup|
index_PL = lookup.index('foo')
if index_PL
build_str << "," << lookup[2]
end
output << build_str
end
end
但它似乎不起作用
用open
代替foreach
(以獲取一個Enumerable)並find
:
FasterCSV.open('newfile.csv', 'w') do |output|
output << FasterCSV.open('names.csv').find { |r| r.index('foo') }[2]
end
如果找不到任何index
調用將返回nil
。 這意味着find
將為您提供具有'foo'
的第一行,您可以從結果中拉出索引2處的列。
如果不確定names.csv
是否具有所需的內容,則建議進行一些錯誤檢查:
FasterCSV.open('newfile.csv', 'w') do |output|
foos_row = FasterCSV.open('names.csv').find { |r| r.index('foo') }
if(foos_row)
output << foos_row[2]
else
# complain or something
end
end
或者,如果您想靜靜地忽略缺少'foo'
並改用空字符串,則可以執行以下操作:
FasterCSV.open('newfile.csv', 'w') do |output|
output << (FasterCSV.open('names.csv').find { |r| r.index('foo') } || ['','',''])[2]
end
不過,我可能會選擇“抱怨,如果找不到”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.