仅记录SSIS中文本文件的某些行

时间:2014-06-20 09:32:11

标签: sql-server ssis flat-file dataflow

我很难尝试从平面文件到数据库进行简单的数据加载。 问题是存在错误的行或至少没有格式化为该文本文件中的数据的行。

Sample.txt的:

                Stackoverflow School at Philippines

Record: 100101
Date: 6/20/2014

Name:                Age: About:
-------------------- ---  --------------------------
Coolai               19   Bad Row Question
Qwerty               17   Java
Qwerty               19   C#
*User1               21   Dynamic Data
User4                27   Assembly

                    Stackoverflow School at Nippon

Record: 100102
Date: 6/23/2014

Name:                Age: About:
-------------------- ---  --------------------------
Sayuri               19   MSSQL
Niwatori             21   Dynamic Data
Jagaimo              27   Assembly
*User7               21   Dynamic Data
User9                27   Assembly

我在平面文件连接上使用固定宽度格式并尝试使用条件分割来解决问题但是一旦它到达空白区域,它就会停止加载数据。

是否可以根据特定的行数加载数据?因为最后,这是我想要的唯一文本文件:

Coolai               19   Bad Row Question
Qwerty               17   Java
Qwerty               19   C#
User1                21   Dynamic Data
User4                27   Assembly
Sayuri               19   MSSQL
Niwatori             21   Dynamic Data
Jagaimo              27   Assembly
User7                21   Dynamic Data
User9                27   Assembly

Sample.txt文件LINK

1 个答案:

答案 0 :(得分:1)

由于源文本文件不遵循分隔格式标准,因此您需要使用脚本任务,并编写自定义脚本来处理所有这些空格和错误数据。您需要将文本文件转换为某种分隔格式,然后才能按要求进行处理。

脚本任务的逻辑是 - 逐行读取文件,并在执行遇到坏线/数据时放入逻辑以跳过。通过这样做,结果将采用标准分隔格式。

在脚本中尝试以下代码,您可以使用List<string> goodData

中提取的数据
        string line;
        bool isNextLineGoodData = false;
        List<string> goodData = new List<string>();
        // Read the file and display it line by line.
        System.IO.StreamReader file = new System.IO.StreamReader("c:\\csv.txt");
        while ((line = file.ReadLine()) != null)
        {

            if (isNextLineGoodData)
            {
                if (line=="")
                {
                    isNextLineGoodData = false;
                }
                else
                {
                    goodData.Add(line);
                }

            }
            if (line=="")
            {
                isNextLineGoodData = false;
            }
            if (line.StartsWith("---"))
            {
                isNextLineGoodData = true;

            }
        }

        file.Close();