6

我们的客户端向我们发送一个平面文件作为输入,然后我们将其转换为 XML 文件,然后再发送到目标系统。

平面文件由多行组成,每行由 LF 或 CRLF 分隔。

如何创建平面文件架构以便 BizTalk 可以解释每一行数据,而不管该行是由 LF (0x0A) 还是 CRLF (0x0D 0x0A) 分隔的?

4

3 回答 3

7

问题解决了。如果其他人想知道,这是解决方案:

由于 LF 和 CRLF 都共享 LF 字符,我将行分隔符设置为 LF (0x0A)。这适用于提取完整记录(当 CRLF 是分隔符时,在末尾有一个额外的 CR 字符的副作用)。

可以使用虚拟字段来吸收 CR 字符或使用映射来消除额外的 CR 字符。

请注意,由于 LF 和 CRLF 分隔符具有不同的长度(分别为 1 和 2 个字符),我必须对架构进行更多更改以确保正确处理两者。

在我的场景中,每条被解析的行记录都包含 8 个位置字段,因此在末尾有一个额外的 CR 字符会导致错误,因为 Biztalk 期望最后一个字段的特定长度不考虑额外的 CR 字符。解决方案是将第 8 个字段(在我的情况下是填充字段)的长度增加 1。但是,为了仍然能够处理 LF 行分隔符,请确保设置了“允许提前终止”标志为真。这样,如果最后一个字段比其分配的长度少 1 个字符(如果不包括 CR 字符),则不会引发错误。

于 2010-04-22T18:41:42.557 回答
4

如果我误解了这个问题,请原谅我……听起来好像每一行都是一条记录,但是有些行以 LF 结尾,而另一些以 CRLF 结尾,您需要将两者作为同一级别的分隔符吗?

我不知道用平面文件模式本身指定多个子分隔符的方法,但一种可能的解决方案是为接收管道的解码阶段编写自定义管道组件,以用 LF 替换 CRLF,然后使用 LF 作为平面文件模式的分隔符。

于 2010-04-22T17:43:56.177 回答
0

一种简单的方法是在模式级别将 LF 设置为分隔符,将 CR 设置为填充字符。如果架构在通过 Visual Studio 测试时有效,但在管道中出错,请翻转中缀/后缀值。无需选择允许提前终止。

于 2018-05-29T01:39:35.943 回答