C# SSI使用条件拆分或脚本拆分平面文件中的行
我是SSIS新手,非常感谢您的想法或解决方案 我有一个平面文件,第一行是文件详细信息(不是标题)。第二行之后是实际数据 数据描述 第一行格式=供应商名称、日期、文件中的记录数 例如: 供应商名称^06022017^3C# 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
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的条件
多播将相应地分割数据
这将起作用,但如果供应商名称因文件而异。这很难处理