簡體   English   中英

SSIS-平面文件源中的固定列數

[英]SSIS - Fixed number of columns in flat file source

我在目錄中有許多文本文件,這些文件具有由標簽分隔的固定數量的列[6]。 我使用“平面文件源”塊將其讀入SSIS包中。 如果文件中的列數超過了所需的數目,或者任何列中的數據均丟失,我想拒絕該文件。

我已經對各種示例文件進行了一些測試。 每當我添加其他列時,程序都會接受這些文件。 當較少的列是好的時,它將引發錯誤。

但是,是否有一種方法可以指定文件必須具有一定數量的列,並且每列中必須存在數據?

我在SSIS方面沒有太多經驗,所以我將不勝感激。

謝謝

我將使用腳本任務來執行此操作。

您可以使用System.IO.StreamReader打開文件並讀取標題行,然后對結果字符串執行所需的任何驗證。

我還將在SSIS包中創建一個布爾變量,稱為“ FileIsValid”,如果滿足條件,我將向其寫入(通過腳本任務)如果為True,則為False。 然后,我將使用優先約束使用它來指導程序包流。

像這樣:

public void Main()
{
    System.IO.StreamReader reader = null;

    try
    {
        Dts.Variables["User::FileIsValid"].Value = false;

        reader = new System.IO.StreamReader(Dts.Variables["User::Filepath"].Value.ToString());

        string header = reader.ReadLine();

        if (header.Trim() == "Column1\tColumn2\tColumn3\tColumn4\tColumn5\tColumn6")
            Dts.Variables["User::FileIsValid"].Value = true;

        reader.Close();
        reader.Dispose();

        Dts.TaskResult = (int)ScriptResults.Success;
    }
    catch
    {
        if (reader != null)
        {
            reader.Close();
            reader.Dispose();
        }

        throw;
    }
}

關於檢查所有列中是否都有數據,是否需要每一行?

您可以繼續使用StreamReader閱讀這些行,並使用正則表達式檢查類似這樣的內容。

擴展Chris Mack:

如果文件沒有標題,則可以進行計數。

char[] delim = new char[] {'\t'};
if(header.Split(delim).Length() == 5)
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM