C#でのCSVファイルの出力とは?方法をご紹介!

- システム
エンジニア - CSVファイルの出力の方法ってどんな方法ですか?
- プロジェクト
マネージャー - "",""(カンマ)でデータとデータを区切った形式で出力する方法です。この記事では、出力方法をご紹介していきます。
C#でのCSVファイルの出力
C#では、CSV形式でファイルの入出力を行うことができます。ここでは、C#でのCSV形式でのファイル出力方法について説明します。
CSV形式で出力することで、他のアプリケーションなどに取り込むこともできます。実際のC#のコードを掲載しているので、照らし合わせてみてください。
CSV形式とは
CSV形式とは、”,”(カンマ)でデータとデータを区切った形式のことで、エクセルでそのまま開くことができます。
また、テキスト形式ですのでメモ帳などのテキストエディタでも開くことができます。
CSV形式は、単語帳を例にすると、以下のようなものです。
1
2
3
4
|
りんご,apple
みかん,orange
バナナ,banana
もも,peach
|
このように、CSV形式のファイルでは、1行で1データを表現しています。
※この記事では、CSV形式のファイルのことを「CSVファイル」と記載します。
CSVファイルは、アプリケーション間のデータやり取りなどで使用されます。
例えば、「単語帳アプリでAさんが作成した単語データを、Bさんの単語帳アプリに取り込む。」などのやり取りを、CSVファイルを介して行うことができます。
CSVファイルの出力
C#のコンソールアプリでCSVファイルを出力するプログラムを作ってみます。
CSVファイルを作成するためには、コードの先頭に
1
2
3
|
using System;
using System.IO;
using System.Text;
|
を付与するのを忘れないでください。
Systemは、コンソールにメッセージを出力するため、System.IOは、StreamWriterクラスを使うため、System.Textは、Encoding.UTF8の定数を使うために必要です。
また、プログラムの実行前に「C:\test」フォルダを作成しておいてください。作成していないとCSVファイルが出力されません。
以下が前述した単語帳のCSVファイルを作成するサンプルです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
using System;
using System.IO;
using System.Text;
public class Program
{
static void Main(string[] args)
{
string[] words = new string[] { "りんご", "apple", "みかん", "orange", "バナナ", "banana", "もも", "peach" };
try
{
// ファイルを開く
StreamWriter file = new StreamWriter(@"C:\test\test.csv", false, Encoding.UTF8);
for (int i = 0; i < words.Length; i += 2)
{
file.WriteLine(string.Format("{0},{1}", words[i], words[i + 1]));
}
file.Close();
Console.WriteLine("test.csvに書き込みました。");
}
catch (Exception e)
{
Console.WriteLine(e.Message); // 例外検出時にエラーメッセージを表示
}
}
}
|
プログラムを実行すると、C:\testフォルダにtest.csvが出力されていることが分かります。
C#ではこのようにしてCSVファイルを作成します。
ファイル出力モード(上書き/追記)
ここでは、ファイルを開く際に使用したC#のStreamWriterクラスの出力モードについて見ていきましょう。
先ほどのサンプルでは、以下のように記述しました。
第1引数はファイルの出力先、第2引数はファイル出力モード、第3引数はエンコーディングです。
1
|
StreamWriter file = new StreamWriter(@"C:\test\test.csv", false, Encoding.UTF8);
|
ファイル出力モードをfalseにすることで、毎回上書きでCSVファイルを作成します。
それを確認するために、もう一度先ほどのプログラムを実行してみてください。
何度実行しても以下のファイルが出力されます。
1
2
3
4
|
りんご,apple
みかん,orange
バナナ,banana
もも,peach
|
では、StreamWriterクラスの第2引数をtrueに変更して実行するとどうなるでしょうか。
1
|
StreamWriter file = new StreamWriter(@"C:\test\test.csv", true, Encoding.UTF8);
|
以下のように、既存のtest.csvに追記されて保存されていることが分かります。
1
2
3
4
5
6
7
8
|
りんご,apple
みかん,orange
バナナ,banana
もも,peach
りんご,apple
みかん,orange
バナナ,banana
もも,peach
|
ファイルが存在しない場合に、上書きモードに設定してもファイルは作成されます。
出力モードは、省略することもできます。
1
|
StreamWriter file = new StreamWriter(@"C:\test\test.csv");
|
こうした場合、自動的に上書きモードになります。
用途に応じて、出力モードを記載してください。
エンコーディング
ここでは、C#のStreamWriterクラスのエンコーディングについて見ていきましょう。
StreamWriterクラスの第3引数を以下のように変更してください。
1
|
StreamWriter file = new StreamWriter(@"C:\test\test.csv", false, Encoding.Unicode);
|
こうすることでUnicodeのファイルを出力することができます。
また、以下のようにエンコーディングを省略することもできます。
1
|
StreamWriter file = new StreamWriter(@"C:\test\test.csv", false);
|
エンコーディングを省略した場合、デフォルトのエンコーディングが適用されます。
用途に応じてエンコードを指定するようにしてください。
CSVヘッダ
CSVファイルはヘッダ部とデータ部に分かれていることが一般的です。
前述のサンプルでいうところの、
1
2
3
4
|
りんご,apple
みかん,orange
バナナ,banana
もも,peach
|
はデータ部になります。このファイルはデータ部のみのCSVファイルということになります。
ヘッダ部とは、カンマで区切った何個目のフィールドが何の情報なのか?を記述したものです。
単語帳の例でいうと、ヘッダ部は
1
|
jp,en
|
などとするとよいでしょう。
プログラムで書くと、以下のようになります。
1
2
3
4
5
6
7
|
StreamWriter file = new StreamWriter(@"C:\test\test.csv", false, Encoding.Unicode);
file.WriteLine("jp,en"); // ヘッダ部出力
for (int i = 0; i < words.Length; i += 2)
{
file.WriteLine(string.Format("{0},{1}", words[i], words[i + 1])); // データ部出力
}
file.Close();
|
こうすることで、ヘッダ部とデータ部のCSVファイルが出力されます。
1
2
3
4
5
|
jp,en
りんご,apple
みかん,orange
バナナ,banana
もも,peach
|
ヘッダ部を記載することで、カンマで区切られたデータ部の1列目が日本語で、2列目が英語であることが分かりやすくなります。
また、CSVファイルの取り込みを考えた場合、「jpの列だけ取り込む」などもできるようになりますので、拡張性が増します。
CSVファイルに出力する場合、データ部だけでも問題ありませんが、ヘッダ部も含めて出力するとよいでしょう。
- システム
エンジニア - 出力するデータによって、方法が違うのですね。
- プロジェクト
マネージャー - CSVファイルの出力必要な手法なので、覚えておくと良いでしょう。
CSVファイルの出力方法を試してみよう
アプリケーション間のデータやり取りに、CSVファイルを使うことがあります。C#では、StreamWriterクラスを使用することで、CSVファイルの出力先、出力モード、エンコーディングを指定して出力することができます。出力モード、エンコーディングは省略することも可能です。また、CSVファイルはヘッダ部とデータ部含めて出力するようにしましょう。
C#では、CSVファイルの出力だけでなく入力もできますので、ぜひご自身でコーディングして確かめてみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)