中の技術日誌
 

わんくまライブラリ Wankuma.IO.CSVReaderEnumarbleクラス Version1

2006/03/16

この文書はVisual Studio 2005(.NET2.0)をベースに記述されています。それ以降のバージョンや、あなたが読んでいる時点では変更されている可能性があります。
またバージョンアップされている場合にはなんらかかの不具合を含んでいる可能性があります。

ソースファイルへ
CSVReaderEnumarble1s.htm

ソースファイル直接ダウンロードへ
CSVReaderEnumarble1c.txt

利用規約へ
../kiyaku.htm

クラスの説明

CSVの読み取りを行いたいという要求は非常に根強いものがあります。
にもかかわらず.NETのBCLにはそれを積極的にサポートする機能はありません。

.NET 1.1時代にもCSVクラスを提供してきました(わんくまライブラリ Wankuma.IO.CSVクラス Version1)が、VB6時代のものを移植しただけ、ですべてをオンメモリにためてから出ないと利用できないなど制限の多いものでした。

.NET 2.0にあわせて全面的にリーダ型で書き直しを図ったのがこのクラスです。

他に必要なコンポーネント

Wankuma.IO.CSVReaderクラス Version1

プロパティ

public char カラム数
取得するカラム数を指定します。

メソッド

public CSVReaderEnumarble(int カラム数, System.IO.Stream stream)
public CSVReaderEnumarble(int カラム数, System.IO.Stream stream, char 区切り文字)
public CSVReaderEnumarble(int カラム数, System.IO.TextReader reader)
public CSVReaderEnumarble(int カラム数, System.IO.TextReader reader, char 区切り文字)
public CSVReaderEnumarble(int カラム数, string path)
public CSVReaderEnumarble(int カラム数, string path, char 区切り文字)
public CSVReaderEnumarble(int カラム数, string path, Encoding encoding)
public CSVReaderEnumarble(int カラム数, string path, Encoding encoding, char 区切り文字)
おもにストリーム、テキストリーダ、ファイルをデータ読み元としています。StreamReaderのコンストラクタと基本的に同じように渡してもらえれば問題は無いでしょう。
カラム数で、取得したいカラム数を指定します。
必ずそのカラム数分データを取得します。

public IEnumerable<IEnumerable<string>> RowEnumarble()
行のIEnumerbleを取得します。詳細はサンプルコードを見てください。

public IEnumerable<string[]> RowArray()
行のIEnumerbleを取得します。詳細はサンプルコードを見てください。

public IEnumerable<List<string>> RowList()
行のIEnumerbleを取得します。詳細はサンプルコードを見てください。

private IEnumerable<string> Cols()
カラムのIEnumerbleを取得します。詳細はサンプルコードを見てください。

サンプルコード

2重にforeachで利用するパターンです。あまり利用局面は無いかもしれません

//2個のカラムを指定して取得を行います。
using (CSVReaderEnumarble target = new CSVReaderEnumarble(2, path, Encoding.GetEncoding("shift_jis")))
{
  foreach (IEnumerable<string> row in target.RowEnumarble())
  {
    foreach (string col in row)
    {
      //colに処理を行う
    }
  }
}

foreachで1行分のCSVデータをstring配列で取得します。
カラム数で指定した個数の配列が帰ってくることが保障されます。

//2個のカラムを指定して取得を行います。
using (CSVReaderEnumarble target = new CSVReaderEnumarble(2, path, Encoding.GetEncoding("shift_jis")))
{
  foreach (string[] row in target.RowArray())
  {
    //row[0]に処理を行う
    //row[1]に処理を行う
  }
}

foreachで1行分のCSVデータをList<string>で取得します。
カラム数で指定した個数の配列が帰ってくることが保障されます。

//2個のカラムを指定して取得を行います。
using (CSVReaderEnumarble target = new CSVReaderEnumarble(2, path, Encoding.GetEncoding("shift_jis")))
{
  foreach (List<string> row in target.RowList())
  {
    //row[0]に処理を行う
    //row[1]に処理を行う
  }
}

勉強会: 05/18 大阪 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告