この記事では、C#でCSVファイルのデータを取得する方法についてご説明します。
【動画】C#でCSVファイルのデータを取得する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
CSVファイルを開いてStreamReaderインスタンスを生成します。
StreamReaderインスタンスが生成されたら、CSVファイルのデータを取得してコンソールに出力しています。
コードの流れ
CSVファイルのデータの例
今回は次のCSVのデータを用意しました。
3行の簡単なデータが存在しているCSVファイルです。
今回はこのCSVファイルのデータを取得してコンソールに出力します。
出力した結果は下の画面の通りです。
CSVファイルのデータがコンソールに出力されています。
C#のコード(例)
App.configのコード
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <appSettings> <!-- CSVファイルのパス --> <add key="CSVPath" value="C:\work\10_勉強\21_C#\0011\data.csv" /> </appSettings> </configuration>
注目すべきコード
見て頂きたいのは9行目です。
<!-- CSVファイルのパス --> <add key="CSVPath" value="C:\work\10_勉強\21_C#\0011\data.csv" />
コードの説明
以上のコードは、CSVファイルのフルパスを「CSVPath」というキーに設定しているコードです。
「CSVPath」のキーの値をフォーム側のコードが参照して使います。
フォームのコード
using System; using System.Configuration; using System.IO; using System.Windows.Forms; namespace wfcs_0011 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // CSVファイルから読み込む各行を格納する変数 string line; // App.configのappSettingsタグ内に記述した「CSVPath」のキーの値を取得して変数「CSVFilePath」に格納する string CSVFilePath = ConfigurationManager.AppSettings["CSVPath"]; // CSVファイルを開いてStreamReaderインスタンスを生成する using (StreamReader rdr = new StreamReader(File.OpenRead(CSVFilePath))) { // CSVファイルの行数分処理を繰り返すループ // (CSVファイルの最終行までデータを確認したらループを抜ける) while ((line = rdr.ReadLine()) != null) { // 行データをカンマで分割し、配列に分割した値を格納する var values = line.Split(','); // 読み込んだCSVファイルのデータ行数分処理を繰り返すループ foreach (var item in values) { // コンソールにitemの値(CSVファイルのデータ)を出力する Console.WriteLine(item); } } } } } }
注目すべきコード①
最初に見て頂きたいのは21行目です。
// App.configのappSettingsタグ内に記述した「CSVPath」のキーの値を取得して変数「CSVFilePath」に格納する string CSVFilePath = ConfigurationManager.AppSettings["CSVPath"];
コードの説明
以上のコードは、App.configのappSettingsタグ内に記述した「CSVPath」のキーの値を取得して変数「CSVFilePath」に格納する処理のコードです。
ConfigurationManager.AppSettingsプロパティに、App.configのappSettingsタグ内に記述した「CSVPath」を設定することで、「CSVPath」のキーの値を取得することができます。
今回は「CSVPath」のキーに「C:\work\10_勉強\21_C#\0011\data.csv」を設定しているので、ConfigurationManager.AppSettingsプロパティから返された「C:\work\10_勉強\21_C#\0011\data.csv」が変数CSVFilePathに格納されます。
注目すべきコード②
次に見て頂きたいのは24行目です。
// CSVファイルを開いてStreamReaderインスタンスを生成する using (StreamReader rdr = new StreamReader(File.OpenRead(CSVFilePath)))
コードの説明
以上のコードは、CSVファイルを開いてStreamReaderインスタンスを生成する処理のコードです。
File.OpenReadメソッドにCSVファイルのフルパスが格納された変数CSVFilePathを指定して実行することで、StreamReaderインスタンスが生成されます。
以上のコードを実行することで、CSVファイルのデータを取得する準備ができました。
注目すべきコード③
次に見て頂きたいのは28行目から39行目です。
// CSVファイルの行数分処理を繰り返すループ // (CSVファイルの最終行までデータを確認したらループを抜ける) while ((line = rdr.ReadLine()) != null) { // 行データをカンマで分割し、配列に分割した値を格納する var values = line.Split(','); // 読み込んだCSVファイルのデータ行数分処理を繰り返すループ foreach (var item in values) { // コンソールにitemの値(CSVファイルのデータ)を出力する Console.WriteLine(item); } }
コードの説明
以上のコードは、CSVファイルからデータを読み込み取得してコンソールに出力する処理のコードです。
CSVファイルの最終行までデータを確認して、最終行まで確認したらwhileのループを抜けます。
コードの詳細
28行目のコードは、CSVファイルの行数分処理を繰り返すループで、CSVファイルの最終行までデータを確認したらループを抜けます。
CSVファイルの最終行ではない場合は、CSVファイルから1行データを取得して変数lineに格納します。
31行目のコードでは、変数lineに格納されたデータをカンマで分割して配列valuesに格納します。
今回はカンマで分割するようコードに記述していますが、お使いのデータに合わせてどの文字で区切るか指定してください。
34行目は、読み込んだCSVファイルのデータ行数分処理を繰り返すループで、配列valuesに格納された値を変数itemに格納します。
37行目では、変数itemの値をコンソールに出力します。
動作確認
最後に
この記事では、C#でCSVファイルのデータを取得する方法についてご説明しました。
C#でCSVファイルのデータを取得したいときは本記事を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。