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

SSIS:如何在特定索引处分隔列,ssis,sql-server-2016,Ssis,Sql Server 2016,我有一个文本文件,其格式如下: +------------+-----------------+--------------+-----------+ | Field Name | Starting Column | Field Length | Data Type | +------------+-----------------+--------------+-----------+ | ID | 1 | 12 | A

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

+------------+-----------------+--------------+-----------+
| Field Name | Starting Column | Field Length | Data Type |
+------------+-----------------+--------------+-----------+
| ID         |               1 |           12 | A         |
| DATE       |              13 |            8 | Date      |
| NAME       |              21 |           80 | A         |
| ADDRESS    |             101 |           12 | A         |
| ...        |             ... |          ... | ...       |
+------------+-----------------+--------------+-----------+
我们可以在这里看到,“起始列”是列开头的索引。因此,起始列与字段长度的组合为我们提供了每个列应具有的最大大小

我一直在使用
固定宽度
选项,这似乎有点奏效,但我得到了这些奇怪的黑匣子,它们似乎在改变一切


这两个黑色字符是换行符(LF-ASCII字符10)和回车符(CR-ASCII字符13),表示每行的结尾

您会注意到屏幕截图中的每一行都移动了2个点。随后的行将再移动2个点。第2行移位为4,第3行移位为6,等等。当SQL将这些字符计算到总的固定宽度时,每行的长度将累计缩短2


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

在尝试建议的解决方案并执行“我找到了线程”后,我尝试了平面文件连接管理器中的“向右参差不齐”选项,该选项解决了我的问题。正如@jacobh建议的那样,这两个黑色字符确实是换行符(LF-ASCII字符10)和回车符(CR-ASCII字符13)

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


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

使用文本编辑器打开文件时,您会看到什么字符?文件保存为什么文本编码?许多Microsoft产品不支持UTF-8,这是几乎所有常见非Microsoft系统的标准。如果看不到您的原始文本文件,我们真的无法帮助您做到这一点。这些黑框是您行末尾的LF和CR字符。只需将红线移动2个空格,以容纳这些字符,就可以解决问题。我自己用一个巨大的固定宽度源文件(数百列,数千个字符)完成了同样的工作。我感觉到你的痛苦。。。