SSIS和行中缺少的文件

时间:2014-03-14 15:06:10

标签: sql-server ssis

我遇到了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可以正确划分它。

1 个答案:

答案 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;