2016-09-26 22 views
1

これは前に尋ねられましたが、私にとって解決策はありませんでした。カンマと引用符を使用してCSVファイルを解析します。

data1,data2,data3,"<tag field1=""test"" field2=""test,2,3""></tag>",data4 

私はそれがあるため、タグ内のデータの収まらないので、私はすべてのを無視する正規表現か何かを使用したいコンマによって分割:

は、私はそのように見えるCSVファイルを持っています私は ""を見る時間。

など

任意のアイデアは、DATA2、してください私は、WinFormsのを使用しています、と私はcsvファイルのみDATA1から抽出したいですか?

はあなたに

EDIT感謝:を私はより正確になります:私は正規表現が無いことを行うことができますので、「タグ」の内部で何でも無視することを知っているので、それは難しい作業になるべきではないのですか?

data1,data2,data3,data4 

それが今明らかである:私は私に次のような結果を出すために正規表現を使用して行を操作したい上記の例で ?ありがとうすべて

+0

簡単な文字列分割をしたい場合は、エスケープする必要がないことを確認してください。例えば、テキスト内の '' 'の代わりに' ''が使用されていることを確認してください。 [CsvHelper](https://www.nuget.org/packages/CsvHelper/3.0.0-beta6)は、最も人気のあるNuGetパッケージですが、他にもあります。 –

+0

@panagiotisKanavos私は使用しているCSVパーサーを探しています。 CSV foramtの大きなファイルで、私は '' 'がないことを保証できませんし、既存のライブラリを使用したくないので、私は自分のニーズに柔軟で小さなものを作りたいと思っています – TheDaJon

+0

小さくてファイルの作成者がエスケープを使用する必要がないことを保証することを意味します。エクスポートユーティリティを使用すると行とフィールドの区切りを定義できるため、通常のテキストには表示されない文字を使用できます。 *すでに*実行しているライブラリを使用するあなたが欲しい。 「柔軟性」と呼ぶものは、多くの異なるケースを扱う必要があるため、「小さく」なることはできません。あなたはそれを解析するために単一のRegexを使うことはできません。テキストフィールドに改行があるかもしれないと思いますか? –

答えて

1

NuGetパッケージとして利用できるオープンソースのCSVパーサーがいくつか用意されています。おそらく少なくとも1つはあなたが望むことをするだろうから、普及しているプラ​​ットフォームで一般的なファイル形式のパーサーを書く必要はないので、そのうちの1つを使うのが最善です。

あなたが実際に解析することに興味がないか、非常にエキゾチックな要件を必要としない限り、私はお勧めしない、これを自分で解析したい場合は、他には何も満足できません。単純な正規表現。正規表現は引用符で囲まれたフィールドを扱うことができません。また、引用されたフィールドにRFCに従って改行を入れることもできます。

+0

私の質問を編集して正規表現の部分について具体的に説明しました – TheDaJon

+0

あなたの最初の質問は一般的にCSVを解析することでした。それでも、変更したとしても、特定の引用フィールドを正確に識別して無視するのは簡単ではありません。入力ファイルについての情報が「CSV」よりも多い場合は、解析が簡単になることが多いのですが、ここでも適切なCSVパーサーを選択することをお勧めします。 –

0

あなたがコメントとしてライブラリを使用したくない場合は、単一のラインデータのため、このような何かを行うことができます(擬似コード):

read a line 

bool bInsideQuotes = false 

loop over chars 
    if character == '"' 
    bInsideQuotes = !bInsideQuotes 
    if character == ',' and !bInsideQuotes 
    found a field separator 

またはその代わりのラインでラインを読んで、あなたが読むことができますファイル全体に渡って改行を処理します(複数行を許可する!bInsideQuotesの場合のみ)。

+0

ありがとうございます。しかし、私は複数のクォーテットを次々に、または不均等なクウェートのために使用すると、この方法は機能しません。私は ""に接頭辞を設定すると動作する可能性がありますが、私はそれが正規表現を使用していると私の問題ですね。私は私の質問をより明確に編集しました。 – TheDaJon

+0

@ TheDaJonあなたのcsvデータが適切にエスケープされている場合、これは常に機能するはずです。フィールド内のすべての見積もりは、別の見積もりでエスケープされるため、常に均等です。 –

関連する問題