2012-01-10 68 views
3

我试图用SSIS导入一个csv文件。通常情况下它工作正常,但有问题的文件格式如下:读取一个csv文件,忽略中间的一些行

....
数据,数据,数据,数据,数据,数据,数据
忽略,忽略
无视,忽视
忽略,忽略
数据,数据,数据,数据,数据,数据,数据
...

结果是,进口data OK,b当它到达ignore行时,它将开始将下一行数据作为预期列的其余部分,直到遇到换行符为止。

如何忽略没有所需数量字段的行?


我使用SSIS 2005

+0

脚本在导入CSV之前先按下CSV以获得可接受的解决方案? – cha0site 2012-01-10 10:52:34

+0

如果没有内置任何东西,我可以使用,然后确定,虽然我从来没有使用过脚本组件,所以一个例子会很有用。 – 2012-01-10 10:53:23

回答

1

一种技术我已经使用,虽然它不是理想的,是在一个时间在源数据读取一整排,然后使用脚本转换以测试传入行 - 如果行具有足够的字段(在逗号上使用string.split),则将每个部分分配给相关的输出行值。

http://msdn.microsoft.com/en-us/library/ms136114.aspx

这并不是因为简单的设置,但在过去的工作确定为我。如果您必须手动为脚本转换输出定义大量列,可能会很痛苦。

+0

我已经添加了一个脚本转换组件,但它看起来只能在输入上运行,但当它获得输入时已经太晚了,列已经被无效数据弄乱了。例如,无效数据的第一行以下列行中的字段结尾(即使它是另一行并且应该被视为这样)。 – 2012-01-10 12:34:22

+0

由于上述原因,它在尝试截断最后一列时发生错误,而最后一列实际上包含了它添加到无效数据行的所有剩余字段。所以看起来好像我需要在文件进入导入之前处理文件。 – 2012-01-10 12:36:19

+0

@GeorgeDuckett - 你在一行中阅读整行 - 所以改变你的CSV源输入,将整行读为一个对象,将它传递给你的脚本转换,测试整个行具有正确的列数,如果所以在脚本中手动分割它并将这些部分传递给手动设置的脚本输出。 – Meff 2012-01-10 14:08:55