【C#】CSVファイルで指定行から読み込み、特定の列だけを抽出する方法

CSVファイルを扱っていると、

  • データの本体が途中の行(例:36行目)から始まっている
  • すべての列ではなく、特定の列だけ取得したい

といったケースに出くわすことがあります。

私の場合、36行目から始まるCSVの22番目の列の値だけを抽出する必要がありました。
今回はその方法についてご紹介いたします。


目次

目的


  • CSVの先頭35行は無視する(コメントやヘッダーなど)
  • 36行目以降にあるデータの「22列目(インデックス21)」だけを取り出す
  • 必要に応じてその値を加工し、新しいリストに保存する

使用した方法:StreamReader + Split + List<string>


StreamReader でCSVファイルを1行ずつ読み取りながら、36行目以降に処理を適用し、22列目の値を取り出すコードです。


実際のコード例

using System;
using System.Collections.Generic;
using System.IO;

List<string> newLines = new List<string>();

using (var reader = new StreamReader("sample.csv"))
{
    // 最初の35行を読み飛ばす
    for (int i = 0; i < 35; i++)
    {
        reader.ReadLine(); // 読み捨て(必要に応じて保存しない)
    }

    // 36行目以降の処理
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        var values = line.Split(',');

        // 22番目の列が存在し、数値としてパース可能な場合
        if (values.Length > 21 && double.TryParse(values[21], out double value))
        {
            // 必要に応じて加工してリストに追加
            string newLine = $"{value}";
            newLines.Add(newLine);
        }
    }
}

ポイント解説

  • ReadLine() を35回呼び出して、36行目から処理開始
  • Split(',') を使って列を分解
  • values[21] で**22列目の値(0始まり)**を取得
  • double.TryParse() を使って、数値変換可能なデータだけを処理
  • List<string> に抽出値を保存して、後で別ファイルに出力も可能

応用例

  • values[21]DateTime.TryParse() で日時型に変換
  • newLine = $"{DateTime.Parse(values[21]).ToString("yyyy-MM-dd")}" などで整形
  • 列の条件に応じてフィルタ処理(if文を追加)
  • StreamWriter を使って新しいCSVファイルとして出力

まとめ

C#でCSVを扱うとき、次のようなニーズに対応できます:

  • 行数を指定してスキップ:for + ReadLine()
  • 特定の列だけ抽出:Split(',') + values[index]
  • 型チェック:TryParse()

単純なCSVであれば、StreamReaderSplit だけで十分に処理可能です。

大量データやパフォーマンスが気になる場合は、CsvHelperなどのライブラリの使用も検討してみてください。

技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。

プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。

気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。

[Kindle Unlimited 読み放題プランをチェックする]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次