SSIS 脚本组件或任务,用于检查文件行终止符并在 NOT CRLF 时失败
SSIS Script Component or Task to check File Line Terminators and Fail if NOT CRLF
我对在 ETL 工作中使用脚本有点陌生,除了使用脚本用值替换 LF 或 CRLF 之外,我找不到与此相关的任何内容。是否可以使用脚本或其他方式来验证我的文件是否仅使用 CRLF 行终止符,如果它不是 CRLF,则作业失败。
我希望这项工作失败,这样我就可以向发送文件的机构报告他们需要遵循特定格式,因此唯一加载的文件是 CRLF 文件。
谢谢,
找到了一种方法来处理我的问题。我最终在我的数据流之前创建了一个脚本任务来检查文件以查看它是否包含“\r\n”。有了这个,我使用了两个包变量并通过我的脚本传递它们。这些变量是 "FileName"(可能是文件路径,但我使用的名称与包中使用的名称相同)、"ErrorMessage" 和 "IsCrLf"。 "IsCrLf" 变量是一个布尔变量,基本上只是检查文件中是否存在“\r\n”。否则,ErrorMessage 将被填充并传递到电子邮件警报。
这是我的任务代码:
public void Main()
{
using (StreamReader r = new StreamReader(Dts.Variables["User::FileName"].Value.ToString()))
{
string s1 = r.ReadToEnd();
string s2 = "\r\n";
bool b = s1.Contains(s2);
if (b)
{
Dts.Variables["User::IsCrLf"].Value = true;
}
else
{
Dts.Variables["User::ErrorMessage"].Value = Dts.Variables["User::FileName"].Value.ToString()+Environment.NewLine+"File does not contain the expected CRLF format.";
Dts.Events.FireError(0, "Error", "File does not contain the expected CRLF format.", string.Empty, 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
}
我对在 ETL 工作中使用脚本有点陌生,除了使用脚本用值替换 LF 或 CRLF 之外,我找不到与此相关的任何内容。是否可以使用脚本或其他方式来验证我的文件是否仅使用 CRLF 行终止符,如果它不是 CRLF,则作业失败。
我希望这项工作失败,这样我就可以向发送文件的机构报告他们需要遵循特定格式,因此唯一加载的文件是 CRLF 文件。
谢谢,
找到了一种方法来处理我的问题。我最终在我的数据流之前创建了一个脚本任务来检查文件以查看它是否包含“\r\n”。有了这个,我使用了两个包变量并通过我的脚本传递它们。这些变量是 "FileName"(可能是文件路径,但我使用的名称与包中使用的名称相同)、"ErrorMessage" 和 "IsCrLf"。 "IsCrLf" 变量是一个布尔变量,基本上只是检查文件中是否存在“\r\n”。否则,ErrorMessage 将被填充并传递到电子邮件警报。
这是我的任务代码:
public void Main()
{
using (StreamReader r = new StreamReader(Dts.Variables["User::FileName"].Value.ToString()))
{
string s1 = r.ReadToEnd();
string s2 = "\r\n";
bool b = s1.Contains(s2);
if (b)
{
Dts.Variables["User::IsCrLf"].Value = true;
}
else
{
Dts.Variables["User::ErrorMessage"].Value = Dts.Variables["User::FileName"].Value.ToString()+Environment.NewLine+"File does not contain the expected CRLF format.";
Dts.Events.FireError(0, "Error", "File does not contain the expected CRLF format.", string.Empty, 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
}