C#:CSVファイルの読み書き

c_charp_logoC#
スポンサーリンク

CSV形式というファイル形式があります。
Comma Separated Valueの略です。

スポンサーリンク

CSV形式とは?

要するに,(カンマ)でデータとデータを区切って保存する形式のことです。
基本的にはテキスト形式です。色々なアプリケーション間でデータのやり取りが可能です。
例えばエクセルでCSV形式で書き出して年賀状作成ソフトでデータを読み込む、などです。

英単語辞書のようなデータをCSV形式で記述するとこんな感じです。

apple,りんご
lemon,レモン
kiwi,キウイ
peach,桃

CSV形式の場合、1件分のデータを1行で表しています。
Excelなどのセルとも相性がいい形式です。Excelで名前を付けて保存やエクスポートでCSV形式に書き出すことが出来ます。

C#を使ったCSV形式ファイルの読み書きについて、順を追って解説していきます。
全ソースコードは巻末に掲載しています。

CSV形式のデータを書き出す

プロジェクトの準備

コンソールアプリで確認してみます。

ファイル >新規作成 >プロジェクト…

から「コンソールアプリ」を選択して、プロジェクト名をCSVファイルに書き出すとして以下のコードを実行確認してみてください。

コードの先頭に

using System.IO;
using System.Text;

をつけるのを忘れないでください。
System.IOは、StreamWriterクラスを使うため、System.Textは、Encoding.UTF8の定数を使うために必要となります。

実行はCtrlキーF5キーです。

ファイル処理の手順

基本的にはStreamWriterクラスでファイルを開き、Writeメソッドで書き込む、というテキストファイルへの書き込み手順と同じです。

// ファイルを書き込みモード(上書き)で開く
StreamWriter file = new StreamWriter("tango.txt", false, Encoding.UTF8);
// ファイルに書き込む
file.WriteLine("apple" + "," + "りんご");
// ファイルを閉じる
file.Close();

ファイルの保存場所

次のステップのコードを実行すると、tango.txtというファイルが新規作成されます。
tango.txtファイルの保存場所ですが、

ドキュメントフォルダ >Visual Studio 2017 >Projects >CSVファイルに書き出す >CSVファイルに書き出す >bin >Debug

にあります。

CSV形式で書き出すコード全体

コード全体を示します。

ちなみに

file.WriteLine(string.Format("{0},{1}", words[i], words[i + 1]));

の部分は、

file.WriteLine(words[i] + "," + words[i + 1]);

としても同じです。
上の方の記述は、StringクラスのFormatメソッドを使って書式設定をしています。下は、文字列連結を使って表示しています。
どちらか分かりやすい方を使ってください。

コード全体

CSV形式のデータを読み込む

次にCSV形式データを読み込む場合についてです。

プロジェクトの準備

コンソールアプリで確認してみます。

ファイル >新規作成 >プロジェクト…

から「コンソールアプリ」を選択して、プロジェクト名をCSVファイルを読み込むとしてください。

CSVデータの準備

まずは、読み取るCSVデータを準備しなければいけません。
前述のCSV形式のデータを書き出すで作成されたtango.txtをコピーして使ってみます。

ドキュメントフォルダ >Visual Studio 2017 >Projects >CSVファイルに書き出す >CSVファイルに書き出す >bin >Debug

にあるtango.txtをコピーして、

ドキュメントフォルダ >Visual Studio 2017 >Projects >CSVファイルを読み込む >CSVファイルを読み込む >bin >Debug

に貼り付けてください。

CSV読み取りの手順

データを全て読み取るだけであれば、

ファイルを開く >ファイルの終了まで読み取る > ファイルを閉じる

といった手順でOKです。C#で記述すると

// ファイルを開く
StreamReader file = new StreamReader("tango.txt", Encoding.UTF8);
// ファイルの終了まで読み取る
string line = null;
while ((line = file.ReadLine()) != null)
{
	Console.WriteLine(line);
}
// ファイルを閉じる
file.Close();

となります。
しかし、今回は1行ごとにカンマで区切られた複数のデータを別々に読み取る必要があります。
こんなとき便利なのが、StringクラスのSplitメソッドです。

Splitは引数に指定したChar型文字(1文字)で文字列を区切ってくれます。しかも戻り値はstring型配列です。

例えば以下ののデータがあったとします。

string colors = "red,blue,green,orange";

Splitメソッドを使って分割して配列に保存します。

string[] color = colors.Split(',');

上記を実行後は、color[0]にred、color[1]にblue、color[2]にgreen、color[3]にorangeが代入されます。

CSV形式を読み込むコード全体

それでは、1行のデータをカンマで区切って取り出す部分も含めたコード全体を示します。

実行結果です。
CSV形式の読み書き実行結果の画像

コメント