我遇到了SSIS问题。它真的扔掉了东西。这是我面临的一个例子
H~Column1~Column2~Column3~Column4
D~1~2~3~4<LF>
D~6-7-8-9<LF>
T~ More Stuff<LF>
第一行没有LF字符,因此当我在SSIS中设置文件任务时,程序将其作为一列读取为一个长字符串
H~Column1~Column2~Column3~Column4D~1~2~3~4D~6-7-8-9T~ More Stuff
有关如何解决此问题的任何想法,以便SSIS可以正确划分它。
答案 0 :(得分:1)
创建一个脚本任务,逐行读取整个文件,并将其输出到一个新文件caled {YourFilename} _Cleaned(或类似的东西)。下面是Main()方法的框架。只需替换注释&#34; //在列名列表后插入LF到LineData&#34;使用代码将LF插入第一行中的正确位置。
/* include these
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
*/
// put the below in your Main() method
string sourceFile = (string)Dts.Variables["FilePickupRootPath"].Value + "\\Process\\" + (string)Dts.Variables["FileName"].Value;
string cleanFile = (string)Dts.Variables["FilePickupRootPath"].Value + "\\Process\\" + (string)Dts.Variables["FileName"].Value + "_Cleaned";
string lineData;
Boolean isFirstLine = true;
try
{
StreamReader reader = new StreamReader(sourceFile);
StreamWriter writer = new StreamWriter(cleanFile, false);
lineData = reader.ReadLine();
while (lineData != null)
{
if (isFirstLine)
{
// insert LF into LineData after column name list
isFirstLine = false;
}
writer.WriteLine(lineData);
lineData = reader.ReadLine();
}
reader.Close();
writer.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Error!");
Console.WriteLine("Exception: " + e.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
}
Dts.TaskResult = (int)ScriptResults.Success;