2009-08-31 9 views
0

C#でcsvファイルをインポートしています。時には '。'で区切ります。小数点区切り記号として '、'を使用することもあります。小数点記号を抽出する

小数点の区切り記号を最後の文字から最初の外観に数えるよりも良い方法がありますか?

ありがとうございます。

フランクリン・アルビリカス。

+0

CSVファイルを作成しますか? –

+1

'、'は小数点の桁区切りで、実際の値はどうやって区切られますか? – Artelius

+0

'カンマ区切り値'ファイルのカンマを小数点区切り文字として使用すると、複雑になります。数字は引用符で囲まなければならないのでしょうか? ...またはカンマを使って区切る一般的なCSVを話していますか? – pavium

答えて

1

両方をセパレータとして使用してみませんか?各値に対して
セパレータのいずれかでそれを解析しよう:

NumberFormatInfo

編集を見てください。
これが失敗した場合は、もう一方と解析してください。

+0

次に、どんなカンマが値を分けているのか、どのカンマが数字の骨折部分を分けるのか – pavium

+0

それは私の決断ではなく、それはユーザーのものです。一部のユーザーは '、'でExcelからエクスポートします。 そのため、小数点記号を検出する必要があります。 –

+0

おそらくできません。とにかく100%ではありません。値が引用符などで囲まれていない限り –

0

これは、csvファイルとデータ分離文字( ';'または '、'または '')に格納されている実際のデータによって異なります。

すべてのデータが常に浮動小数点表記になっている場合は、両方のケースをチェックする正規表現を使用できます。あなたは(あなたがファイルを作成したユーザーを知っているので、例えば、)あなたは、事前に正しい文化を知っている場合は、セパレータ

6

として'.'を使用して、値のため','または"\d+\.\d+"で区切られた値をチェックするために"d+,\d+"を使用することができ、あなたがしようとすることができます使用して提供された値を解析し、適切なCultureInfoNumberFormatInfo

Decimal value = Decimal.Parse(input, new CultureInfo("es-ES")); 

しかし、タイプが事前に知られていない場合、あなたは、セパレータを見つけるまで、文字を調べることによって、手動でチェックする必要があります

。 (そして、それさえもアプローチが one1.0ではなく 1として書かれているように、あなたは常に小数点区切り文字を持つことが保証されていることを前提としています。)

あなたが得ることができますので、あなただけの各予想フォーマット次々に試すことができません偽陽性。

10,000は何か有効しかし両方のフォーマットのための異なることを意味します。

0

ファイルに数字だけが含まれていて、文字列がなく、これまでに何があっても、少なくとも2つの列があると仮定すると、次のことができます。

最初の行を見て、セミコロンを探します。見つけた場合は、セミコロンで区切った数字をカンマで小数点区切りにします。

他のすべてのケースでは、ヒューリスティックを使用する必要があります(また間違った結論を得ることもあります)。または、両方の仮定の下でファイルを厳密に解析する必要があります。

関連する問題