gpt4 book ai didi

c# - 使用 SSIS 加载非标准格式的 CSV

转载 作者:行者123 更新时间:2023-11-30 23:02:37 25 4
gpt4 key购买 nike

我的任务是加载 csv 文件中的会计交易记录。该文件包含应用于整个文件的一行标题信息,但出于某种原因,它按帐号将数据分组在交易数据之上,但与 ID 在同一列中。

"ID","Name","Date","Debit","Credit","Balance"
,,,,,
"1150 - Cash in Bank",,,,,
"Starting Balance",,,,,"59,612.78"
615892,"Account Name 1","5/5/2018","2,100.00",,"61,712.78"
645761,"Account Name 2","5/7/2018",,7,"61,705.78"
615892,"Account Name 3","5/8/2018",,"2,144.33","59,561.45"
713300,"Account Name 4","5/8/2018","2,144.33",,"61,705.78"
713300,"Account Name 5","5/8/2018",,"2,144.33","59,561.45"
693615,"Account Name 6","5/9/2018",,"1,650.00","57,911.45"
"Net Change",,,,,"-1,701.33"
,,,"4,244.33","5,945.66","57,911.45"
"3150 - Owner Contribution",,,,,
"Starting Balance",,,,,0
713300,"Account Name 4","5/8/2018",,"2,144.33","-2,144.33"
"Net Change",,,,,"-2,144.33"
,,,0,"2,144.33","-2,144.33"

有人可以让我开始处理这个问题吗?我知道如何仅通过几个变量和逐行处理在逻辑上完成此操作,但我根本不是 C# 或前端开发人员。我最大的问题似乎是你不能像 SQL 那样编写一个 block 并测试它。我可以查询表、查看数据并继续构建它,但使用 C# 我需要一个完整的脚本来协同工作。我如何从一个小块开始并扩展?甚至将第一个帐户名称读入变量并将其显示为数据流任务中的变量。只是我可以发送代码并取回一些东西,似乎我在网上找到的每个脚本都有一些编译错误,我还没有足够的知识来解决它们。

最佳答案

解决方案概述

我在 VB.Net 中提供了我的答案,因为它可能更容易理解,尤其是您不是 C# 开发人员

  • 数据流任务中,在Flat File Source之后添加一个Script Component
  • 将所有列标记为输入列并添加 8 个输出列
  • Input0_ProcessInputRow 中检查 ID 列是否不为空并且它包含一个整数以创建输出行,否则如果它包含帐号或起始余额,则将这些值存储到变量中,否则忽略行。

详细解决方案

  1. 添加平面文件连接管理器,选择文本文件
  2. 将文本限定符更改为 "

enter image description here

  1. 添加数据流任务
  2. 在数据流任务中添加平面文件源、脚本组件和 OLEDB 目标

enter image description here

  1. 在脚本组件中选择所有列作为输入列

  2. 添加 8 个输出列(主要列 + 帐户 + 起始余额)(所有类型 DT_STR)

enter image description here

  1. OutputBuffer SynchronousInput 属性更改为 None

enter image description here

  1. 选择脚本语言为 Visual Basic

enter image description here

  1. 在脚本编辑器中编写以下脚本

    Private AccountName as String = ""
    Private StartingBalance as String = ""
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

If Not Row.ID_IsNull AndAlso
Not String.IsNullOrEmpty(Row.ID.Trim) Then


'Skip Bad Rows
If Row.ID = "" Then Exit Sub

If Integer.TryParse(Row.ID,New Integer) Then

Output0Buffer.AddRow()
Output0Buffer.ID = Row.ID
Output0Buffer.Name = Row.Name
Output0Buffer.Date = Row.Date
Output0Buffer.Debit = Row.Debit
Output0Buffer.Credit = Row.Credit
Output0Buffer.Balance = Row.Balance
Output0Buffer.Account = AccountName
Output0Buffer.StartingBalance = StartingBalance

Elseif Row.ID.Contains("Starting Balance") Then

StartingBalance = Row.Balance

Elseif Row.ID.Contains("-") Then

AccountName = Row.ID

Else


'Ignore Row
Exit Sub

End If






End If

End Sub
  1. 将输出列映射到目标列
  2. 输出将是:

enter image description here

关于c# - 使用 SSIS 加载非标准格式的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50378196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com