我收到了无法以其他方式生成的平面文件。分隔符是逗号,文本限定符是双引号。问题在于,有时a的值中有双引号。例如:
"0","12345", "Centre d"edu et de recherche", "B8E7"
由于值中的双引号,我收到此错误:
[平面文件源[58]]错误:找不到“ XYZ”列的列定界符。
[平面文件源[58]]错误:处理数据行296上的文件“ C:\ somefile.csv”时发生错误。
如何处理此文件?
我将SSIS 2016与Visual Studio 2015一起使用
答案 0 :(得分:1)
您可以使用“平面文件源”错误输出将不良行重定向到另一个平面文件并手动更正值,同时将处理所有有效行。
在线上有很多链接,以了解有关平面文件源错误输出的更多信息:
由于“平面文件”错误输出不起作用,您可以使用带有条件拆分的脚本组件来过滤不良行,以下更新是逐步实现此问题的分步指南:
DT_BOOL
的标志列Flag
= True
,这意味着这是有效行,否则将Flag
设置为{{1 }}表示这是糟糕的行:False
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (!Row.Column0_IsNull && !String.IsNullOrWhiteSpace(Row.Column0))
{
string[] cells = Row.Column0.Split(new string[] { "\",\"" }, StringSplitOptions.None);
if (cells.Length == 4)
{
Row.Col1 = cells[0].TrimStart('\"');
Row.Col2 = cells[1];
Row.Col3 = cells[2];
Row.Col4 = cells[3].TrimEnd('\"');
Row.Flag = true;
}
else
{
bool cancel;
Row.Flag = false;
}
}
else
{
Row.Col1_IsNull = true;
Row.Col2_IsNull = true;
Row.Col3_IsNull = true;
Row.Col4_IsNull = true;
Row.Flag = true;
}
}
}
列拆分行Flag
的平面文件