Analyser un champ en plusieurs, en fonction du délimiteur

J'essaie de find un moyen d'parsingr 1 champ dans 8 champs différents en utilisant SSIS. Je suis ouvert à une solution C # ou à une solution VB. J'ai trouvé un moyen de le faire dans SQL Server, mais comme mon équipe fait beaucoup de choses dans SSIS maintenant, j'aimerais avoir une solution SSIS pour que les choses restnt simples et efficaces. J'ai regardé en ligne et trouvé une option, dans le lien ci-dessous.

Fractionner une seule colonne de données avec des délimiteurs de virgules en plusieurs colonnes dans SSIS

Je ne suis pas vraiment sûr de la façon dont cela fonctionne, si cela fonctionne même. Mon exemple de données ressemble à ceci: Purchase | 345 | USD | GT | TF456577 | DG | 125 | KTMDC Purchase | 345 | USD | GT | TF456577 | DG | 125 | KTMDC

Je peux avoir de 0 à 7 caractères pipe, donc je dois split un champ en un maximum de huit champs. J'apprécierais toute aide avec ceci. Merci.

entrez la description de l'image ici

Hadi, je fais quelques petites modifications. Pouvez-vous regarder la capture d'écran et dites-moi ce qui ne va pas ici? De plus, je n'ai jamais trouvé l'option DT-STR . Peut-être que c'est le problème.

Vous pouvez le faire en utilisant un composant de script

Dans cette réponse, je vais supposer que la source de données est une table SQL Server, avec une colonne Column0

Dans le package du service d'intégration, procédez comme suit:

  1. Ajouter une Data Flow Task
  2. Créez un gestionnaire de connection OLEDB et configurez-le
  3. Dans la Data Flow Task ajoutez une OLEDB Source et choisissez la table contenant la colonne à split.
  4. Ajouter un Script Component (Définir son type sur Transformation)
  5. Connectez la OLEDB Source au composant de script
  6. Modifier ce langage de script en Visual Basic
  7. Dans le Script Component select Column0 comme input
  8. Aller à l'onglet Sorties d'inputs
  9. Ajoutez 8 colonnes à Output0 (ex: outColumn0, outColumn1 ... outColumn8 ) avec le type de données DT-STR
  10. Dans la window Script, écrivez le script suivant:

     Imports System.Linq Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) If Not Row.Column0_IsNull AndAlso Not Ssortingng.IsNullOrEmpty(Row.Column0.Trim) Then Dim strColumn As Ssortingng = Row.Column0 Dim intVerticalBarCount As Integer intVerticalBarCount = strColumn.Count(Function(x) x = CChar("|")) If intVerticalBarCount <= 8 Then strColumn = strColumn & "".PadRight((8 - intVerticalBarCount), CChar("|")) Dim strOutputColumns As Ssortingng() = strColumn.Split(CChar("|")) Row.outColumn0 = strOutputColumns(0) Row.outColumn1 = strOutputColumns(1) Row.outColumn2 = strOutputColumns(2) Row.outColumn3 = strOutputColumns(3) Row.outColumn4 = strOutputColumns(4) Row.outColumn5 = strOutputColumns(5) Row.outColumn6 = strOutputColumns(6) Row.outColumn7 = strOutputColumns(7) Else Row.outColumn0_IsNull = True Row.outColumn1_IsNull = True Row.outColumn2_IsNull = True Row.outColumn3_IsNull = True Row.outColumn4_IsNull = True Row.outColumn5_IsNull = True Row.outColumn6_IsNull = True Row.outColumn7_IsNull = True End If End Sub 

Dans le code ci-dessous, nous obtenons d'abord le nombre d'occurrences de barres verticales | dans la colonne si elle est inférieure à 8, nous ajoutons les barres verticales manquantes, puis nous divisons la colonne et l'assignons aux colonnes de sortie