Analisi di un oggetto da più file sorgente

0

Ricevo file zip e hanno come contenuto 8 file diversi, ciascuno con i propri metadati all'interno.

Devo combinare questi file in 1 oggetto contenente determinati metadati. Il grosso problema qui è che non ci saranno sempre 8 file ei metadati che voglio recuperare potrebbero trovarsi in uno di questi file memorizzati in questo modo.

per ora ho creato un metodo factory che avvia il parser corretto per ogni tipo di file e il parser restituisce l'oggetto con i metadati che è stato in grado di analizzare.

Ora quando questo è fatto ho 8 oggetti che devo unire in 1 oggetto risultato con i metadati raccolti da questi risultati.

quindi potrei avere qualcosa di simile

object  Meta1    Meta2    Meta3    Meta4    Meta5
1       A        -        15       RT       -
2       -        -        15       -        HIGH
3       A        -        15       RT       HIGH
4       -        65       -        RT       HIGH

Questo deve avere solo 1 oggetto come output:

Meta1    Meta2    Meta3    Meta4    Meta5
A        65       15       RT       HIGH

Ora mi chiedo quale sarebbe la migliore strategia per risolvere questo problema

  • I miei parser accettano il mio oggetto come parametro, proviamo a mappare i dati e sovrascrivono se presenti e poi restituiscono l'oggetto da passare di nuovo nel successivo parser
  • Analizza tutti gli oggetti e prova a unirli in qualche modo alla fine
  • Un'altra strategia?
posta JMan 21.10.2015 - 11:47
fonte

1 risposta

1

Qui descrivo un lavoro simile che ho fatto. Forse funzionerà per te. Ho avuto 7 diversi formati di file su 2 file diversi.

Quello che devo supporre è che i tuoi meta-dati siano effettivamente chiavi. Altrimenti come è possibile sapere quali record unire?

  • Crea una classe CommonData

    • Una singola classe per contenere qualsiasi record da qualsiasi file.
    • Una proprietà per ogni possibile meta-campo da qualsiasi file in arrivo
    • Una proprietà per contenere l'intero record
    • Come lei chiaramente illustra - Dove i meta-campi sono gli stessi, ce n'è solo uno. OSSIA solo 1 "Meta1", "Meta2"
    • Compila solo i metadati appropriati per un determinato formato di file / record.
    • Un enum che identifica il tipo di record - quale file proviene essenzialmente; o per me, il formato del file.
    • ha un IEqualityComparer
  • CommonDataEqualityComparer

    • Implementa IEqualityComparer
    • Nella mia soluzione i tuoi "metadati" erano le mie chiavi che definivano l'uguaglianza per ogni tipo di record (file) dato.
    • L'oggetto comparatore di uguaglianza viene passato al costruttore CommonData .
  • Un enum per identificare ogni file sorgente o formato file univoco.

  • La fabbrica

    • prende il record non elaborato ed è di tipo - enum valore
    • Factory passa al parser appropriato in base al valore enum
    • Factory restituisce un nuovo oggetto CommonData, con un'implementazione CommonDataEqualityComparer specifica per tipo di record.
  • CommonDataCollection

    • Tra le implementazioni di uguaglianza-comparatore e la proprietà RecordType possiamo trovare, abbinare, ecc. record per ogni tipo di file.
risposta data 05.11.2015 - 05:55
fonte

Leggi altre domande sui tag