C#

【C#】CSVファイルを1行ずつ読み込みする方法

今回はCSVファイルをC#で1行ずつ読み取む方法を紹介します。

CSVファイルはデータを保存するファイルとしてよく利用されるので、アプリケーションにインポートしたいという場面は多々あることでしょう。

記事内ではサンプルコードを紹介していますので、ぜひ最後まで読んでみてください。

CSVファイルとは

CSVファイルとは、Comma Separated Value の略で、カンマ( , )でデータとデータを区切って保存するファイルのことです。

このファイルの拡張子は「.csv」で、Excelやメモ帳などを使ってファイルを開く事ができ、閲覧や編集をすることができます。

CSVファイルをエクセルで開いた場合、カンマで区切られた部分が別のセルとして認識され、セルが分かれて表示されます。

テキストファイルで開いた場合、カンマも全て表示されます。

CSVファイルは、データのみ保存するので容量が少なく、互換性が高いことから、データのやり取りを行う上で非常に便利なファイルです。

さまざまな場面で利用する事が多いCSVファイルを、C#で取り込む方法について知っておくことで、スムーズに開発を進めることができます。

CSVファイルを読み込む

それではCSVファイルに保存されているデータを1行ずつ読み取りする方法を紹介します。

まず、読み取りするファイルデータは次の通りです。

heder1,heder2,heder3,heder4
aaa,bbb,ccc,ddd
eee,fff,ggg,hhh
iii,jjj,kkk,lll

先頭行は「項目名」で、2行目以降に「データ」があります。

ファイル名を「sample.csv」として保存し、プロジェクトの実行ファイルがある場所(Project名 > bin > Debug)に貼り付けます。

StreamReader クラスを使う

このファイルを1行ずつ読み込みには、StreamReader クラスを使います。StreamReader クラスの使い方を詳しく知りたい方は以下のURLを参考にしてみてください。

\ StreamReaderの使い方を確認する /

Split メソッドを使う

読み取りしたデータはカンマで区切られています。後でデータを利用しやすいように、カンマで分割をして別々のデータとして取得します。

C#には手軽に分割できるメソッドが用意されていて、それが String クラスの Split メソッドです。Split メソッドは引数に指定した Char 型文字(1文字)で文字列を区切ってくれます。戻り値は string 型の配列です。

ソースコードの全体

上記で紹介した StreamReader と Split を組み合わせれば、CSVファイルを簡単に読み取りすることができます。

全体のソースコードは次の通りです。

private void CsvReader()
{
    //ファイル名
    var fileName = "sample.csv";

    //先頭行を読み取りするかどうか
    var isFirstLineSkip = true;

    //取得したデータを保存するリスト
    var lines = new List<Data>();

    try
    {
        //ファイルをオープンする
        using (StreamReader sr = new StreamReader(fileName))
        {
            while (0 <= sr.Peek())
            {
                //カンマ区切りで分割して配列で格納する
                var line = sr.ReadLine()?.Split(',');
                if (line is null) continue;

                //先頭行は項目名なのでスキップする
                if (isFirstLineSkip)
                {
                    isFirstLineSkip = false;
                    continue;
                }

                //リストにデータを追加する
                lines.Add(new Data(line[0], line[1], line[2], line[3]));
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    //読み込んだデータを確認
    foreach (var line in lines)
    {
        Debug.WriteLine($"1列目 : {line.heder1}");
        Debug.WriteLine($"2列目 : {line.heder2}");
        Debug.WriteLine($"3列目 : {line.heder3}");
        Debug.WriteLine($"4列目 : {line.heder4}");
        Debug.WriteLine("--------------------");
    }
}

//1行分のデータを格納するレコード
record Data(string heder1, string heder2, string heder3, string heder4);

ファイルの最初の行は項目名になるので、リストに項目名は追加せずにスキップします。

このソースコードを実行した結果が以下になります。

実行結果

1列目 : aaa
2列目 : bbb
3列目 : ccc
4列目 : ddd
——————–
1列目 : eee
2列目 : fff
3列目 : ggg
4列目 : hhh
——————–
1列目 : iii
2列目 : jjj
3列目 : kkk
4列目 : lll
——————–

ちゃんとカンマ毎にデータの取得ができていることが確認できました。

列が4列以上または以下になる場合は、レコードの引数を調整してソースコードを修正する必要があります。

まとめ

今回はCSVファイルをC#で1行ずつ読み取む方法を紹介しました。

単純にカンマ区切りで出力するだけであれば、紹介したソースコードで事足りますが、データの中にダブルクォーテーションで括られたカンマがデータ中にあると、プログラムで読み取りした時に正しい値が取得できません。

ダブルクォーテーションで括られたカンマがデータ中にある場合は、そのことを考慮した記述が必要になるので注意しておきましょう。

こういう場面でオススメするライブラリが「CsvHelper」です。このライブラリはオプション設定によって柔軟にCSVの読み込みが行えます。興味がある方は以下の記事を参考にしてみてください。

【C#】CsvHelperでCSVファイルを読み込むする方法(サンプル有り)C#でcsvファイルの読み込みにオススメするのが「CsvHelper」です。CsvHelperは仕様が曖昧なcsvファイルを柔軟に読み取りすることができる無料のライブラリです。基本的な使い方や操作方法をサンプルコードを交えながら紹介していますので是非参考にしてみてください。...

以上、最後まで読んで頂きありがとうございました。

プログラミングを学習したいなら…

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
プログラミングスクール」がオススメです。

特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい

プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。

あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。

プログラミングスクールに興味がある方は是非チェックしてみてください。

> プログラミングを学ぶ <

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA