Проверка длины строки при импорте текстового файла со столбцами фиксированной длины в SSIS 2016 - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть файл фиксированной длины, который я должен прочитать и проверить. Этот файл создается другой системой, но иногда сотрудники вносят в него изменения вручную. Пример:

Компоновка

Переменная: Размер фамилии: 30 1 -30
Переменная: Имя размера: 30 31-60 Переменная: размер электронной почты: 30 61-90 Переменная: Размер комментариев: 30 91-120 Переменная: CarriageReturn размер: 2 121-123

Итак, система создает следующий текстовый файл: Исходный файл

Но тогда происходит ручное вмешательство, и человек не учитывает длину столбца: Исходный файл после ручного вмешательства

Поэтому, прежде чем даже начинать проверку значений в столбцах, все смещается, потому что мой первый возврат каретки теперь разделяет мой столбец «Комментарии», когда я читаю его в службах SSIS.

Есть ли способ сообщить системе, что, если длина строки превышает 2033, вывести в файл ошибок и продолжить? Каков наилучший способ сделать это?

Mylene

1 Ответ

0 голосов
/ 10 мая 2018

Я нашел это !!

//Pass the file path and file name to the StreamReader and StreamWriter constructors
            StreamReader sr = new StreamReader(inputFile);
            StreamWriter sw = new StreamWriter(Dts.Connections["CE802CleanInput"].ConnectionString);
            StreamWriter swe = new StreamWriter(Dts.Connections["CE802PreValidationErrors"].ConnectionString);

            //Read the first line
            line = sr.ReadLine();

            while (line != null)
            {
               int length = line.Length;
               if (length > 2033)
               {
                    if 
                    {
                        swe.WriteLine("Some records have been rejected at the pre validation phase.");
                        swe.WriteLine("Those records will not be included in the process.");
                        swe.WriteLine("Please review the records below, fix and re submit if applicable.");
                        swe.WriteLine("Input file: " + Dts.Connections["CE802Input"].ConnectionString.ToString());
                        swe.WriteLine();
                        swe.WriteLine(line);
                        count++;
                    }
                    else
                    {
                        swe.WriteLine(line);
                        count++;
                    }
               }
               if (length <= 2033)
               {
                    sw.WriteLine(line);
               }
                line = sr.ReadLine(); 
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...