如何定義多行分隔符在SSIS一個平面文件連接? 例如用於包含該字符串的文本文件:多行分隔符
文明需要在所有時間;粗魯不會被容忍。
我想有使用在此之後的兩行「;」和'。'用於行定界符:
文明需要在所有時間
粗魯將不會容忍
如何定義多行分隔符在SSIS一個平面文件連接? 例如用於包含該字符串的文本文件:多行分隔符
文明需要在所有時間;粗魯不會被容忍。
我想有使用在此之後的兩行「;」和'。'用於行定界符:
文明需要在所有時間
粗魯將不會容忍
對於源數據,我創建了一個3線文件
Civility is required at all times; rudeness will not be tolerated.
The quick brown fox jumped over the lazy dogs.
I am but a single row with no delimiter beyond the carriage return
的我在下面採用的一般方法是使用帶有Ragged Right格式的平面文件連接管理器,並且我的標題行分隔符是{CR} {LF}。我定義了一列,InputRow爲String 8000. YMMV
在我的數據流中,在平面文件源之後,我將一個腳本組件添加爲一個名爲Split Rows的數據轉換。
在輸入列選項卡,選中InputRow並把它作爲只讀因此腳本可以訪問值。如果您可以將其切換到ReadWrite並修改傳出值,但這不適用於此類操作,那將會很不錯。
默認情況下,腳本任務是同步組件,這意味着行和列之間存在1:1的關係。這將不適合您的需求,因此您需要將其切換到異步模式。我將Output 0重命名爲OutputSplit,並將SynchronousInput的值從「Input 0(16)」更改爲None。你的價值16可能會有所不同。
輸出上有欄目的OutputSplit,添加一列與SplitRow DT_STR 8000
在你的腳本轉化的名稱,你只需要與ProcessInputRow方法有關。字符串類提供了一個拆分方法,它接收一組可用作拆分器的字符值。目前,它在數組初始化器中被硬編碼,但它可以很容易地被定義爲一個變量並傳遞到腳本中。這是留給海報的練習。
/// <summary>
/// we have to make this an async script as 1 input row can be many output rows
/// </summary>
/// <param name="Row"></param>
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string[] results = Row.InputRow.Split(new char[]{';', '.'});
foreach (string line in results)
{
// Remove this line if it is desirable to have empty strings in the buffer
if (!string.IsNullOrEmpty(line))
{
OutputSplitBuffer.AddRow();
// You might want to call trim operations on the line
OutputSplitBuffer.SplitRow = line;
}
}
}
有了這一切完成後,我打了F5,瞧,
這將取決於你經過多少數據運行是一個相當內存密集型包。我確信有人可以做出優化,但這應該足以讓你走。
因此,你已經有一個行定界符像一個換行符(\ n)定義,你想也分裂在一個分號?數據流中只有一行,還是需要複製列1-n,並將Civility行和Rudeness行加倍? – billinkc
@arz你的意思是使用';'和'\ r \ n'作爲行分隔符嗎? –