[C# File] CSVファイルの読み込みと書き込み

CSVファイルの読み書きをする方法の紹介です。

テキストファイルの読み書きについてや、サンプルコードで使っているWriteAllLinesメソッドReadAllLinesメソッドについてはこちらを見てください。

スポンサーリンク

CSVファイルを読み書きするサンプルコード

いきなりサンプルコードです。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
class Program
{
    public static void Main()
    {
        // csvファイルのパス
        var filePath = @"D:\test.csv";
        // csvに出力するデータ
        var writeValues = new List<List<string>> {
            new List<string>{ "Column1", "Column2", "Column3" },
            new List<string>{ "value1_1", "value1_2", "value1_3" },
            new List<string>{ "value2_1", "value2_2", "value2_3" },
            new List<string>{ "value3_1", "value3_2", "value2_3" },
        };
        // csvファイルの書き込み
        File.WriteAllLines(filePath, writeValues.Select(val => string.Join(",", val)));

        // csvファイルの読込
        var csvList = File.ReadAllLines(filePath).Where(line => !string.IsNullOrWhiteSpace(line))
            .Skip(1).Select(line => line.Split(',')).ToList();

        // 読み込んだcsvファイルのデータを表示する
        csvList.ForEach(line => {
            Console.WriteLine(string.Join(" ", line));
        });
    }
}

出力されるファイルはこんな感じです。

Column1,Column2,Column3
value1_1,value1_2,value1_3
value2_1,value2_2,value2_3
value3_1,value3_2,value2_3

出力結果(csvファイルを読み込んで表示)はこんな感じです。

value1_1 value1_2 value1_3
value2_1 value2_2 value2_3
value3_1 value3_2 value2_3

まず書き込みの説明です。
各列のデータList<string>リストListに書き込むデータを設定しています(12~17行目)。外側のリストが行、内側のリストが列のデータです。
外側のリストの1要素目は列名のデータを想定しています。

File.WriteAllLinesでファイルに内容を書き込んできいます。(19行目)
メソッドにコレクションを渡す際に、LINQのSelectでデータを加工して渡しています。
Select内ではString.Joinを使って内側のリストをカンマ区切りで結合した文字列にしています。

つぎに読み込みの説明です(22~23行目)。
File.ReadAllLinesでcsvファイルの各行をstring型の配列で取得したあと、LINQでいろいろしてList<List<string>>型にしています。
WhereではString.IsNullOrWhiteSpaceを使い、空白行を除いています。
Skipでは1要素目、つまり列名の行をスキップしています。列も取り込む場合はSkip(0)
Selectではカンマ区切りにされた各行をstring.Splitでカンマで分割しています。

サンプルで使用しているメソッドを詳しく知りたい方はこちらの解説を見てください。
string.IsNullOrWhiteSpaceは[C# string] 文字列のnull、空文字を判定する
string.Joinは[C# string] 区切り文字をつけて文字列を連結する
string.Splitは[C# string] 文字列を区切り文字を指定して分割する
LINQのSelectは[C# LINQ] Selectメソッドで各要素から必要な項目を取り出す
Whereは[C# LINQ] Whereメソッドで条件を満たす要素だけを取り出す

スポンサーリンク

C# プログラミング講座に戻る

コメント

タイトルとURLをコピーしました