2010-07-14 49 views
2

我想生成一個包含數字的csv文件,我希望Excel自動讀取該文件。在C++中爲Excel自動生成一個區域設置csv文件

但是,Excel使用不同的csv格式,具體取決於區域設置。例如:

英語:

  • 文字分隔符:,
  • 十進制分隔。

西班牙語:

  • 文字分隔符:;
  • 小數分隔符:,

是否可以自動檢測用C這些設置++這樣我就可以根據它們產生的文件?

我知道我可以使用locale對象獲取小數點分隔符,但我不知道如何獲取文本分隔符。這個問題與 CSV is actually … Semicolon Separated Values有關。但是,我不想讀取文件,但要生成它,並且我想自動檢測設置。

回答

4

我不認爲標準C++有「文本分隔符」的概念,而且這是Windows特有的。因此,您可以使用帶LOCALE_SLIST標誌的GetLocaleInfo。

+1

謝謝大家。這工作: GetLocaleInfo(LOCALE_NAME_USER_DEFAULT,LOCALE_SLIST,數據,sizeof(數據)/ sizeof(WCHAR)); 我假設沒有「標準C++」等價物。 – 2010-07-16 08:23:56

0

你可以,但不能100%確定(但非常接近它)。檢測文本分隔符可以通過分析文件(或相當樣本)並確定每個記錄中每個字符的頻率來完成。每個記錄的文本分隔符應該相同(或幾乎相同)。它的頻率將比每條記錄中的字段數少一個。

好的分析器不會計算受雙引號保護的字符,因爲它們是嵌入式的而不是分隔符(即,不計算「Boston,MA 02066」中的逗號,因爲它受雙引號)。

確定文本分隔符後,可以確定小數分隔符。只要查找相鄰的數字,看看它們是什麼分開的(這不是以前確定的文本分隔符)。

+0

糟糕,現在我看到你想要生成這樣的文件,而不是讀取它。 – 2010-07-14 15:52:57

0

使用CultureInfo.TextInfo.ListSeparator。

+0

哎呀,我剛剛注意到你特意要求C++。埃裏克給出了正確的答案。 – Tergiver 2010-07-14 14:21:49