SSIS:如何在特定索引处分隔列

SSIS: How to delimit columns at specific indexes

我有一个格式如下的文本文件:

+------------+-----------------+--------------+-----------+
| Field Name | Starting Column | Field Length | Data Type |
+------------+-----------------+--------------+-----------+
| ID         |               1 |           12 | A         |
| DATE       |              13 |            8 | Date      |
| NAME       |              21 |           80 | A         |
| ADDRESS    |             101 |           12 | A         |
| ...        |             ... |          ... | ...       |
+------------+-----------------+--------------+-----------+

我们可以看到这里"Starting Column"是列开头的索引。因此,结合字段长度的起始列为我们提供了每列的最大大小。

我一直在使用 Fixed Width 选项,它似乎有点管用,但我收到了这些奇怪的黑框,它们似乎正在改变一切。

那两个黑色字符是 Line Feed (LF-ASCII Char 10) 和 Carriage Return (CR- ASCII Char 13) 表示每行结尾的字符。

您会注意到屏幕截图中的每一行都移动了 2 磅。随后的行再移动 2 个点。第 2 行移动 4,第 3 行移动 6,依此类推。由于 SQL 将这些字符计入您的总固定宽度,因此您的行每行累计缩短 2。

要解决问题,请将红色的行尾行向左移动两个字符。您还需要调整最终的列宽以匹配规范。

在尝试了建议的解决方案并执行 more research I found this 线程后,我尝试了平面文件连接管理器中的 ragged right 选项,它解决了我的问题。正如@Jacob H 建议的那样,这两个黑色字符确实是换行符(LF-ASCII 字符 10)和 Carriage Return(CR-ASCII 字符 13)字符。

注意: 我还必须在我命名为 Ignore 的末尾添加一个额外的列。这是因为否则,它不会让我为最后一列添加数据长度信息。

我希望这对以后的其他人有所帮助,因为 ragged right 不是很直观。