13,005
回編集
30行目: | 30行目: | ||
CSVファイルを読み込むには、.NET Framework 2.0で追加された<code>TextFieldParser</code>クラス(<code>Microsoft.VisualBasic.FileIO</code>名前空間)を使用する。<br> | CSVファイルを読み込むには、.NET Framework 2.0で追加された<code>TextFieldParser</code>クラス(<code>Microsoft.VisualBasic.FileIO</code>名前空間)を使用する。<br> | ||
<code>TextFieldParser</code>クラスを使用することで、CSVファイルを読み込み、各行の各フィールドの文字列を簡潔に取得することができる。<br> | <code>TextFieldParser</code>クラスを使用することで、CSVファイルを読み込み、各行の各フィールドの文字列を簡潔に取得することができる。<br> | ||
<br> | |||
<code>TextFieldParser</code>クラスは、<code>Microsoft.VisualBasic.FileIO</code>名前空間に含まれているため、<br> | |||
C#で使用する場合は、一般的に、Microsoft.VisualBasic.dllファイルへの参照を追加する必要がある。<br> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>このクラスはVisual Basicのライブラリの一部であるため、C#で使用する場合は追加の依存関係が生じることに注意する。</u><br> | |||
<br> | <br> | ||
==== RFC 4180との関係 ==== | ==== RFC 4180との関係 ==== | ||
97行目: | 103行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
===== レコードの取得 ==== | ===== レコードの取得 ===== | ||
<code>TextFieldParser</code>クラスの<code>ReadFields</code>メソッドを実行するごとに、CSVファイルを1行ずつ読むことができる。<br> | <code>TextFieldParser</code>クラスの<code>ReadFields</code>メソッドを実行するごとに、CSVファイルを1行ずつ読むことができる。<br> | ||
<code>ReadFields</code>メソッドは、読み込んだレコードの全てのフィールドを文字列配列に変換して返す。<br> | <code>ReadFields</code>メソッドは、読み込んだレコードの全てのフィールドを文字列配列に変換して返す。<br> | ||
110行目: | 116行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
===== 使用例 ===== | |||
==== | |||
以下の例では、hoge.csvファイルを読み込み、各フィールドを切り出してタブ区切りで画面に出力する。<br> | 以下の例では、hoge.csvファイルを読み込み、各フィールドを切り出してタブ区切りで画面に出力する。<br> | ||
改行文字および空白文字がどのように処理されるかを分かりやすくするために、それぞれをnと_に置換して出力している。<br> | 改行文字および空白文字がどのように処理されるかを分かりやすくするために、それぞれをnと_に置換して出力している。<br> | ||
118行目: | 123行目: | ||
*: フィールドに改行やデリミタを含める為に引用符を使っているようなフォーマットを考慮する場合は、 | *: フィールドに改行やデリミタを含める為に引用符を使っているようなフォーマットを考慮する場合は、 | ||
*: <code>HasFieldsEnclosedInQuotes</code>プロパティを<code>true</code>に設定する。(初期値はtrue) | *: <code>HasFieldsEnclosedInQuotes</code>プロパティを<code>true</code>に設定する。(初期値はtrue) | ||
*: <br> | |||
* TrimWhiteSpaceプロパティ | * TrimWhiteSpaceプロパティ | ||
*: フィールドの前後の空白文字を削除しない場合は、<code>TrimWhiteSpace</code>プロパティを<code>false</code>に設定する。( | *: フィールドの前後の空白文字を削除しない場合は、<code>TrimWhiteSpace</code>プロパティを<code>false</code>に設定する。(デフォルトは、true) | ||
<br> | <br> | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
143行目: | 149行目: | ||
try | try | ||
{ | { | ||
string[] row = parser.ReadFields(); // 1行読み込む | string[] row = parser.ReadFields(); // 1行読み込む | ||
foreach (string field in row) | foreach (string field in row) | ||
{ | { | ||
field = field.Replace("\r\n", "n"); // 改行をnに置換 | field = field.Replace("\r\n", "n"); // 改行をnに置換 | ||
field = field.Replace(" ", "_"); // 空白を_に置換 | field = field.Replace(" ", "_"); // 空白を_に置換 | ||
Console.Write(field + "\t"); | Console.Write(field + "\t"); // タブ区切りで出力 | ||
} | } | ||
Console.WriteLine(); | Console.WriteLine(); |