我对使用脚本进行ETL工作有点新,除了使用脚本用值替换LF或CRLF之外,我找不到与此相关的任何内容。是否可以使用脚本或其他内容来验证我的文件仅使用CRLF行终止符,如果它只是CRLF,则它无法完成作业。
我希望失败这个工作,然后我可以向代理商报告他们需要遵循特定格式的文件,因此加载的唯一文件是CRLF文件。
谢谢,
答案 0 :(得分:0)
找到了处理我问的方法。我最终在我的数据流之前创建了一个脚本任务,以检查文件是否包含" \ r \ n"。有了这个,我使用了两个包变量并通过我的脚本传递它们。这些变量是" FileName" (可能是文件路径,但我使用的名称与包中使用的名称相同)," ErrorMessage"和#34; 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;
}
}
}