【C#】C#でCSVファイルのデータを取得するには

この記事では、C#でCSVファイルのデータを取得する方法についてご説明します。

【動画】C#でCSVファイルのデータを取得する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


CSVファイルを開いてStreamReaderインスタンスを生成します。

StreamReaderインスタンスが生成されたら、CSVファイルのデータを取得してコンソールに出力しています。

コードの流れ

STEP.1
CSVファイルを開いてStreamReaderインスタンスを生成する
CSVファイルを開いてStreamReaderインスタンスを生成します。
STEP.2
CSVファイルのデータを取得する
CSVファイルのデータを取得します。

CSVファイルのデータの例

今回は次のCSVのデータを用意しました。

3行の簡単なデータが存在しているCSVファイルです。

今回はこのCSVファイルのデータを取得してコンソールに出力します。

出力した結果は下の画面の通りです。

CSVファイルのデータがコンソールに出力されています。

C#のコード(例)

App.configのコード

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

    <appSettings>
        <!-- CSVファイルのパス -->
        <add key="CSVPath" value="C:\work\10_勉強\21_C#\0011\data.csv" />

    </appSettings>
</configuration>

注目すべきコード

見て頂きたいのは9行目です。

        <!-- CSVファイルのパス -->
        <add key="CSVPath" value="C:\work\10_勉強\21_C#\0011\data.csv" />

コードの説明

以上のコードは、CSVファイルのフルパスを「CSVPath」というキーに設定しているコードです。

「CSVPath」のキーの値をフォーム側のコードが参照して使います。

フォームのコード

using System;
using System.Configuration;
using System.IO;
using System.Windows.Forms;

namespace wfcs_0011
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // CSVファイルから読み込む各行を格納する変数
            string line;

            // App.configのappSettingsタグ内に記述した「CSVPath」のキーの値を取得して変数「CSVFilePath」に格納する
            string CSVFilePath = ConfigurationManager.AppSettings["CSVPath"];

            // CSVファイルを開いてStreamReaderインスタンスを生成する
            using (StreamReader rdr = new StreamReader(File.OpenRead(CSVFilePath)))
            {
                // CSVファイルの行数分処理を繰り返すループ
                // (CSVファイルの最終行までデータを確認したらループを抜ける)
                while ((line = rdr.ReadLine()) != null)
                {
                    // 行データをカンマで分割し、配列に分割した値を格納する
                    var values = line.Split(',');

                    // 読み込んだCSVファイルのデータ行数分処理を繰り返すループ
                    foreach (var item in values)
                    {
                        // コンソールにitemの値(CSVファイルのデータ)を出力する
                        Console.WriteLine(item);
                    }
                }
            }
        }
    }
}

注目すべきコード①

最初に見て頂きたいのは21行目です。

            // App.configのappSettingsタグ内に記述した「CSVPath」のキーの値を取得して変数「CSVFilePath」に格納する
            string CSVFilePath = ConfigurationManager.AppSettings["CSVPath"];

コードの説明

以上のコードは、App.configのappSettingsタグ内に記述した「CSVPath」のキーの値を取得して変数「CSVFilePath」に格納する処理のコードです。

ConfigurationManager.AppSettingsプロパティに、App.configのappSettingsタグ内に記述した「CSVPath」を設定することで、「CSVPath」のキーの値を取得することができます。

今回は「CSVPath」のキーに「C:\work\10_勉強\21_C#\0011\data.csv」を設定しているので、ConfigurationManager.AppSettingsプロパティから返された「C:\work\10_勉強\21_C#\0011\data.csv」が変数CSVFilePathに格納されます。

注目すべきコード②

次に見て頂きたいのは24行目です。

            // CSVファイルを開いてStreamReaderインスタンスを生成する
            using (StreamReader rdr = new StreamReader(File.OpenRead(CSVFilePath)))

コードの説明

以上のコードは、CSVファイルを開いてStreamReaderインスタンスを生成する処理のコードです。

File.OpenReadメソッドにCSVファイルのフルパスが格納された変数CSVFilePathを指定して実行することで、StreamReaderインスタンスが生成されます。

以上のコードを実行することで、CSVファイルのデータを取得する準備ができました。

注目すべきコード③

次に見て頂きたいのは28行目から39行目です。

                // CSVファイルの行数分処理を繰り返すループ
                // (CSVファイルの最終行までデータを確認したらループを抜ける)
                while ((line = rdr.ReadLine()) != null)
                {
                    // 行データをカンマで分割し、配列に分割した値を格納する
                    var values = line.Split(',');

                    // 読み込んだCSVファイルのデータ行数分処理を繰り返すループ
                    foreach (var item in values)
                    {
                        // コンソールにitemの値(CSVファイルのデータ)を出力する
                        Console.WriteLine(item);
                    }
                }

コードの説明

以上のコードは、CSVファイルからデータを読み込み取得してコンソールに出力する処理のコードです。

CSVファイルの最終行までデータを確認して、最終行まで確認したらwhileのループを抜けます。

コードの詳細

28行目のコードは、CSVファイルの行数分処理を繰り返すループで、CSVファイルの最終行までデータを確認したらループを抜けます。

CSVファイルの最終行ではない場合は、CSVファイルから1行データを取得して変数lineに格納します。

31行目のコードでは、変数lineに格納されたデータをカンマで分割して配列valuesに格納します。

今回はカンマで分割するようコードに記述していますが、お使いのデータに合わせてどの文字で区切るか指定してください。

34行目は、読み込んだCSVファイルのデータ行数分処理を繰り返すループで、配列valuesに格納された値を変数itemに格納します。

37行目では、変数itemの値をコンソールに出力します。

動作確認

「CSVファイルのデータの例」をご覧ください。

最後に

この記事では、C#でCSVファイルのデータを取得する方法についてご説明しました。

C#でCSVファイルのデータを取得したいときは本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら