0

我必须从平面文件中提取数据并加载到临时数据库中

例如:我有这个没有列标题的平面文件,我想将每一行放入一个单独的列文本文件数据:这是实际格式

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 进入一列,left(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

4

2 回答 2

1

如果您真的希望整个文件只生成一行,您所要做的就是将 CRLF 字符(或文件的行终止符)设置为平面文件连接中的列分隔符。文件的每一行都将是数据流中的一列。

于 2018-04-10T18:30:57.750 回答
0

我有一个脚本任务可以帮助你。虽然它有几个步骤

  1. 将您的数据加载到列名数据中。

  2. 添加脚本组件转换

  3. 在输入选项卡上 - 将数据选择为只读
  4. 在输入/输出上添加您期望的输出 Col1, Col2, ... 我将它们全部设置为 varchar(500)
  5. 添加以下脚本(C#)

诠释 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;
        }
    }

}

请注意以下事项:

  1. 变量在 ProcessInputRow 脚本之外声明
  2. 读取最后一行时创建新行。
  3. 我无法让变量在格式中显示为代码。
  4. 您需要将所有列添加到输出、变量声明和开关中。
于 2018-04-10T18:42:38.850 回答