我有一个带有页眉和页脚的固定长度的平面文件,但是这些行没有任何标识符,例如标头为H,拖车为T或数据为D或者沿着这些行有一些标识符。如何删除第一行和最后一行而没有标识符在固定长度平面文件中?
我所有的数据都以位置1开始,但是页眉和页脚以行格式中的不同位置开始。我试图使用条件分割,但我无法得到我想要的结果。
请帮我找到一些逻辑来获取数据文件的页眉和页脚。我想将数据存储在SQL Server表中,并将头/页脚数据存储在平面文件中供将来参考。
我有一个带有页眉和页脚的固定长度的平面文件,但是这些行没有任何标识符,例如标头为H,拖车为T或数据为D或者沿着这些行有一些标识符。如何删除第一行和最后一行而没有标识符在固定长度平面文件中?
我所有的数据都以位置1开始,但是页眉和页脚以行格式中的不同位置开始。我试图使用条件分割,但我无法得到我想要的结果。
请帮我找到一些逻辑来获取数据文件的页眉和页脚。我想将数据存储在SQL Server表中,并将头/页脚数据存储在平面文件中供将来参考。
由于您没有包含在你的问题的确切文件格式,让我们假设这个样子的:
This is the header line with some spaces at the beginning.
This, is, real, line 1
This, is, real, line 2
End of file. It has some spaces too at the beginning.
如果这是你的情况的正确表示,你可以使用一个平面文件源,阅读插件全部每条记录在一列,说EntireRow,然后使用条件拆分使用以下条件确定的页眉/页脚:
LEN(EntireRow) > LEN(TRIM(EntireRow))
这里的问题是你会如何分割有意义行(示例ab中的实线1和2 OVE)。您可以将其转储到另一个文件中。现在,这个文件将被清除,页眉和页脚被删除。这是一个简单但不是最有效的解决方案。
解决方案2:
一个更好的解决办法是使用脚本组件。了解如何动态添加行。一个这样的例子:http://www.sqlis.com/post/The-Script-Component-as-a-Transformation.aspx
现在,为了让你开始,一个示例代码,将消除头/脚使用你的条件,他们没有开始在位置1 ...没有错误处理。上面的链接将告诉你如何在输出中添加输出和列。确保您的列的数据类型与源文件的数据类型匹配。
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
/*
Add your code here
*/
if ((Row.EntireRow.Length == Row.EntireRow.Trim().Length))
{
string[] sArrFields = Row.EntireRow.Split(',');
MeaningfulBuffer.AddRow();
MeaningfulBuffer.Col1 = sArrFields[0];
MeaningfulBuffer.Col2 = sArrFields[1];
MeaningfulBuffer.Col3 = sArrFields[2];
MeaningfulBuffer.Col4 = sArrFields[3];
}
}
希望这些指导足以让您解决您的问题,以及我提供的两种解决方案之一。请回复。
感谢Anoop,您的两个解决方案都能很好地工作 – user2103951 2013-02-26 02:02:36
太棒了!也许你可以把它标记为答案。 – 2013-02-27 23:38:25
您应该向我们展示您尝试的内容,包括样本输入和预期输出。 – 2013-02-24 07:28:54