簡體   English   中英

嘗試使用fastcsv在CSV中查找字符串的第一個實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM