Записывать только определенные строки текстового файла в SSIS

#sql-server #ssis #flat-file #dataflow

#sql-сервер #ssis #плоский файл #поток данных

Вопрос:

Мне трудно выполнить простую загрузку данных из плоского файла в базу данных. Проблема в том, что в этом текстовом файле есть неверные строки или, по крайней мере, строки, которые не отформатированы как данные.

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 ссылка на файл.

Комментарии:

1. Что такое разделитель строк заголовка? Какую ширину вы определили для фиксированной ширины?

2. Разделитель строки заголовка @Raj равен: {CR}{LF}, а ширина строки, вероятно, равна 51.

3. Можете ли вы прикрепить сюда исходный текстовый файл? При ширине столбца 51 я получаю разорванные строки

4. Обновление — прикреплен текстовый файл :]

Ответ №1:

Поскольку исходный текстовый файл не соответствует стандарту формата с разделителями, вам необходимо использовать script task и написать пользовательский скрипт для обработки всех этих пробелов и неверных данных. Вам необходимо преобразовать текстовый файл в некоторый формат с разделителями, после чего его можно будет обработать в соответствии с требованиями.

Логика задачи скрипта — читать файл построчно и указывать логику, когда пропускать, когда выполнение попадает в неправильную строку / данные. При выполнении этого результат будет в стандартном формате с разделителями.

Попробуйте приведенный ниже код в скрипте, вы можете использовать извлеченные данные из 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();
 

Комментарии:

1. Спасибо за ответ, я попробую!