2010-04-22 13 views
6

Nuestro cliente nos envía un archivo plano como entrada, que luego tomamos y convertimos a un archivo XML antes de enviarlo al sistema de destino.BizTalk Flat File Schema - cómo aceptar un LF o CRLF como el delimitador de línea

El archivo plano consta de varias líneas, cada línea está delimitada por LF o CRLF.

¿Cómo creo un esquema de archivo plano para que BizTalk pueda interpretar cada línea de datos independientemente de si la línea fue delimitada por LF (0x0A) o CRLF (0x0D 0x0A)?

Respuesta

6

Problema resuelto. Aquí está la solución en caso de que alguien más se pregunte:

Dado que LF y CRLF comparten el carácter LF, configuré el delimitador de línea como LF (0x0A). Esto funciona correctamente para extraer los registros completos (con el efecto secundario de tener un carácter CR adicional al final cuando CRLF es el delimitador).

Uno puede deshacerse del carácter CR extra usando un campo ficticio para absorber el carácter CR o usando un mapa.

Tenga en cuenta que dado que los delimitadores LF y CRLF tienen longitudes diferentes (1 y 2 caracteres respectivamente), tuve que hacer un par de cambios más en el esquema para garantizar que ambos se manejen correctamente.

En mi escenario, cada registro de línea que se analiza contiene 8 campos de posición, por lo que tener un carácter CR extra al final resultó en un error debido a Biztalk esperando una cierta longitud para el último campo que no tiene en cuenta el adicional Personaje CR La solución es aumentar la longitud del octavo campo (que es un campo de relleno en mi caso) en 1. Sin embargo, para poder manejar los delimitadores de líneas LF, asegúrese de configurar el 'Permitir terminación anticipada'. marca a VERDADERO. De esta forma, no se generan errores si el último campo tiene 1 carácter menos que su longitud asignada (si el carácter CR no se incluyó).

+0

¿No significaría esto que también aceptaría registros mal formados? –

4

Perdónenme si malinterpreto la pregunta ... parece que cada línea es un registro, pero algunas líneas terminan en LF y otras en CRLF, y ¿necesita tener ambas como delimitador en el mismo nivel?

No conozco una manera de especificar más de un delimitador hijo con el esquema de archivo plano por sí mismo, pero una posible solución podría ser escribir un componente de canalización personalizado para la etapa de decodificación de su canal de recepción para reemplazar el CRLF con LF, luego use LF como el delimitador en el esquema de archivo plano.

+0

Gracias BiztalkMama. Su respuesta es definitivamente una opción, pero quería una forma de hacerlo utilizando el Editor de Esquemas en lugar de un Componente de Decodificación personalizado. Afortunadamente, descubrí que es posible después de todo. Aunque aprecio tu ayuda. – FullOfQuestions

Cuestiones relacionadas