1 <?xml version="1.0" encoding="utf-8"?>
4 <title>CSV I/O ライブラリ.NET</title>
5 <author org="Uguu Software" email="uguu@users.sourceforge.jp" hp="http://www.uguu.mydns.jp">uguu</author>
6 <date>2005-10-04</date>
7 <hp>http://sourceforge.jp/projects/csv-io-net/</hp>
8 <header format="html4">
10 <a href="http://www.uguu.mydns.jp/"><img src="http://www.uguu.mydns.jp/image/pukiwiki.png" alt="Uguu Software" border="0" align="left"></a>
11 <a href="http://sourceforge.jp/projects/csv-io-net/"><img src="http://sourceforge.jp/sflogo.php?group_id=1910" width="96" height="31" border="0" alt="SourceForge.jp" align="right"></a>
12 <br style="clear: all"><hr>
15 <footer format="html4">
18 Copyright (C) 2005 uguu, All rights reserved.
21 <footer format="plain">========================================================================
22 Copyright (C) 2005 uguu, All rights reserved.</footer>
26 <p>.NET Framework で CSV を簡単に読み書きできるクラスを提供するライブラリです。</p>
27 <p><a href="http://sourceforge.jp/projects/csv-io-net/files/">SourceForge.jp: Project File List</a> から、リリースされたパッケージをダウンロードすることができます。</p>
30 <p>パッケージに DLL 形式のバイナリファイルとソースコードが格納されています。お仕事で使用するのなら、どちらかというとソースコードを直接使用するのがお手軽で良い気がします。 CsvReader.cs, CsvWriter.cs と 2 つありますが、それぞれ単独で動作するようになっています。名前空間は適当に変えてしまってください。</p>
33 <subsection title="CsvReader">
34 <p>CSV 形式のデータを読み込むには CsvReader クラスを使用します。</p>
35 <subsubsection title="基本的な使い方">
36 <p>まず、インスタンス化します。コンストラクタは 2 種類ありますが、基本的には CsvReader(TextReader) コンストラクタを呼び出せば良いです。区切り文字、改行文字を指定する場合、 EOF 行の読み込みについて指定する場合は CsvReader(TextReader, string, string, bool) コンストラクタを呼び出してください。</p>
38 CsvReader csvReader = new CsvReader(reader);
47 <p>CsvReader クラスは IDisposable インターフェイスを実装しています。なので、上記の例は次のように置き換えることもできます。</p>
49 using (CsvReader csvReader = new CsvReader(reader))
53 <p>インスタンス化の直後、読み込み位置は最初の行の前にあります。最初の行を読み込むために、まず CsvReader#Read() メソッドを呼び出します。 CsvReader#Read() メソッドは次の行を読み込むメソッドで、読み込みに成功した場合は true 、失敗した場合は false を返します。</p>
54 <program>csvReader.Read();</program>
55 <p>行の読み込みに成功すると、インデクサ (または CsvReader#Item プロパティ) で列のデータを取得することができます。</p>
56 <program>string data = csvReader[0];</program>
57 <p>ループで最後まで読み込むというありがちな処理は、次のようになります。</p>
59 while (csvReader.Read())
61 string v = csvReader[0];
64 <p>使い終わったら CsvReader#Close() メソッドを呼び出します (コンストラクタの例を参照してください) 。</p>
66 <subsubsection title="Tips">
67 <p>CsvReader#FieldCount プロパティで、現在の行に含まれる列の数を取得することができます。行が読み込まれていないときに参照すると InvalidOperationException 例外をスローします。</p>
69 for (int i = 0; i < csvReader.FieldCount; i++) {
70 string data = csvReader[i];
74 <p>CsvReader#RowIndex プロパティで、現在の行の位置を表すインデックス番号を取得することができます。最初の行は 0 です。インスタンス化直後の最初の行の前にある状態は -1 です。</p>
75 <program>Console.WriteLine("{0} 行目を処理中です。", csvReader.RowIndex);</program>
76 <p>CsvReader#Close() メソッドは、コンストラクタで指定した TextReader インスタンスも閉じます。</p>
77 <p>CsvReader#IsClosed プロパティは CsvReader インスタンスが閉じられているかどうかを取得することができます。</p>
79 if (csvReader.IsClosed)
85 <subsection title="CsvWriter">
86 <p>CSV 形式のデータを書き込むには CsvWriter クラスを使用します。</p>
87 <subsubsection title="基本的な使い方">
88 <p>まず、インスタンス化します。コンストラクタは 2 種類ありますが、基本的には CsvWriter(TextWriter) コンストラクタを呼び出せば良いです。改行文字、区切り文字を指定する場合は CsvWriter(TextWriter, string, string) コンストラクタを呼び出してください。</p>
90 CsvWriter csvWriter = new CsvWriter(writer);
99 <p>CsvWriter クラスは IDisposable インターフェイスを実装しています。名ので、上記の例は次のように置き換えることもできます。</p>
101 using (CsvWriter csvWriter = new CsvWriter(writer))
105 <p>データを出力するには CsvWriter#Write() メソッドを呼び出します。</p>
106 <program>csvWriter.Write("foo");</program>
107 <p>改行するには CsvWriter#WriteNewLine() メソッドを呼び出します。</p>
108 <program>csvWriter.WriteNewLine()</program>
109 <p>使い終わったら CsvWriter#Close() メソッドを呼び出します (コンストラクタの例を参照してください) 。</p>
111 <subsubsection title="Tips">
112 <p>CsvWriter#RowIndex プロパティは現在の行の位置、CsvWriter#ColumnIndex プロパティは現在の列の位置を表すインデックス番号を表すインデックス番号を取得することができます。最初の行、列は 0 です。インデックス化直後は行 0 、列 -1 です。</p>
113 <p>CsvWriter#IsClosed プロパティは CsvWriter インスタンスが閉じられているかどうかを取得することができます。</p>
115 if (csvWriter.IsClosed)
120 <subsubsection title="Tips - CsvWriter#Write() メソッド">
121 <p>CsvWriter#Write() メソッドは数種類のオーバーロードがあります。</p>
122 <p>CsvWriter#Write(string) メソッドは単一のデータを出力します。</p>
123 <program>csvWriter.Write("foo");</program>
124 <p>CsvWriter#Write(string[]) メソッドは複数のデータを複数列に出力します。最後に改行は入りません。</p>
126 csvWriter.Write(new string[]{"foo", "bar", "boo"});
128 // foo,bar,boo</program>
129 <p>CsvWriter#Write(string[][]) メソッドは、複数列、複数行のデータを出力します。必ず新しい行の先頭から出力され、最後の行は改行されます。</p>
131 string[][] data = new string[][]{
132 string[]{"foo", "bar", "boo"},
133 string[]{"111", "222", "333"},
135 csvWriter.Write(data);
140 <p>CsvWriter#Write(IDataReader) メソッドは、データソースからの検索結果を出力します。全ての列、全ての行を一度に出力します。出力は新しい行で開始し、最後は必ず改行されます。</p>
142 OdbcConnection conn = new OdbcConnection("DSN=csv-io-net");
147 OdbcCommand command = conn.CreateCommand();
148 command.CommandText = "SELECT * FROM ZIPCODE";
149 OdbcDataReader dataReader = command.ExecuteReader();
152 using (CsvWriter csvWriter = new CsvWriter(writer))
154 csvWriter.Write(dataReader);
166 <p>検索結果の特定の列、指定した行数を出力する場合は CsvWriter#Write(IDataReader, string[], int) メソッドを呼び出します。</p>
168 csvWriter.Write(dataReader, new string[]{"ID", "NAME"}, 10);
169 // ID, NAME 列を 10 行だけ出力します。</program>
173 <section title="ライセンス">
174 <p>修正 BSD ライセンスを適用します。詳細はパッケージに同梱されている LICENSE.txt を参照してください。</p>
178 <li>System.Data 名前空間のインターフェイスを実装し、 CSV に対して SQL を使用して操作してみたい (でもそこまでするとお手軽さが失われてしまう?) 。</li>
181 <section title="その他">
182 <p>不具合報告、サポート要求、パッチ、要望などは <a href="http://sourceforge.jp/tracker/?group_id=1910">SourceForge.jp: トラッキング</a>に登録してください。ちょっとしたことなら<a href="mailto:uguu@users.sourceforge.jp">メール</a>でも受け付けます。</p>