如何将具有两个标题的混合记录类型固定宽度文件加载到两个单独的文件中

2023-11-26

我的任务是加载格式奇怪的文本文件。该文件还包含不需要的数据。它包含两个背靠背的标头,每个标头的数据在交替行上指定。标题行开始于------。我需要读取标头及其相应的数据,并将其转储到某个 Excel/表目标中。让我知道如何使用 SSIS 中的任何转换或脚本来解决此问题。 不知道如何为此使用脚本任务。

现在我正在读取一列中的文件并使用派生列手动尝试使用substring功能。但这仅适用于一个标头,而且它是一种硬编码类型。我需要一些动态方法来直接读取标题行和数据行。

输入文件:

A1234-012                                         I N F O R M A T I C S  C O M P A N Y                                      08/23/17
PAGE    2 BATCH ABC                                           PAYMENT DATE & DUE DATE                                 EDIT PAGE  481
------------------------------------------------------------------------------------------------------------------------------------
 SEO  XRAT CLT     LOAN      OPENING  PAYMENT MATURIUH LOAN NEXE ORIG-AMT   OFF TO CATE  CONTC MON NO.TO  TOL NEL   S CUP CO IND PAT
 NOM  CODE NOM    NOMTER      DATE    DUO DATE  DATE   TIME PT #  MONEY         AQ LOAN  NUMBER    BLOCK   PAYMENT  U TYP GH OMG IND
       1-3 4-6  7-13/90-102  14-19    20-25     26-31 32-34 35-37 38-46   47-48 49 50-51 52-61  62  63      64-72  73 4-5 76 77 8-80
------------------------------------------------------------------------------------------------------------------------------------
 SEO  XRAT CLT     LOAN     A/C   A/C     MIN     MAX    MAX   PENDI  LATE CCH  L/F  PARTLYS  CUR   L/F      L/F     L/F
 NOM  CODE NOM    NOMTER    CODE FACTOR   MON     MON    ROAD   DAYS  MONE POT  L/A  L/F JAC  INT  VAD CD  USED PI  VAD DT
       1-3 4-6  7-13/90-102  14  15      20-23   24-29   30-34 35-37   38-42    43     44     49     60     61-63    64-69
USED-ID:
------------------------------------------------------------------------------------------------------------------------------------
454542 070 567    2136547895 08-08-18 08-06-18 11-02-18 123 256      62,222  LK  5 55 5463218975 5 3       5,555.22    33        H55
025641 055 123    5144511352 B  .55321   2.55 6531.22                                                 H      #AS
454542 070 567    2136547895 08-08-18 08-06-18 11-02-18 123 256      62,222  LK  5 55 5463218975 5 3       5,555.22    33        H55
025641 055 123    5144511352 B  .55321   2.55 6531.22                                                 H      #AS
454542 070 567    2136547895 08-08-18 08-06-18 11-02-18 123 256      62,222  LK  5 55 5463218975 5 3       5,555.22    33        H55
025641 055 123    5144511352 B  .55321   2.55 6531.22                                                 H      #AS

预期输出应该是:

FILE 1:

 SEO  XRAT CLT     LOAN      OPENING  PAYMENT MATURIUH LOAN NEXE ORIG-AMT   OFF TO CATE  CONTC MON NO.TO  TOL NEL   S CUP CO IND PAT
 NOM  CODE NOM    NOMTER      DATE    DUO DATE  DATE   TIME PT #  MONEY         AQ LOAN  NUMBER    BLOCK   PAYMENT  U TYP GH OMG IND
454542 070 567    2136547895 08-08-18 08-06-18 11-02-18 123 256      62,222  LK  5 55 5463218975 5 3       5,555.22    33        H55
454542 070 567    2136547895 08-08-18 08-06-18 11-02-18 123 256      62,222  LK  5 55 5463218975 5 3       5,555.22    33        H55
454542 070 567    2136547895 08-08-18 08-06-18 11-02-18 123 256      62,222  LK  5 55 5463218975 5 3       5,555.22    33        H55

FILE 2:

 SEO  XRAT CLT     LOAN     A/C   A/C     MIN     MAX    MAX   PENDI  LATE CCH  L/F  PARTLYS  CUR   L/F      L/F     L/F
 NOM  CODE NOM    NOMTER    CODE FACTOR   MON     MON    ROAD   DAYS  MONE POT  L/A  L/F JAC  INT  VAD CD  USED PI  VAD DT
025641 055 123    5144511352 B  .55321   2.55 6531.22                                                 H      #AS
025641 055 123    5144511352 B  .55321   2.55 6531.22                                                 H      #AS
025641 055 123    5144511352 B  .55321   2.55 6531.22                                                 H      #AS

Output:File 1 Output:File 2 sample data


忽略前 3 行

要忽略前 3 行,您可以简单地配置平面文件连接管理器来忽略它们,类似于:

enter image description here


分割文件并删除坏行

1. 配置连接管理器

此外,在平面文件连接管理器中,转到高级选项卡并删除除一列之外的所有列,并将其数据类型更改为DT_STR和最大长度4000.

enter image description here

添加两个连接管理器,每个目标文件一个,您必须仅定义最大长度 = 4000 的一列:

enter image description here

enter image description here

2.配置数据流任务

添加一个数据流任务,并在里面添加一个平面文件源。选择源文件连接管理器。

使用以下表达式添加条件分割:

File1

FINDSTRING([Column 0],"OPENING",1) > 1 || FINDSTRING([Column 0],"DATE",1) > 1 || TOKENCOUNT([Column 0]," ") == 19

File2

FINDSTRING([Column 0],"A/C",1) > 1 || FINDSTRING([Column 0],"FACTOR",1) > 1 || TOKENCOUNT([Column 0]," ") == 10

enter image description here

上面的表达式是根据您在问题中提到的预期输出创建的,我厌倦了在每个标题中搜索唯一关键字并根据空格出现的次数分割数据行。

最后将每个输出映射到目标平面文件组件:

enter image description here

实验

执行结果如下图所示:

enter image description here

enter image description here


更新 1 - 删除重复项

要删除重复项,您必须可以参考以下链接:

  • 如何使用 SSIS 从平面文件中删除重复行?

更新 2 - 仅删除重复的标题 + 用 Tab 替换空格

如果您只需要删除重复的标头,那么您可以分两步执行此操作:

  1. 在每个条件分割输出后添加一个脚本组件以标记不需要的行
  2. 添加条件拆分以根据脚本组件输出过滤行

另外,由于列值不包含空格,可以使用正则表达式将空格替换为单个Tab,以使文件一致。

脚本组件

在脚本组件中添加一个类型为 DT_BOOL 的输出列并将其命名outFlag还添加一个输出列outColumn0类型的DT_STR和长度等于4000并选择Column0作为输入列。

enter image description here

enter image description here

然后在脚本编辑器中编写以下脚本(C#):

首先确保添加正则表达式命名空间

using System.Text.RegularExpressions;

脚本代码

int SEOCount = 0;
int NOMCount = 0;

Regex regex = new Regex("[ ]{2,}", RegexOptions.None);


public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    if (Row.Column0.Trim().StartsWith("SEO"))
    {


        if (SEOCount == 0)
        {

            SEOCount++;
            Row.outFlag = true;

        }
        else
        {

            Row.outFlag = false;

        }



    }
    else if (Row.Column0.Trim().StartsWith("NOM"))
    {

        if (NOMCount == 0)
        {

            NOMCount++;
            Row.outFlag = true;

        }
        else
        {

            Row.outFlag = false;

        }

    }
    else if (Row.Column0.Trim().StartsWith("PAGE"))
    {
        Row.outFlag = false;
    }
    else
    {

        Row.outFlag = true;

    }


    Row.outColumn0 = regex.Replace(Row.Column0.TrimStart(), "\t");
}

有条件分割

在每个脚本组件后面添加条件分割,并使用以下表达式来过滤重复的标头:

[outFlag] == True

并将条件拆分连接到目的地。确保映射outColumn0到目标列。

enter image description here

套餐链接

  • https://www.dropbox.com/s/d936u4xo3mkzns8/Package.dtsx?dl=0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将具有两个标题的混合记录类型固定宽度文件加载到两个单独的文件中 的相关文章

  • 使用存储过程中的 Select 查询将单个变量分配给多行

    我的查询是使用 Select 将单个变量分配给多行 存储过程中的查询 例如 我从 Employee 表中获取 10 个 比如 1 到 10 个员工 ID 声明 id int select id EmpId from Employee sel
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 插入具有只读主键列的表

    我正在使用一个使用 sql server 数据库的应用程序 我试图在表中插入一行 如下所示 该表有一个主键 prodNum 这是自动生成的密钥 当我尝试向表中插入一行时 如下所示 在行中intResult oSglProdTableAdap
  • pymssql 库中的参数绑定是否正确实现?

    我使用 pymsqsql 库从 Python 程序调用极其简单的查询 with self conn cursor as cursor cursor execute select extra id from mytable where id
  • 无法与重定向器建立连接。确保“sql browser”服务正在运行

    所以我尝试这个 sql server 2012 由于这个错误我无法打开任何 ssis 包 无法与重定向器建立连接 确保 sql browser 服务正在运行 我的 Sql 浏览器肯定正在运行 我尝试在本地服务 本地系统和网络下更改它 仍然没
  • 告诉我 SQL Server 全文搜索器疯了,不是我疯了

    我有一些客户具有用户正在搜索的特定地址 123 通用方式 数据库中有 5 行匹配 ResidentialAddress1 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC
  • 将 SQL Server 2008 DB 迁移到 Postgres [重复]

    这个问题在这里已经有答案了 我想将 SQL Server 2008 数据库迁移到 Postgres 有没有一种无痛的方法来做到这一点 是否有任何工具可以扫描架构和存储过程以标记兼容性问题 无痛http dbconvert com conve
  • Powershell - 在不安装 Excel 的情况下将 CSV 转换为 XLS

    我有一台自动生成报告的服务器 报告采用 CSV 格式 我需要能够直接加密文件 无需第三方压缩 无 WinZIP 或 WinRAR 我认为最好的想法是将 CSV 转换为 XLS 然后通过 Powershell 密码保护 XLS 文件 不幸的是
  • SQL-Server:备份集保存现有数据库以外的数据库的备份

    我正在尝试恢复数据库的 SQL Server 备份文件 但它抛出如下错误 备份集保存除现有数据库之外的数据库的备份 我的数据库是SQL Server 2008 备份文件是2005年的 可能是什么问题 我也遇到过这个问题 解决方案 不要创建空
  • 使用 DISTINCT 进行查询需要很长时间

    我正在使用 Microsoft Access 2003 我的项目中的一个表单需要很长时间才能向用户显示 这是适用的查询 SELECT DISTINCT tb KonzeptDaten DFCC tb KonzeptDaten OBD Cod
  • 无法将数据加载到 mvc 4 中的 jTable 中

    好的 我第一次尝试 jTable 我可以加载表 但这对我没有什么好处 因为它不会加载我的任何数据 当我调试程序时 我想要的表中的所有行都存储在我的列表中 因此我很困惑为什么当我运行应用程序时会弹出一个对话框 显示 与服务器通信时发生错误 H
  • 如何在 SQL Server 2012 中选择除一列之外的所有列? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以选择所有列 但只选择我不想选择的特定列 我的意思是有时我会遇到这样的问题 表有数百个字段 而我只需要删除一个字段 我需要重写所有列吗 有什么窍门吗 喜欢select
  • Hive:如何分解嵌入 CSV 文件中的 JSON 列?

    从 CSV 文件 带有标题和管道分隔符 中 我得到了以下两个内容 其中包含一个 JSON 列 内部有一个集合 如下所示 第一种情况 使用没有名称的 JSON 集合 ProductId IngestTime ProductOrders 918
  • 如何使用列表作为pandas数据框中的值?

    我有一个数据框 需要列的子集包含具有多个值的条目 下面是一个带有 运行时 列的数据框 其中包含程序在各种条件下的运行时 df condition a runtimes 1 1 5 2 condition b runtimes 0 5 0 7
  • 使用Python批量编辑csv文件

    我需要编辑几个 csv 文件 实际上 大多数文件都很好 只是最后 第 41 列需要更改 对于该列中特定字符串的每次出现 我需要将其替换为不同的字符串 具体来说 每次出现的 S D 都需要替换为 S 我尝试使用 Python 来完成此操作 但
  • SSIS 文件系统任务错误:分配给变量的值的类型...与当前变量类型不同

    好的 我有一个相对简单的SSIS 包 DTSDesigner100 Visual Studio 2008 版本9 0 30729 4462 QFE NET Framework 3 5 SP1 在包的 SSIS 控制流的末尾是文件系统任务这是
  • 在 SQL Server Management Studio 中格式化 SQL

    在 Visual Studio 和其他 IDE 中 您可以使用键盘快捷键 通过菜单或在键入时自动设置代码格式 我想知道是否有办法在 SQL Server Management Studio 中启用此标准功能 我正在处理一些大型存储过程 这些
  • 如何分块加载 Pickle 文件?

    是否有任何选项可以批量加载 pickle 文件 我知道我们可以将数据保存在 CSV 中并分块加载 但除了 CSV 之外 是否有任何选项可以批量加载 pickle 文件或任何 python 本机文件 基于Python pickle 的文档 h
  • SQL中如何识别字符串的第一个字符是数字还是字符

    我需要将数据中的第一个字符识别为 SQL Server 中的数字或字符 我对此比较陌生 我不知道从哪里开始 但这是我到目前为止所做的事情 我的数据看起来像这样 TypeDep Transfer From 4Z2 Transfer From
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3

随机推荐

  • 编译器对虚函数调用的优化

    说明为什么虚拟分派在运行时发生的最流行的例子是当无法在编译时确定将创建哪个派生类时 例如 Base b rand 2 1 new Derived1 new Derived2 或者当它取决于用户输入时 假设情况并非如此 并且可以在编译时完全确
  • 如何使用实体框架查询外键对象?

    我正在尝试了解 Entity Framework 6 但遇到了一个问题 我已经能够在测试项目中重现该问题 A Movie has a Nameand a Revenue A Revenue has a GrossIncome public
  • “clear”是Javascript中的保留字吗?

    我只是花了很长时间才弄清楚我不应该使用clear 作为Javascript中函数的名称 Hello br
  • Winform另存为

    有谁知道任何文章或网站显示如何在 win 表单中创建 另存为 对话框 我有一个按钮 用户单击并序列化一些数据 然后用户使用此 另存为 框指定他们希望将其保存的位置 你的意思是像SaveFileDialog 来自MSDN示例 稍作修改 usi
  • C++ - 从文件读取到双精度[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我对编程还比较陌生 目前正在学习 C 课程 到目前为止我还没有遇到任何重大问题 我正在制作一个程序 其中 X 数量的评委可以打出 0 0 10 0 双倍 的分数 然后删除最高和最低的
  • 用 NSURLSession 替换 NSURLConnection

    我已经开始设计NetworkCommunication 我有一个设计NSOperation子类创建并管理自己的NSURLConnection The NSOperation子类由一个实例化NetworkManger类将其添加到NSOpera
  • 在 shell 脚本中读取 python 变量?

    我的 python 文件有这两个变量 week date 01 03 16 01 09 16 cust id 12345 我如何将其读入接受这两个变量的 shell 脚本中 我当前的 shell 脚本需要手动编辑 dt 和 id 我想将 p
  • 如何使用express-graphql抛出多个错误?

    在express graphql应用程序中 我有一个userLogin像这样的解析器 const userLogin async id password context info gt if id throw new Error No id
  • MongoDB:$elemMatch和$and在数组内查找对象有什么区别?

    查询运算符的使用有逻辑上的区别吗 and db collection find and array field1 someValue array field2 3 以及投影算子的用法 elemMatch db collection find
  • 在 JavaScript 中生成特定范围内的随机整数

    如何在 JavaScript 中生成两个指定变量之间的随机整数 例如x 4 and y 8将输出任何4 5 6 7 8 上面有一些例子Mozilla 开发者网络 page Returns a random number between mi
  • 如何在编译时填充NSArray?

    在 Objective C 中 如何做类似的事情是 int array 1 2 3 4 纯C语言 我需要用 NSString 填充 NSArray 并尽可能减少开销 代码和 或运行时 不可能像在编译时那样创建数组 那是因为它不是 编译时间常
  • chrome PDF 查看器无法下载文件

    这是我的情况 我有一个运行 PDF 生成器的服务器 当我使用一些参数发出请求时 它会返回一个 PDF 文件 该 PDF 不会存储在运行时生成的服务器中 Everything goes fine I can get the PDF open
  • 尽管我已经安装了该模块,为什么我在 VS Code 中收到“ModuleNotFoundError”?

    我正在尝试使用 VS Code 调试一些 python 代码 我收到以下关于我确定已安装的模块的错误 Exception has occurred ModuleNotFoundError No module named SimpleITK
  • 以编程方式将 TypeScript 字符串编译为 Javascript 字符串

    有没有办法编译一个String在其 JavaScript 中包含 TypeScriptString相等的 例如 在 Coffeescript 以及 LiveScript coco 等 中 它是一个 简化的 单行代码 jsCompiledCo
  • 如何在Makefile中运行子Shell脚本?

    我想执行 Shell 命令 但我不知道如何在 Makefile 中正确执行子 bash 命令 import bd while nc z make ips awk mysql print 2 3306 do sleep 1 done 感谢您的
  • 如何计算两个地理/GPS 坐标之间的角度?

    我有两个 GPS 坐标 例如 纬度 1 经度 1 和 纬度 2 经度 2 谁能帮我找到这两点之间的角度 值应为 0 360 度 取自this以前的帖子 float dy lat2 lat1 float dx cosf M PI 180 la
  • 具有“空类”的 C++ 多重继承内存布局

    我知道多重继承的内存布局没有定义 所以我不应该依赖它 但是 在特殊情况下我可以依赖它吗 也就是说 一个类只有一个 真正的 超类 所有其他都是 空类 即既没有字段也没有虚拟方法的类 即它们只有非虚拟方法 在这种情况下 这些附加类不应向该类的内
  • Codeigniter 文件上传不起作用

    我编写了上传图像文件的代码 但总是显示You did not select a file to upload 这是我的代码 view div class control group div
  • 回发不适用于 aspx 页面作为默认文档

    如果我浏览到http localhost edumatic3 trunk login accesscode Default aspx 我的回发有效 但是 如果我浏览到http localhost edumatic3 trunk login
  • 如何将具有两个标题的混合记录类型固定宽度文件加载到两个单独的文件中

    我的任务是加载格式奇怪的文本文件 该文件还包含不需要的数据 它包含两个背靠背的标头 每个标头的数据在交替行上指定 标题行开始于 我需要读取标头及其相应的数据 并将其转储到某个 Excel 表目标中 让我知道如何使用 SSIS 中的任何转换或