Visão geral da solução
você pode fazer isso adicionando um
Flat File Connection Manager
adicione apenas uma coluna com o tipo de dados DT_WSTR
e um comprimento de 4000
(assumindo que o nome é Column0
) - Então todas as colunas são consideradas como uma grande coluna - Na
Dataflow task
adicione umScript Component
após aFlat File Source
- Na marca
Column0
como coluna de entrada e adicionar 17 colunas de saída - Na
Input0_ProcessInputRow
divisão do métodoColumn0
por delimitador, em seguida, verifique se o comprimento da matriz é =17, em seguida, atribua valores às colunas de saída, caso contrário, ignore a linha.
Solução detalhada
- Adicione um gerenciador de conexões de arquivo simples, selecione o arquivo de texto
- Vá para a Guia Avançado , Excluir todas as colunas, exceto uma coluna
- Altere o tipo de dados da coluna remanescente para
DT_WSTR
e comprimento =4000

- Adicionar uma tarefa do DataFlow
- Dentro da tarefa de fluxo de dados, adicione uma fonte de arquivo simples, um componente de script e um destino OLEDB

- No Script Component, selecione
Column0
como coluna de entrada

- Adicione 17 colunas de saída (as colunas de saída ideais)
- Alterar o
OutputBuffer
SynchronousInput
propriedade paraNone

- Selecione a linguagem de script para
Visual Basic

-
No Editor de Scripts escreva o seguinte Script
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) If Not Row.Column0_IsNull AndAlso Not String.IsNullOrEmpty(Row.Column0.Trim) Then Dim strColumns As String() = Row.Column0.Split(CChar(";")) If strColumns.Length <> 17 Then Exit Sub Output0Buffer.AddRow() Output0Buffer.Column = strColumns(0) Output0Buffer.Column1 = strColumns(1) Output0Buffer.Column2 = strColumns(2) Output0Buffer.Column3 = strColumns(3) Output0Buffer.Column4 = strColumns(4) Output0Buffer.Column5 = strColumns(5) Output0Buffer.Column6 = strColumns(6) Output0Buffer.Column7 = strColumns(7) Output0Buffer.Column8 = strColumns(8) Output0Buffer.Column9 = strColumns(9) Output0Buffer.Column10 = strColumns(10) Output0Buffer.Column11 = strColumns(11) Output0Buffer.Column12 = strColumns(12) Output0Buffer.Column13 = strColumns(13) Output0Buffer.Column14 = strColumns(14) Output0Buffer.Column15 = strColumns(15) Output0Buffer.Column16 = strColumns(16) End If End Sub
-
Mapeie as colunas de saída para as colunas de destino