CSV形式というファイル形式があります。
Comma Separated Valueの略です。
CSV形式とは?
要するに,(カンマ)でデータとデータを区切って保存する形式のことです。
基本的にはテキスト形式です。色々なアプリケーション間でデータのやり取りが可能です。
例えばエクセルでCSV形式で書き出して年賀状作成ソフトでデータを読み込む、などです。
英単語辞書のようなデータをCSV形式で記述するとこんな感じです。
1 2 3 4 | apple,りんご lemon,レモン kiwi,キウイ peach,桃 |
CSV形式の場合、1件分のデータを1行で表しています。
Excelなどのセルとも相性がいい形式です。Excelで名前を付けて保存やエクスポートでCSV形式に書き出すことが出来ます。
C#を使ったCSV形式ファイルの読み書きについて、順を追って解説していきます。
全ソースコードは巻末に掲載しています。
CSV形式のデータを書き出す
プロジェクトの準備
コンソールアプリで確認してみます。
ファイル >新規作成 >プロジェクト…
から「コンソールアプリ」を選択して、プロジェクト名をCSVファイルに書き出すとして以下のコードを実行確認してみてください。
コードの先頭に
1 2 | using System.IO; using System.Text; |
をつけるのを忘れないでください。
System.IOは、StreamWriterクラスを使うため、System.Textは、Encoding.UTF8の定数を使うために必要となります。
実行はCtrlキー+F5キーです。
ファイル処理の手順
基本的にはStreamWriterクラスでファイルを開き、Writeメソッドで書き込む、というテキストファイルへの書き込み手順と同じです。
1 2 3 4 5 6 | // ファイルを書き込みモード(上書き)で開く 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形式で書き出すコード全体
コード全体を示します。
ちなみに
1 | file.WriteLine( string .Format( "{0},{1}" , words[i], words[i + 1])); |
の部分は、
1 | file.WriteLine(words[i] + "," + words[i + 1]); |
としても同じです。
上の方の記述は、StringクラスのFormatメソッドを使って書式設定をしています。下は、文字列連結を使って表示しています。
どちらか分かりやすい方を使ってください。
コード全体
using System; | |
using System.IO; | |
using System.Text; | |
namespace CSVファイルに書き出す | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
string[] words = new string[] { "apple", "りんご", "lemon", "レモン", "kiwi", "キウイ", "peach", "桃" }; | |
try | |
{ | |
// ファイルを書き込み型式(上書き)で開く | |
StreamWriter file = new StreamWriter("tango.txt", 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("ファイルに書き込みました"); | |
} | |
catch (Exception e) | |
{ | |
Console.WriteLine(e.Message); // エラーメッセージを表示 | |
} | |
} | |
} | |
} |
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#で記述すると
1 2 3 4 5 6 7 8 9 10 | // ファイルを開く 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型配列です。
例えば以下ののデータがあったとします。
1 | string colors = "red,blue,green,orange" ; |
Splitメソッドを使って分割して配列に保存します。
1 | string [] color = colors.Split( ',' ); |
上記を実行後は、color[0]にred、color[1]にblue、color[2]にgreen、color[3]にorangeが代入されます。
CSV形式を読み込むコード全体
それでは、1行のデータをカンマで区切って取り出す部分も含めたコード全体を示します。
using System; | |
using System.IO; | |
using System.Text; | |
namespace CSVファイルを読み込む | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
try | |
{ | |
// ファイルを読み取り形式で開く | |
StreamReader file = new StreamReader("tango.txt", Encoding.UTF8); | |
string line = null; | |
while ((line = file.ReadLine()) != null) // 1行ずつ読み込む | |
{ | |
string[] tango = line.Split(','); // カンマで区切って配列に格納 | |
Console.WriteLine(tango[0] + " " + tango[1]); | |
} | |
file.Close(); | |
} | |
catch (Exception e) | |
{ | |
Console.WriteLine(e.Message); // エラーメッセージを表示 | |
} | |
} | |
} | |
} |
実行結果です。
コメント