Как разобрать текстовый файл в ssis

Я новичок в SSIS, я столкнулся с приведенной ниже проблемой при анализе текстового файла, который содержит приведенные ниже образцы данных.

Ниже приведено требование

-> Необходимо захватить число после IH1 (454756567) и вставить в один столбец как Номер счета -> Необходимо вставить данные между ABCD1234 и ABCD2345 в другой столбец как TotalRecord.

Большое спасибо за помощь .

ABCD1234

IH1 454756567 686575634

IP2 HJKY TXRT

IBG 23455GHK

ABCD2345

IH1 689343256 686575634

IP2 HJKY TXRT

IBG 23455GHK

ABCD5678

Я бы рекомендовал изучить компонент сценария, оператор split и switch. Это позволит вам обрабатывать ВЕСЬ файл, а не получать те части, которые вам нужны.

KeithL 31.10.2018 13:32
0
1
143
2

Ответы 2

Вам нужно будет сделать это в компоненте скрипта.

Это компонент сценария для обработки всего файла. Вам нужно создать свой вывод, и в настоящее время они обрабатываются как строки.

Предполагается, что ваш формат файла согласован. Если у вас нет 2 столбцов в IH1 и IP2 ВСЕГДА. Я бы порекомендовал для обработки цикл for от 1 до len -1. И отправьте записи на собственный выход.

public string recordID = String.Empty;
public override void CreateNewOutputRows()
{
    string filePath = ""; //put your filepath here
    using (System.IO.StreamReader sr = new System.IO.StreamReader(filePath))
    {
        while (!sr.EndOfStream)
        {
            string line = sr.ReadLine();
            if (line.Substring(0, 4) == "ABCD") //Anything that identifies the start of a new record
                                                // line.Split(' ').Length == 1 also meets your criteria.
            { 
                recordID = line;
                Output0Buffer.AddRow();
                Output0Buffer.RecordID = line;
            }

            string[] cols = line.Split(' ');

            switch (cols[0])
            {
                case "IH1":
                    Output0Buffer.InvoiceNumber = cols[1];
                    Output0Buffer.WhatEverTheSecondColumnIs = cols[2];
                    break;
                case "IP2":
                    Output0Buffer.ThisRow = cols[1];
                    Output0Buffer.ThisRow2 = cols[2];
                    break;
                case "IBG":
                    Output0Buffer.Whatever = cols[1];
                    break;
            }
        }
    }
}

Другие вопросы по теме