Domanda

Ho uno schema di file flat che ha un'intestazione e record di dettaglio. Sembra qualcosa del genere:

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

Devo aggiungere due righe vuote alla fine del messaggio. In questo momento, se ho più record ottengo il seguente output:

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

Quello che voglio vedere accadere è qualcosa del genere:

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

Potrei creare un componente della pipeline personalizzato per farlo, ma mi chiedo se esiste un modo più semplice per ottenere ciò di cui ho bisogno?

È stato utile?

Soluzione

Dovresti essere in grado di ottenere ciò che desideri utilizzando le proprietà Delimitatore dello schema di file flat.

Sulla base del tuo file di esempio ho creato uno schema con la seguente struttura di record:

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

Se fai clic sul nodo principale del tuo schema, dovresti visualizzare un elenco di proprietà per questo nodo principale. Una sezione delle proprietà ha l'intestazione "File flat". In questa sezione del file flat le prime tre proprietà che è possibile impostare sono Delimitatore figlio, Tipo delimitatore figlio e Ordine figlio.

Qui è dove configuri lo schema per creare le righe vuote (in questo caso CR LF ma puoi impostare cose diverse di cui hai bisogno) Per il tuo esempio ho impostato quanto segue:

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

0x0D 0x0A è un avanzamento riga di ritorno a capo, quindi quanto sopra crea semplicemente due righe vuote, fissate tra ogni figlio del nodo radice.

Il < HDRGroup > quindi funziona per assicurarsi che ogni intestazione e le sue linee siano tenute insieme. Per le sue impostazioni del delimitatore ho impostato:

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

Il < HDR > e < LIN > i record contengono quindi la definizione di schema effettiva per le righe dei messaggi, delimitata da un asterisco.

Questo schema funziona per qualcosa che mi assomiglia a quello che mi hai chiesto: questo tipo di schema flatfile e il modo in cui analizza un file dipende fortemente dai piccoli dettagli, tuttavia, come il tipo di interruzioni di riga che ci sono e se ci sono interruzioni di riga alla fine del file.

I principi dell'uso dei delimitatori rimarranno, probabilmente troverai che dovrai armeggiare con le impostazioni.

Altri suggerimenti

Per chiunque si preoccupi, ho finalmente ceduto e scritto un componente della pipeline personalizzato per raggiungere questo obiettivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top