首先,我想展示使用Notepad++编辑器重现此错误的步骤。
我创建了一个名为TestNUL
的文本文件,其中包含类似于问题中发布的屏幕截图的数据(逗号放置在应该有NUL
对象的地方):
现在,转到编辑菜单栏 >> 字符面板
现在显示了ASCII字符面板,请双击NULL
值以添加到文本:
现在文本文件看起来像:
您可以使用以下链接下载文件:
要删除此字符,您可以简单地打开Notepad ++,单击Ctrl + H打开查找和替换对话框。然后选择使用正则表达式,并将\x00
替换为空字符串:
所有NUL
字符都被删除了:
如果您想要在多个文件中查找和替换此字符,那么您可以使用Notepad ++使用在文件中查找功能来实现:
由于问题发生在运行时而不是预览数据时,您可以在数据流任务之前添加一个脚本任务,以将所有\x00
值替换为空字符串。您可以从扁平文件连接管理器读取文本文件路径,也可以将其存储在变量中。您可以使用类似的C#代码:
public void Main()
{
string FilePath = Dts.Connections["SourceConnection"].ConnectionString;
string text = System.IO.File.ReadAllText(FilePath);
text = text.Replace(Convert.ToChar(0x0).ToString(), "");
System.IO.File.WriteAllText(FilePath, text);
Dts.TaskResult = (int)ScriptResults.Success;
}
System.IO.StreamReader
和System.IO.StreamWriter
类,使用ReadLine()
函数逐行读取文件。TestNUL.txt
文件读取,目标则创建一个具有相同结构的新TestNUL_edited.txt
文件。我添加了一个包含上述代码的脚本任务,并在数据流任务中添加了数据查看器,以下截图显示行未损坏:
此外,以下截图显示运行脚本任务后源文件中的NUL
值已被删除:
参考:
将他的每个字段映射到列中(使用制表符{t}作为列分隔符,使用{CR}{LF}作为行分隔符),然后再试一次。