C#でCSVファイルを読み書きする基本と応用(Split・StringBuilder)
生徒
「先生、C#でCSVファイルを読み込んだり書き込んだりする方法を知りたいです。」
先生
「いいですね。CSVファイルは、データを表形式で扱うときによく使われるファイル形式ですよ。」
生徒
「CSVってエクセルでも開けるやつですか?」
先生
「その通りです。C#でも簡単に読み書きできるので、基本から応用まで一緒に見ていきましょう。」
1. CSVファイルとは?
CSVファイルとは、「Comma Separated Values(カンマ区切り値)」の略で、文字どおり「カンマで区切られたデータ」を保存するファイル形式です。拡張子は「.csv」で、1行が1つのレコード(データのまとまり)を表し、カンマで区切られた部分がそれぞれの項目になります。
例えば、次のような内容です。
名前,年齢,職業
田中太郎,28,エンジニア
鈴木花子,24,デザイナー
このように、Excelでも開けるテキストファイル形式なので、C#で扱うときにも非常に便利です。
2. C#でCSVファイルを読み込む方法(Splitを使う)
CSVファイルを読み込むには、まずSystem.IO名前空間を使います。C#ではFile.ReadAllLinesメソッドで1行ずつ読み込み、Splitメソッドでカンマごとに分割します。
Split(スプリット)とは、「文字列を区切る」メソッドのことです。たとえば、「田中,28,エンジニア」という1行を「,」で分けることで、名前・年齢・職業をそれぞれ別のデータとして扱えます。
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = "data.csv";
// ファイルを1行ずつ読み込む
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
// カンマで区切る
string[] parts = line.Split(',');
// 配列の各要素を出力
Console.WriteLine($"名前: {parts[0]}, 年齢: {parts[1]}, 職業: {parts[2]}");
}
}
}
名前: 田中太郎, 年齢: 28, 職業: エンジニア
名前: 鈴木花子, 年齢: 24, 職業: デザイナー
このように、Splitを使うことで、CSVの1行を項目ごとに分解して扱うことができます。
3. C#でCSVファイルに書き込む方法(StringBuilderを使う)
次に、C#でCSVファイルにデータを書き込む方法を見てみましょう。複数行の文字列をまとめて作るときには、StringBuilder(ストリングビルダー)クラスを使うのが便利です。
StringBuilderとは、文字列を「少しずつ作り上げる」ためのクラスです。通常の文字列連結よりも効率が良く、CSVのように行を追加していく処理に向いています。
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string filePath = "output.csv";
StringBuilder sb = new StringBuilder();
// ヘッダー行
sb.AppendLine("名前,年齢,職業");
// データ行を追加
sb.AppendLine("田中太郎,28,エンジニア");
sb.AppendLine("鈴木花子,24,デザイナー");
// ファイルに書き込む
File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
Console.WriteLine("CSVファイルを書き出しました。");
}
}
CSVファイルを書き出しました。
このプログラムを実行すると、カレントディレクトリ(プログラムを実行している場所)に「output.csv」というファイルが作成されます。
4. 読み書きを組み合わせてCSVを加工する応用例
ここまでの方法を組み合わせれば、CSVファイルを読み込み、加工して別のCSVファイルに出力することも簡単にできます。
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string inputPath = "data.csv";
string outputPath = "result.csv";
string[] lines = File.ReadAllLines(inputPath);
StringBuilder sb = new StringBuilder();
foreach (string line in lines)
{
string[] parts = line.Split(',');
// 年齢に「歳」をつけて新しいCSVを作る
sb.AppendLine($"{parts[0]},{parts[1]}歳,{parts[2]}");
}
File.WriteAllText(outputPath, sb.ToString(), Encoding.UTF8);
Console.WriteLine("加工後のCSVを出力しました。");
}
}
加工後のCSVを出力しました。
このように、C#ではわずか数行のコードでCSVの読み書きやデータ加工ができます。SplitとStringBuilderを組み合わせることで、業務でよく使うデータ処理を効率的に自動化できるようになります。
5. CSV操作で注意すべきポイント
CSVファイルを扱うときに注意したいのは、「カンマがデータの中に含まれている場合」です。たとえば、会社名に「株式会社,東京支社」とカンマが入っていると、正しく分割できなくなることがあります。
その場合は、ダブルクォーテーション(")で囲むなどの対策が必要ですが、基本的な操作ではまずSplitとStringBuilderの使い方をマスターしておけば十分です。
6. CSVはC#で簡単に扱える!
C#のファイル操作の中でも、CSVは非常に利用頻度が高いです。Splitを使えば文字列を分解でき、StringBuilderを使えば効率よく出力できます。プログラミング未経験の方でも、データを扱う仕組みを体験しながら学べるので、ぜひ練習してみてください。
まとめ
C#でCSVファイルを扱う全体像を振り返ろう
ここまで、C#でCSVファイルを読み書きする基本から応用までを順番に学んできました。CSVファイルは、データをシンプルなテキスト形式で保存できるため、業務システムや個人開発、学習用途まで幅広く利用されています。Excelで開ける点も特徴で、C#プログラムと表計算ソフトの橋渡し役として非常に重要な存在です。
C#では、System.IO名前空間を使ってファイルを読み込み、Splitメソッドで文字列を分割することで、CSVの各項目を簡単に取り出せます。また、書き込み処理ではStringBuilderを活用することで、複数行のデータを効率よく組み立ててCSVファイルとして保存できます。これらの基本操作を理解するだけで、CSVを使ったデータ処理の幅は一気に広がります。
SplitとStringBuilderがCSV処理の要になる理由
CSV読み込みにおいて重要なのがSplitメソッドです。Splitを使うことで、カンマ区切りの1行データを配列として扱えるようになり、名前や年齢、職業といった各項目に簡単にアクセスできます。これは、CSVファイルを「文字列の集まり」ではなく、「構造化されたデータ」として扱うための第一歩といえます。
一方、CSV書き込みではStringBuilderが大きな役割を果たします。文字列をそのまま連結する方法もありますが、行数が増えると処理効率が悪くなります。StringBuilderを使えば、行を追加しながらCSV形式のテキストを効率よく作成できるため、実務でも安心して使える方法です。特にデータ件数が多い場合、この違いははっきりと現れます。
読み書きを組み合わせたCSV加工の実用性
CSVファイルの本当の便利さは、「読み込んで終わり」「書き込んで終わり」ではなく、読み込んだデータを加工して再出力できる点にあります。今回紹介したように、CSVを読み込み、内容を加工して別のCSVとして保存する処理は、業務自動化の基本パターンです。
例えば、数値データに単位を付ける、不要な列を削除する、形式を整えて別システム用のCSVを作るといった作業は、C#とCSVを組み合わせることで簡単に実現できます。この考え方を身につけておくと、手作業で行っていたデータ加工をプログラムで一気に効率化できるようになります。
サンプルプログラムで再確認するCSV操作
ここで、CSVの読み込みと書き込みを組み合わせた基本的なサンプルプログラムをもう一度振り返ってみましょう。処理の流れを整理することで、CSV操作の全体像がより明確になります。
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string inputPath = "sample.csv";
string outputPath = "summary.csv";
string[] lines = File.ReadAllLines(inputPath);
StringBuilder sb = new StringBuilder();
foreach (string line in lines)
{
string[] parts = line.Split(',');
sb.AppendLine($"{parts[0]},{parts[1]},{parts[2]}");
}
File.WriteAllText(outputPath, sb.ToString(), Encoding.UTF8);
}
}
このような形で処理を組み立てることで、C#によるCSV操作が自然と身についていきます。まずは小さなCSVファイルで動作を確認し、徐々にデータ量を増やして試してみるのがおすすめです。
CSV操作で意識したい注意点と今後の学習
CSV操作では、カンマがデータ内に含まれるケースや、文字コードの違いなど、少し注意が必要な場面もあります。ただし、最初の段階ではSplitとStringBuilderを使った基本的な方法をしっかり理解することが大切です。基礎が身につけば、より高度なCSVパーサーやライブラリを学ぶ際にも理解がスムーズになります。
CSVファイルを自由に扱えるようになると、C#でのファイル操作やデータ処理全体の理解も深まります。今回学んだ内容は、プログラミング初心者にとって非常に重要な土台となる知識です。
生徒「CSVってただのテキストファイルだと思っていましたが、C#で扱うといろいろなことができるんですね。」
先生「そうですね。Splitを使えば読み込みが簡単ですし、StringBuilderを使えば書き込みも効率的にできます。」
生徒「読み込んだCSVを加工して、別のCSVに出力できるのが特に便利だと感じました。」
先生「それがCSV操作の大きな強みです。業務のデータ処理でもよく使われる考え方ですよ。」
生徒「まずは小さなCSVファイルで練習して、慣れてきたらもっと応用してみます。」
先生「その姿勢が大切です。CSVを自在に扱えるようになると、C#でできることが一気に広がります。」