1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Ruby] 複数行テキストのセル・空白行が含まれるCSVから正確な件数を取得する

Last updated at Posted at 2022-07-15

背景

以下のようなシステムの作成中に、登録件数が正確に通知されないことがあった。

  • CSVファイルからデータベースにデータを登録したい
  • 1行につき1件として、複数行のCSVファイルを読み込む
  • データがCSVからデータベースに登録されたら、登録件数を取得してSlackで管理者に通知する

問題

以下を参考に、.count"\n"の数で改行をカウントして行数を取得していたが、
登録件数が倍になって通知されることがあった。
https://rubytips86.hatenablog.com/entry/2014/03/23/091949

原因

  • 複数行のセルがあると、セル内の\nもカウントされてしまう
  • 空白行があると件数としてカウントされてしまう

解決法

csvfile: 件数を取得したいCSVファイル
header_length: CSVファイルの列数-2

column_length = File.read(csvfile).gsub(/,{#{header_length},}\r\n/,'').scan("\r\n").length

countは一文字しか検索できないため、scanを使用した。

参考

追記

1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?