2011-04-21 87 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文件将始终采用相同的格式,因此无论文件来自何处,您都可以用相同的方式处理每个字段。这样你就可以按照你想要的方式处理每个字段。