PR

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

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

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

[C# File] テキストファイルの読み込みと書き込み
テキストファイルの読込・書込を行う方法のまとめです。読み書きどちらもSystem.IO.Fileクラスにあるメソッドを使い行うことができます。 テキストファイルの読込 読み込んだ内容を文字列型(string)で一気に受け取る方法と改行ごとに...
スポンサーリンク

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# 記事まとめページに戻る(他のサンプルコードもこちら)

C# プログラミング講座
C#についての記事まとめページです。開発環境VisualStudioのインストール方法や使い方、プログラミングの基礎知識についてや用語説明の記事一覧になっています。講座の記事にはすぐに実行できるようにサンプルコードを載せています。

コメント