Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SSI使用条件拆分或脚本拆分平面文件中的行_C#_.net_Sql Server_Ssis_Etl - Fatal编程技术网

C# SSI使用条件拆分或脚本拆分平面文件中的行

C# SSI使用条件拆分或脚本拆分平面文件中的行,c#,.net,sql-server,ssis,etl,C#,.net,Sql Server,Ssis,Etl,我是SSIS新手,非常感谢您的想法或解决方案 我有一个平面文件,第一行是文件详细信息(不是标题)。第二行之后是实际数据 数据描述 第一行格式=供应商名称、日期、文件中的记录数 例如: 供应商名称^06022017^3 ID1^会员1^纽约^050117^50.00^一般^ANC ID2^会员2^佛罗里达^050517^50.00^移动电话^ANC ID3^会员3^西雅图^050517^80.00^移动^ANC EOF 问题 使用SSI,我希望将第一行拆分为output1,然后将第二行拆分为out

我是SSIS新手,非常感谢您的想法或解决方案

我有一个平面文件,第一行是文件详细信息(不是标题)。第二行之后是实际数据

数据描述

第一行格式=供应商名称、日期、文件中的记录数 例如:

供应商名称^06022017^3
ID1^会员1^纽约^050117^50.00^一般^ANC ID2^会员2^佛罗里达^050517^50.00^移动电话^ANC ID3^会员3^西雅图^050517^80.00^移动^ANC
EOF

问题

使用SSI,我希望将第一行拆分为output1,然后将第二行拆分为output2

在条件拆分的帮助下,我想我可以做到这一点。但是我不确定为了分割行应该给出什么条件。我应该试试多播吗


谢谢

我将通过使用脚本任务(在数据流之前)读取第一行并对其执行任何操作来处理此问题


然后在数据流任务中,我会将平面文件源设置为忽略第一行,并将第二行作为数据导入。

我会首先确保平面文件连接中的列数正确: 编辑平面文件连接->高级选项卡按新建按钮添加列。在您的示例中,应该有第7列,第0列到第6列

现在添加一个条件拆分和两个case语句:

Output Name      Condition
HeaderRow        [Column 0] == "Supplier_Name"
DetailRow        [Column 0] != "Supplier_Name"

现在将它们发送到输出1和输出2,展开选项卡Allerman的答案

对于我们的项目,我们在
executeprocesstask
中使用了powershell脚本组件,它运行一个简单的powershell命令来获取文件的第一行

有关如何运行powershell脚本,请参见此

获取第一行的powershell脚本

Get-Content C:\foo\yourfolderpath\yourfilename.txt -First 1

本说明仅在类似您的情况下有用,但通常有助于避免处理头不正确的大文件(GB及以上)。这个简单的powershell以毫秒为单位执行,而大多数进程/脚本都需要将完整的文件加载到内存中,这会降低速度。

谢谢大家。这里有一个替代方案

我在SSIS中使用了一个脚本组件来实现这一点

步骤1:创建一个名为RowNumber的变量

第2步:然后添加脚本组件,该组件将添加额外的列并增加行号

SSIS脚本组件

 private int m_rowNumber;
public override void PreExecute()
{
    base.PreExecute();
    m_rowNumber = 0;
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    m_rowNumber++;
    Row.RowNumber = m_rowNumber;
}
步骤3:使用脚本组件的输出作为条件拆分的输入,并创建一个RowNumber==1的条件

多播将相应地分割数据


这将起作用,但如果供应商名称因文件而异。这很难处理