Pergunta

Eu tenho um esquema de arquivo simples que tem um cabeçalho e detalhe registros. Parece algo como isto:

HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***

Eu preciso acrescentar duas linhas em branco no final da mensagem. Agora, se eu tiver vários registros eu recebo o seguinte resultado:

HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***
HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***

O que eu quero ver acontecer é algo como isto:

HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***


HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***

Eu poderia construir um componente de pipeline personalizado para fazer isso, mas eu estou querendo saber se existe uma maneira mais simples de conseguir o que eu preciso?

Foi útil?

Solução

Você deve ser capaz de realizar o que deseja usando as propriedades delimitador do esquema de arquivo plano.

Com base no seu arquivo de exemplo que eu criei um esquema com a seguinte estrutura de registro:

<Schema>    
  <Root>    
    <HDRGroup>    
      <HDR>    
      <LIN>    

Se você clicar no nó raiz do seu esquema que você deve ver uma lista de propriedades para este nó raiz. uma seção de propriedades tem o cabeçalho 'Flat File'. Nesta seção arquivo simples as três primeiras propriedades que você pode definir são Criança delimitador, Criança Tipo delimitador e Child Ordem.

Este é onde você configura o esquema para criar as linhas em branco (neste caso CR LF mas você pode definir as coisas diferentes que você precisa) para o exemplo que eu defina o seguinte:

Child Delimiter: 0x0D 0x0A 0x0D 0x0A    
Child Delimiter Type: Hexadecimal    
Child Order: Infix

0x0D 0x0A é uma linha de alimentação de retorno do carro, de modo que o acima simplesmente cria duas linhas em branco, infixada entre cada filho do nó de raiz.

O funções, em seguida, para se certificar de que cada cabeçalho e suas linhas são mantidos juntos. Para suas configurações delimitadores I definido:

Child Delimiter: 0x0D 0x0A    
Child Delimiter Type: Hexadecimal    
Child Order: Postfix

O e registros então conter a definição do esquema real para suas linhas de mensagens, delimitado com um asterisco.

Esse esquema funciona para algo que parece-me que o que você pediu - este tipo de esquema flatfile e como ele analisa um arquivo é altamente dependente dos pequenos detalhes, no entanto, tais como o tipo de quebras de linha existem e se houver quebras de linha no final do arquivo.

Os Princples de usar os delimitadores vai ficar, você provavelmente vai achar que você precisa para mexer com as configurações.

Outras dicas

Para qualquer um que se importa, eu finalmente cedeu e escreveu um componente de tubagem personalizado para fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top