Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Character encoding SSIS:Can';t处理CSV中的换行符(未找到列分隔符)_Character Encoding_Ssis_Carriage Return_Linefeed - Fatal编程技术网

Character encoding SSIS:Can';t处理CSV中的换行符(未找到列分隔符)

Character encoding SSIS:Can';t处理CSV中的换行符(未找到列分隔符),character-encoding,ssis,carriage-return,linefeed,Character Encoding,Ssis,Carriage Return,Linefeed,我有一些CSV文件在记事本和Excel中显示正常,但当我在VS2010或记事本++中查看它们时,它们似乎有额外的换行符。当我尝试在SSIS中处理它们时,文件失败,错误如下: 错误:在合并文件接口[225]处的0xC0202055:未找到列“column 48”的列分隔符。 下面是一个被截断的示例(大约有50列,换行似乎在同一位置随机换行): 问题是:记事本和Excel如何打开这些文件(并且似乎忽略了换行)?有没有办法让SSI处理这些文件?是否可能是代码页上的SSIS设置等 对于我们来说,最简单

我有一些CSV文件在记事本和Excel中显示正常,但当我在VS2010或记事本++中查看它们时,它们似乎有额外的换行符。当我尝试在SSIS中处理它们时,文件失败,错误如下:

错误:在合并文件接口[225]处的0xC0202055:未找到列“column 48”的列分隔符。

下面是一个被截断的示例(大约有50列,换行似乎在同一位置随机换行):


问题是:记事本和Excel如何打开这些文件(并且似乎忽略了换行)?有没有办法让SSI处理这些文件?是否可能是代码页上的SSIS设置等

对于我们来说,最简单的解决方案是将输入阶段化到SQL表中,然后在随后的数据流中,在CSV输出中不使用换行符查询它,例如

SELECT COLUMN1
       ,REPLACE(REPLACE([COLUMN2],CHAR(10),''),CHAR(13),'') AS [COLUMN2]
FROM TABLE

对于我来说,在Excel中打开文件,另存为Excel文件(xlsx,但我相信旧的xls格式也可以正常工作),然后在SSIS中使用Excel源代码,使我能够将文件加载到SQL表中,从而解决此类问题


显然,如果您需要定期加载此类文件,或者如果存在许多此类文件,那么这将不起作用。在这种情况下,第一个答案会更好。

您的数据看起来已损坏。为什么一行中有三个值?我假设
ABCDE
末尾缺少的逗号引发了该错误,因为它是列分隔符。没有缺少逗号。对不起:我只是画了一条任意线,显示了一小部分数据,因为我无法显示所有49列数据。有些东西,但我不确定是什么,导致换行,但Excel处理它没有问题。SSIS阻塞。我假设您正在使用平面文件源进行导入。然后预定义列。列分隔符和行分隔符也是如此。如果您使用逗号列分隔符和
LF
行分隔符定义一个包含两列的文件,平面文件将始终使用这种字符组合
foo,bar*LF*
,我能想到的检测两个连续换行的唯一方法是脚本任务。平面文件导入不够智能,无法像excel doesYeah那样处理它,我已经开始处理脚本任务,但它很棘手(其中一个文件有多行/多行提要)。最后一列的分隔符是
{CR}{LF}
,因此SSI确实不应该阻塞数据中嵌入的单个
{CR}
或单个
{LF}
。如果需要回车换行,该怎么办?