ConvertRowsTocolumns Использование SSIS
Я должен извлечь данные из плоских файлов и загрузить в промежуточную базу данных
Пример: у меня есть этот плоский файл без заголовка столбца, и я хотел бы получить каждую строку в отдельном столбце Данные текстового файла: Это фактический формат
01008012603181700250318
02010691700001988800000000000000000000000
51X11055907014X10000002200000000220000000003671100000000001124000000002110559070145
51X61630051007X10000000005000000000500000000016100000000009999000000002616300510071
60350000002205000000000002
02010691713001988900000000000000000000000
51X08042508025X10000001000000000100000000001670800000000000806000000002080425080250
51X08040547025X10000001000000000100000000001670800000000000806000000002080405470255
60350000002000000000000002
02011511724001989000000000000000000000000
112997241682493 01
51X08066360013X10000002200000000170000000002830800000000000806000000002080663600135
53-00000050098234151 00
112997241682493 01
51X08061643013X10000001500000000150000000002500800000000000806000000002080616430130
683000000000000000000000000
60350000003200000000000002
01008022603181734250318
160206917349000002B26031802
6724-000004400000000000002
320206917340201Y180326
3301000005321500000532150000000000000000000002
Условия: left (col,2) = 01 в один столбец и оставленный (col,02) в другой столбец... так что я должен прочитать несколько плоских файлов, как это. Имена столбцов похожи на column01,column02,column51. В этом случае 01 остается основным столбцом для любых нескольких строк. Мне нужно будет просмотреть как минимум 100 таких файлов.
Образец вывода
Col01 col2 Col3
01008012603181700250318 02010691700001988800000000000000000000000 51X11055907014X10000002200000000220000000003671100000000001124000000002110559070145
Обновление 1: по предложению @Tab Alleman я загрузил весь текст в один столбец таблицы SQL. Я попытался разделить строки по string_split
функция, не может быть в состоянии достичь результата. Разделитель - это пробел, но некоторые данные строки имеют несколько пробелов. Я также попытался создать функцию string_split, размещенную в стеке.
например: 01594022603181352250318 02027061352002288200000000000000000000000 112997232009865 01 51X06082082020X10000000600000000054000000000900600000000000601000000002060820820200 56-00000006012 00 112997232009865 01
2 ответа
Если вы действительно хотите, чтобы весь файл создавал только одну строку, все, что вам нужно сделать, это установить символ CRLF (или любой другой символ конца строки вашего файла) в качестве символа-разделителя столбцов в соединении с плоским файлом. Каждая строка вашего файла будет столбцом в потоке данных.
У меня есть сценарий, который поможет вам. Хотя есть несколько шагов
Загрузите ваши данные в колонку с именами данных.
Добавить скрипт Преобразование компонентов
- На вкладке ввода - выберите данные только для чтения
- При вводе / выводе добавьте ожидаемый вывод Col1, Col2, ... и я установил для них все значение varchar(500)
- Добавьте следующий скрипт (C#)
int rn = 0;
строка Col1;
строка Col2;
строка Col3;
строка Col4;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
rn++;
Col1 = Row.data;
while (Row.NextRow())
{
rn++;
switch (rn)
{
case 2:
Col2 = Row.data;
break;
case 3:
Col3 = Row.data;
break;
case 4:
Col4 = Row.data;
//Add transposed data on last row
FlippedBuffer.AddRow();
FlippedBuffer.Col01 = Col1;
FlippedBuffer.Col2 = Col2;
FlippedBuffer.Col3 = Col3;
FlippedBuffer.Col4 = Col4;
break;
}
}
}
Обратите внимание на следующее:
- переменные объявляются вне скрипта ProcessInputRow
- Новая строка создается, когда читается последняя строка.
- Я не мог заставить переменные отображаться как код при форматировании.
- Вам нужно добавить все ваши столбцы в Output, объявление переменной и переключатель.