2016-10-27 9 views
0

質問はあまりうまくいかないかもしれません。長いフローのためのCSV解析失敗の説明方法Ruby /キュウ

私の問題はこれです:

キュウリシナリオそれは私に読んだ後は、この

When/^the user reads in company information from (.*)$/ do |input_file| 
    csv_text = File.read(input_file) 
    @csv_information = CSV.parse(csv_text, :headers => true) 
end 

のような何かをして実行してフォームに必要事項を記入の長い流れて行くよ:

@csv_information.each do |row| 
    fill in blah with row["foo"] 
    fill in blah with row["bar"] 
    etc 
    etc 

私の問題/質問は:

私は100行のCSVを通過すると言います。 5行目で障害が発生すると、シナリオ全体が失敗したり停止したりします。

失敗した後にCSVの次の行でバックアップを開始するようにRubyに指示する方法はありますか?

非常に高く評価されています。

答えて

0

私は、あなたの@csv_information.eachブロックでエラーが発生していると仮定しています。なぜなら、CSV.parseはかなり許容されているからです。

エラーを救済することが重要です。

@csv_information.each do |row| 
    begin 
    fill in blah with row["foo"] 
    rescue StandardError => e 
    puts "#{e}\n#{e.message}\n#{e.backtrace}" 
    end 
end 

可能であれば、より具体的なエラーを救済する必要があります。繰り返し処理を行う場合、あなたはまた、いくつかの特別なキーワードを持っている:

  • nextは、次の反復
  • に行きます(あなたは#5で、それは#5繰り返しますしている場合はIE)を

    • retryは反復をやり直すます
    +0

    <! - 言語:lang-rb - > @ csv_information.each do | row | 行[ "FOO"] レスキューはStandardError => E プット "#{E} \ N#{e.message} \ N#{e.backtrace}" **リトライと何とかで 塗りつぶしを開始** end end – partydog

    +0

    リトライはレスキュー用です。あなたのレスキューブロックがエラーを修正したと確信していない限り、これをやり直さないでください。そうしないと、無限ループが発生します。ループの場合は、やり直しと次があります。次の理由は、ループ内での戻りは、次の繰り返しにスキップするだけでなく、親メソッド(存在する場合)から返されます。 –

    +0

    ああ大丈夫です。私の目的のために、おそらく次の反復に移りたいと思うでしょう。 – partydog

    関連する問題