C#でcsvファイルを出力する方法を紹介します。集計アプリやデータ分析アプリを作成する際、何かしらの形で結果を保存したい場合に使用できます。簡単な方法を紹介するのでサンプルコードはかなりシンプルです。
csvファイルとは?何の略?
コード作成には直接関係ないですが、一応説明をします。
csvとは、Comma Separated Value(カンマで区切った値)の略で、その名の通り各要素を「,」で区切って記述されたファイル形式です。
その単純さから容量が小さく、書き込み・読み込みがしやすく、人の頭の中でも挙動がイメージしやすいです。
逆に「要素毎にカンマで区切っただけ」であるが故に、特定の要素に色を付けたり、フォントを変えたりといった編集はできません。
まとめると
csvファイル形式は、構造が単純で、汎用性が高くいので、(大量の)データを記録するのに向いている形式です。
csvファイルを出力するサンプルコード
List<>に適当な数値配列を追加し、その中身をcsvファイルとして出力します。
かなりシンプルですが、これが分かれば十分かと思います。
C#コード
csv出力するリストを作成して、そのリストをcsv出力メソッド(Output_CSV)へ渡しています。
//リスト(csv出力するもの) var MyList = new List<int[]>(); //リストに追加する配列 int[] arry1 = new int[] { 1, 2, 3, 4, 5 }; int[] arry2 = new int[] { 10, 20, 30, 40, 50 }; int[] arry3 = new int[] { 100, 200, 300, 400, 500 }; //リストに要素を追加 MyList.Add(arry1); MyList.Add(arry2); MyList.Add(arry3); //csv出力メソッドへ(次に記載) Output_CSV(MyList);
csv出力メソッドは以下の通り。
csvファイルへの書き込みは、リスト内の配列分・配列の要素分の二重のfor文で行います。
//csv出力メソッド private void Output_CSV(List<int[]> list) { //ファイル名 string filename = ""; //ファイル名に(本例ではファイル名に日付を活用) DateTime dt = DateTime.Now; filename = dt.ToString("yyyyMMdd_"); //保存ダイアログの生成 ------------------- Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.Title = "保存先を指定してください"; //保存先を設定(ここではデスクトップ) dlg.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); dlg.Filter = "CSVファイル(*.csv)|*.csv"; dlg.FileName = filename; if (dlg.ShowDialog() == true) { //ストリーム(連続するバイト列)を生成。これに記載していく StreamWriter SW = new StreamWriter(dlg.FileName, false, Encoding.UTF8); //テキストをファイルに書き込む SW.WriteLine("= = = OUTPUT = = ="); //★リストの中身を書き込む --------------- //リスト内の要素ごとにループ for(int i=0 ; i < list.Count; i++) { //各要素内でループ for(int j = 0; j < list[i].Length; j++) { //1要素記載後、カンマ記載 SW.Write(list[i][j]); SW.Write(","); } //改行の書き込み SW.WriteLine(); } SW.Close(); }
今回はリストでやっていますが、コレクションなどでも同等なコードでできます。
出力されるcsvファイル
以下画像は、出力されたcsvファイルを開いた様子。
ちゃんとリストの内容が記載されていますね。行の終わりに「,」を付けるべきかは調べましたが不明でした。
csvの読み込み方法は以下で紹介しています。
以下の記事ではdatagridの使い方を紹介しています。本記事内容と組み合わせれば、Datagridの中身をcsv出力できます。
コメント