2011-04-21 63 views
1

我正在編寫一個C#.net Web應用程序,用戶將上傳要處理的CSV文件。這些CSV文件包含許多數據類型,並且我遇到了其中的一些問題。有一個以科學記數法(9.1234563E + 18而不是91234563000000000000)導入的20位數收據編號字段,並且任何前導零都將被刪除。前導零也被放在另一個4位數的商店號碼字段中。使用OleDB導入CSV文件 - 字符串數據類型?

我讀過關於創建一個Schema.ini文件來定義數據類型,但每個文件將有不同的文件名,這意味着我必須以編程方式生成一個新的模式文件,並且由於多個用戶可能正在使用應用程序同時,它有種規則這個選項。

有沒有人有任何建議?

+0

最好的選擇可能不是使用OleDb,而是一些專用的CSV閱讀器。 – svick 2011-04-21 18:17:49

+0

你是說CSV中的數據是正確的,但導入的數據已經丟棄了前導零?只是想確保我正確地理解你。 – 2011-04-21 18:38:44

回答

0

這個CSV文件是在Excel中創建的嗎?如果是,請確保用戶將列設置爲正確的數據類型。我以前有類似的問題,但這是由於用戶有一個日期字段設置爲不同的類型 - 所以而不是像20100408回來的東西,我會得到像24782 :-)

否則,請嘗試閱讀每個字段都有直接的文本....然後自己處理轉換

+0

我通過從Excel中導出一些數據創建了一個CSV示例,並且正在測試。也許我瘋了,但我不認爲在Excel中更改數據類型會做任何事情 - 它是純文本數據(在CSV文件中)並且不包含任何模式信息。我可能最終不得不手動編寫一些代碼來解析文件,但我更願意使用現有的功能。 – Scott 2011-04-21 17:58:26

+0

哦,是的......你完全正確。我正在使用ExcelReader自定義類來讀取數據。我的錯!奇怪的是,Jet解析器正在將該數字轉換爲科學記數法...?祝你好運! – Purj0001 2011-04-21 18:11:09

0

聽起來好像您將不得不編寫一些自定義代碼來手動讀取文件並自行拆分字段。您可以一次輕鬆讀取一行內容,並使用String.Split方法獲取單個字段。當然,這是假設CSV文件將始終採用相同的格式,因此無論文件來自何處,您都可以用相同的方式處理每個字段。這樣你就可以按照你想要的方式處理每個字段。