【问题标题】:SSIS - How to prepare flat file source for fixed width format?SSIS - 如何为固定宽度格式准备平面文件源?
【发布时间】:2013-11-15 08:40:26
【问题描述】:

我有如下结构的文本文件:

    123456789 , 1111111111 , 2222222222222 , xxxxxxx , zzzzzzz ,
    987654321 , 22222222222222 , 3333333333333333 , hhhhhhhhh , bbbbbbbbb ,
...

如您所见,分隔符在第二行和下面的行中不在同一位置。

我需要使用平面文件作为源,并使用固定宽度格式。

对于大文件 (>1GB),如何通过分隔符将列格式化为固定宽度?

预览应如下所示(同一列中的分隔符):

123456789 , 1111111111     , 2222222222222    , xxxxxxx   , zzzzzzz   ,
987654321 , 22222222222222 , 3333333333333333 , hhhhhhhhh , bbbbbbbbb ,

使用 Notepad++,我可以使用 TestFX -> TestFX Edit -> Line up multiple lines by (,) 将文件修改为固定宽度。但是 Notepad++ 不能处理大文件。

请帮忙。

【问题讨论】:

  • 这不是一个固定宽度的文件。这是一个分隔文件,其中分隔符似乎是space comma space
  • 您是在导入还是导出文件?
  • @billinkc 我想获取 column1,delimiter(string (1)),column2, delimiter(string(1)),... 然后将列从源文件映射到 db 列。跨度>
  • @HLGEM 我正在​​从文件导入数据库。

标签: ssis large-files flat-file fixed-width


【解决方案1】:

为什么不使用分隔格式呢?由于您的文件显然不是固定宽度。

您可以使用 ',' 定界符,然后将空格剪掉或使用 ' , ' 定界符

我个人认为第一个不太可能在以后引起问题。

【讨论】:

  • 当我对平面文件使用分隔格式并尝试将其转换为 int 例如 (DT_I4) 或浮点 (DT_R8) 时,我在派生列中出现转换错误...这是为什么?并且其他数据行之间没有区别。但是当我使用固定宽度时,我会明确说明输入和输出的列长度。
  • 您不能使用固定宽度,因为您没有固定宽度的文件。至于另一个错误,您可能需要将所有内容放入一个全是 varchar 的临时表中并查看数据。当数据来自设计不佳的数据库时,听起来好像某些字段应该全是数字并不是很常见的情况。您可能需要编写一些数据清理例程。永远不要将数据直接从文件导入生产表。
  • @Olinad 这样您就可以获取数据但在派生列中出现错误,请尝试解决此问题。在你的文件中你有字符串......所以如果你将它们转换为 int 或 float 你会得到错误......
  • 最后,我使用了分隔格式,令人惊讶的是,一切都很顺利。谢谢大家。
猜你喜欢
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多