Question

J'ai un schéma de fichier plat qui a un en-tête et des enregistrements détaillés. Cela ressemble à quelque chose comme ça:

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

Je dois ajouter deux lignes vides à la fin du message. À l'heure actuelle, si j'ai plusieurs enregistrements, j'obtiens le résultat suivant:

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***

Ce que je veux voir arriver ressemble à ceci:

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***

Je pourrais créer un composant de pipeline personnalisé à cette fin, mais je me demande s’il existe un moyen plus simple d’obtenir ce dont j'ai besoin?

Était-ce utile?

La solution

Vous devriez pouvoir réaliser ce que vous voulez en utilisant les propriétés de délimiteur du schéma de fichier plat.

Sur la base de votre exemple de fichier, j'ai créé un schéma avec la structure d'enregistrement suivante:

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

Si vous cliquez sur le noeud racine de votre schéma, vous devriez voir une liste de propriétés pour ce noeud racine. Une section de propriétés a l'en-tête 'Fichier plat'. Dans cette section de fichier à plat, les trois premières propriétés que vous pouvez définir sont le délimiteur d’enfant, le type de délimiteur d’enfant et l’ordre des enfants.

C'est ici que vous configurez le schéma pour créer les lignes vides (dans ce cas, CR LF mais vous pouvez définir différentes choses selon vos besoins). Pour votre exemple, définissez les éléments suivants:

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

0x0D 0x0A étant un retour à la ligne, la procédure ci-dessus crée simplement deux lignes vides, infixées entre chaque enfant du noeud racine.

Le < HDRGroup > puis fonctionne pour s’assurer que chaque en-tête et ses lignes sont conservés ensemble. Pour ses paramètres de délimiteur, j’ai défini:

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

Le < HDR > et < LIN > Les enregistrements contiennent alors la définition de schéma réelle de vos lignes de message, délimitée par un astérisque.

Ce schéma fonctionne pour quelque chose qui me semble correspondre à ce que vous avez demandé: ce type de schéma de fichier à plat et la façon dont il analyse un fichier dépendent fortement des petits détails, cependant, comme le type de saut de ligne existant et s'il y a des sauts de ligne à la fin du fichier.

Les principes d'utilisation des délimiteurs seront conservés, vous devrez probablement bricoler les paramètres.

Autres conseils

Pour ceux qui s'en soucient, j'ai finalement cédé et écrit un composant de pipeline personnalisé pour y parvenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top