3つの提案
この行を無視する FasterCSV を取得できますか?
:return_headers => true オプションを使用して、不良行をスキップできます。2行目が実際のヘッダーでない場合、これはうまく機能します。詳しくはこちら
:return_headers:
false の場合、ヘッダー行は黙って飲み込まれます。true に設定すると、同一のヘッダーとフィールドを持つ FasterCSV::Row オブジェクトでヘッダー行が返されます (フィールドがコンバーターを通過しないことを除いて)。
別のツールで線を切り取る
これには Ruby を使用する必要はありません。システム メソッドを使用して Ruby からワンライナーを呼び出すことができる、ここで提案されているソリューションの 1 つを使用してファイルを切り刻む方法はどうでしょうか。
最大の柔軟性 - FasterCSV を使用してファイルを 1 行ずつ解析する
ファイルを直接読み取り、最初の行をスキップしてから行を受け入れるか拒否することを検討しましたか? 私のコードの中心にあるのは、ファイルを一連の行として扱い、それぞれを受け入れるか拒否するこの parse メソッドです。同様のことを行うことができますが、最初の行をスキップします。
優れた点は、独自の許容可能な行を定義することで、許容可能な行を判断できることです。メソッド - 有効な CSV データのみが受け入れ可能に渡されますか? 残りは例外に応じて破棄されます。
def parse(file)
#
# Parse data
#
row = []
file.each_line do |line|
the_line = line.chomp
begin
row = FasterCSV.parse_line(the_line)
ok, message = acceptable?(row)
if not ok
reject(file.lineno, the_line, message)
else
accept(row, the_line)
end
rescue FasterCSV::MalformedCSVError => e
reject(file.lineno, the_line, e.to_s)
end
end