2012-01-18 10 views
2

データをテーブルに取得しているCSVファイルがあります。 例: "ABC"、1、 "Apple" 文字列はクォータ内にあり、整数は引用符なしにする必要があります。 上記の行は3つの列に分割されます。 私は、ストリームリーダークラスを使用してline.split( '、')を使って列を列に分割しています。残念なことに、残念ながら私はファイル内に、 "ABC、DEF、ghi"、2、 "Orange"のような文字列引用符の間にコンマがあるレコードを取得しました。 これで3つの列の代わりに5つの列として機能し、すべての変換に失敗しています。 C#でスクリプトを書くのに助けてくれる人は、クォータ間のカンマをセミコロンに置き換え、カラム間のコンマには触れないでください。クォータの間にカンマをセミコロンで置き換えてください。

ありがとうございます。

+0

これらの文字列で '' 'をどのようにエスケープするか、' ''を含まないと期待できますか? – Nappy

+0

ファイルは変更される可能性があります。ファイルヘッダーのレイアウトを定義する列挙型を作成し、余分な列をチェックしたい場合があります。最後のプロジェクトでこれを行っています。そうでなければ、 ABC、DEF、ghiの分割を1つではなく3つの列に分割する必要があります。あなたは私がやっていることに従うことができます。次にAEFの一部としてDEF ghiを連結する必要があります – MethodMan

答えて

3

あなたのCSVはRFC 4180に準拠しているようです。 RFC 4180パーサーを使用します。それらの多くが存在します。これを確認してください:http://www.codeproject.com/KB/database/CsvReader.aspx

+0

私はパーサー私はC#のスクリプトコンポーネントでC#カスタムスクリプトを使用しています。 – lch

+0

なぜC#を使用している場合、VBタグを持っていますか? – ChrisPadgham

2

この質問は、ここで回答されています Java: splitting a comma-separated string but ignoring commas in quotes

あなたは同じ正規表現",(?=([^\"]*\"[^\"]*\")*[^\"]*$)" を使用してC#のメソッドRegex.Split()を使用することができます。

+0

こんにちは、私はC#で初心者です。私 – lch

+0

あなたは正規表現クラスを持っています。あなたは 'using System.Text.RegularExpressions'を追加する必要があります。 – billinkc