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

- SE
- CSVファイルの出力の方法ってどんな方法ですか?
- PM
- "",""(カンマ)でデータとデータを区切った形式で出力する方法です。この記事では、出力方法をご紹介していきます。
この記事でわかること
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ファイルに出力する場合、データ部だけでも問題ありませんが、ヘッダ部も含めて出力するとよいでしょう。
- SE
- 出力するデータによって、方法が違うのですね。
- PM
- CSVファイルの出力必要な手法なので、覚えておくと良いでしょう。
CSVファイルの出力方法を試してみよう
アプリケーション間のデータやり取りに、CSVファイルを使うことがあります。C#では、StreamWriterクラスを使用することで、CSVファイルの出力先、出力モード、エンコーディングを指定して出力することができます。出力モード、エンコーディングは省略することも可能です。また、CSVファイルはヘッダ部とデータ部含めて出力するようにしましょう。
C#では、CSVファイルの出力だけでなく入力もできますので、ぜひご自身でコーディングして確かめてみてください。