gpt4 book ai didi

sql-server - SSIS 平面文件无法处理 NUL (\x00) 值?

转载 作者:行者123 更新时间:2023-12-02 19:45:35 25 4
gpt4 key购买 nike

我正在尝试将数据从文本文件加载到数据库。我的源文件以某种方式包含空字符 NUL (图片1)。

Picture1

我只是将所有字段设置为一列(用 {CR}{LF} 分隔)。然后我对数据进行预览。

Picutre2

这些数据正是我们所需要的。但是当我运行该包时,数据发生了变化,与我在数据预览中看到的不同。我添加了一个数据查看器来查看数据。

Picture3

Picture4

数字 1 在第一行消失(见红色)。平面文件读取似乎以 NUL 字符结束。但是我的行分隔符是{CR}{LF},数字1最后消失是没有意义的。谁能告诉我这是为什么?

最佳答案

重现错误

首先,我想展示使用 Notepad++ editor 重现此错误的步骤。 .

我创建了一个名为 TestNUL 的文本文件包含与问题中发布的屏幕截图类似的数据(逗号放在 NUL 对象应该在的位置):

enter image description here

现在,转到“编辑”菜单条>>“字符面板”

enter image description here

现在显示 ASCII 字符面板,双击 NULL值以便将其添加到文本中:

enter image description here

现在文本文件将如下所示:

enter image description here

您可以使用以下链接下载该文件:

使用 Notepad++ 删除 NUL 字符

要删除此字符,您只需打开 Notepad++,单击 Ctrl + H 打开“查找和替换”对话框。然后选择使用正则表达式并替换\x00带有空字符串:

enter image description here

全部NUL字符被删除:

enter image description here

在多个文件中查找和替换

如果您希望在多个文件中查找并替换该字符,则可以使用 notepad++ 使用在文件中查找功能来完成此操作:

在 SSIS 中实现流程自动化

由于该问题发生在运行时而不是预览数据时,因此您可以简单地在数据流任务之前添加一个脚本任务来替换所有 \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.StreamReaderSystem.IO.StreamWriter使用 ReadLine() 逐行读取文件的类功能。

实验

我创建了一个包并添加了两个平面文件连接管理器,源读取自TestNUL.txt文件和目标创建一个新的 TestNUL_edited.txt具有相同结构的文件。我使用上面的代码添加了一个脚本任务,并在数据流任务中添加了一个数据查看器,下面的屏幕截图显示了行如何没有损坏:

enter image description here

enter image description here

下面的屏幕截图还显示了 NUL 如何运行脚本任务后,值将从源文件中删除:

enter image description here

引用文献

关于sql-server - SSIS 平面文件无法处理 NUL (\x00) 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com