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行のデータをカンマで区切って取り出す部分も含めたコード全体を示します。
実行結果です。
コメント