RubyでCSVを読込!エンコーディングの指定方法などを詳しく解説
  • facebookページ
  • twitterページ
  • 2020.12.18

    RubyでCSVを読込!エンコーディングの指定方法などを詳しく解説

    この記事では、RubyでCSVファイルの読み込み方法を解説していきます。

    システム開発において、CSVファイルを入出力することは多々あり、システム間でデータをやり取りするときや、画面に表示されている一覧データをエクスポートする時などにCSVファイルを使用します。

    Rubyでは、csvライブラリを使うことで簡単にCSVファイルの読み込みが行えます。

    では、RubyでCSVファイルを読み込み方法を見ていきましょう。

    CSVとは?

    CSVは Comma Separated Valueの略で、その名の通り、項目をカンマで区切ったファイルです。データが複数ある場合は、改行して複数行に渡って記述します。

    以下は、実際のCSVファイルの例です。

    ポテパンダの一言メモ

    CSVのファイル形式は、RFC4180「Common Format and MIME Type for Comma-Separated Values (CSV) Files」で規定されているため、興味がある方は以下のURLもご覧ください。

    https://www.ietf.org/rfc/rfc4180.txt

    Rubyのcsvライブラリには、CSVファイルを読み込むメソッドとして大きく CSV.readCSV.foreachメソッドの2つがあります。

    それぞれのメソッドの使い方について、見ていきましょう。

    「CSV.read」メソッドでCSVを読み込む

    最初は、 CSV.readメソッドの使い方を見ていきましょう。

    CSV.readメソッドは、指定パスのふCSVファイルの内容を変数の中に一気に読み込むメソッドで、次のように使用します。

    このように、 CSV.readメソッドを使用すると、簡単なコードでCSVファイルの読み込みが行え、 row["name"]のように列名で値を取得できるため、直感的で保守性が高いコードが組めます。

    ポテパンダの一言メモ

    列名で値が取得できるもう一つのメリットとして、例えば ageaddress列の順序が入れ替わったりした場合でも、既存のロジックを修正しなくて済むため、拡張性が高いコードを組めるということになります。

    ヘッダ行が無いCSVファイルを読み込む

    ヘッダ行が無い、データのみのCSVファイルを読み込む場合は、列名が分からないため row["列名"]のようにCSVのデータにアクセスすることができません。

    ヘッダ無しのCSVファイルの読み方も見ていきましょう。

    まず、ヘッダ行が無いCSVの場合は、 CSV.readメソッドの headersオプションに falseを指定します。

    headersオプションに falseを指定すると、 CSV.readメソッドの戻り値は配列(Aarra)になるため、CSVの各項目にアクセスするときは、0〜のインデックスでアクセスします。

    ダブルクォーテーションで囲われた文字も難なく読める

    一般的なCSVでは、文字列はダブルクォーテーションで囲われていることが多いです。

    csvライブラリでは、ダブルクォーテーションで囲われた文字を自動で判別して読み込んでくれるため、ダブルクォーテーションの有無を気にすることなくCSVのデータを読み込むことができます。

    実際に以下のように、文字列をダブルクォーテーション囲ったCSVファイルを用意して試してみましょう。

    以下が、サンプルコードと実行結果です。

    このように、ダブルクォーテーションの有無に関わらず、同じコードでCSVファイルを読み込むことができます。

    エンコーディングを指定して読み込む

    エンコーディングを指定してCSVファイルの読み込みを行う場合は、 encodingオプションを指定します。

    エンコーディングの指定を省略した場合は、デフォルトの utf-8"が適用されます。

    「CSV.foreach」メソッドでCSVを読み込む

    次は、 CSV.foreachメソッドでCSVファイル読み込む方法を解説します。

    CSV.foreachメソッドは、CSVファイルから1ずつ行(データ)を読み込むため、大量のデータが格納されたCSVファイルを読み込む時に向いているメソッドです。

    CSV.foreach の使い方

    CSV.foreachメソッドは、引数に読み込むCSVファイルのパスを指定し、各行が与えられたブロックで処理を行います。

    ヘッダー有無の指定

    CSV.readメソッド同様、 CSV.foreachでもオプションでヘッダの有無を指定して、CSVファイルを読み込むことができます。

    エンコーディングを指定してCSVを読み込み

    エンコーディングの指定も、 CSV.readメソッド同様に encodingオプションを指定します。

    エンコーディングの指定を省略した場合は、デフォルトの utf-8"が適用されます。

    RubyでのCSVファイル読み込みは簡単

    RubyでCSVファイルの読み込み方法を解説してきました。

    標準のcsvライブラリが便利で使いやすいため、Rubyでは簡単なコードでCSVファイルの読み書きができます。

    【関連記事】
    【Rubyの基礎】配列の検索で使われるfindメソッドの使い方



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE