2009-08-31 51 views
0

我在C#中導入csv文件,有時用'。',有時用','作爲小數點分隔符。提取小數點分隔符

確定小數點分隔符的最佳方法是否比從最後一個字符到第一個外觀計數更好?

在此先感謝。

Franklin Albricias。

+0

你創建CSV文件? – 2009-08-31 13:46:26

+1

當','是小數點分隔符時,實際值如何分開? – Artelius 2009-08-31 13:48:15

+0

使用逗號作爲小數分隔符在一個「逗號分隔值」文件必須複雜的事情。這是否意味着數字必須用引號括起來? ...或者,我們談論不使用逗號分隔通用CSV? – pavium 2009-08-31 13:48:58

回答

1

爲什麼不使用兩者作爲分隔符?

看一看NumberFormatInfo

編輯:
對於每個值嘗試用隔板的一個解析它。
如果失敗嘗試解析與其他。

+0

那麼你如何分辨哪些逗號分開的值,以及哪些逗號分開數字的分數部分? – pavium 2009-08-31 13:51:55

+0

這不是我的決定,它是用戶之一。有些用戶會從Excel中導出','有些用'。'來完成。 這就是爲什麼我需要檢測小數點分隔符。 – 2009-08-31 13:53:19

+0

你可能不能。無論如何,不​​是100%。除非值包含在引號或其他內容中。 – 2009-08-31 13:54:14

0

這取決於存儲在csv文件和數據分隔字符(';'或','或'')中的實際數據。

如果所有數據總是處於浮點記數法,則可以使用正則表達式來檢查這兩種情況。您可以使用"d+,\d+"檢查使用'.'作爲分隔

6

如果你事先知道正確的文化(例如,因爲您知道創建該文件的用戶),您可以嘗試通過','"\d+\.\d+"的值分隔值通過分析所提供的價值相應CultureInfoNumberFormatInfo

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

但如果類型事先不知道,你就必須通過檢查字符,直到找到一個分隔符手動檢查。 (甚至這種方法假定您保證始終有一個小數點分隔符,這樣one寫成1.0而非1。)

你不能只是嘗試其他每個後預期的格式之一,因爲你可能會得到誤報。

10,000意味着什麼有效不同兩種格式。

0

下,該文件只包含數字的假設 - 沒有字符串和什麼都 - 而且至少有兩列,你可以做到以下幾點。

通過第一行並尋找分號。如果找到一個,則用逗號分隔分隔的數字作爲小數點分隔符,否則用逗號分隔數字作爲小數點分隔符。

在你將不得不使用啓發式(有時得到了錯誤的結論),或者你必須要嚴格分析兩個假設下的文件中的所有其他情況。