2013-02-24 52 views
0

我有一個帶有頁眉和頁腳的固定長度的平面文件,但是這些行沒有任何標識符,例如標頭爲H,拖車爲T或數據爲D或者沿着這些行有一些標識符。如何刪除第一行和最後一行而沒有標識符在固定長度平面文件中?

我所有的數據都以位置1開始,但是頁眉和頁腳以行格式中的不同位置開始。我試圖使用條件分割,但我無法得到我想要的結果。

請幫我找到一些邏輯來獲取數據文件的頁眉和頁腳。我想將數據存儲在SQL Server表中,並將頭/頁腳數據存儲在平面文件中供將來參考。

+1

您應該向我們展示您嘗試的內容,包括樣本輸入和預期輸出。 – 2013-02-24 07:28:54

回答

0

由於您沒有包含在你的問題的確切文件格式,讓我們假設這個樣子的:

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]; 

    } 
} 

希望這些指導足以讓您解決您的問題,以及我提供的兩種解決方案之一。請回復。

+0

感謝Anoop,您的兩個解決方案都能很好地工作 – user2103951 2013-02-26 02:02:36

+0

太棒了!也許你可以把它標記爲答案。 – 2013-02-27 23:38:25

相關問題