Domanda

C'è un formato standard o aperta che può essere utilizzato per descrivere la formattazione di un file flat. La mia azienda integra molti formati di file diversi clienti. Con un file XML è facile da ottenere o creare un XSD per descrivere il formato di file XML. Sto cercando qualcosa di simile per descrivere un formato di file flat (larghezza fissa, ecc delimitato). Stylus Studio utilizza un formato proprietario .conv per fare questo. Questo formato .conv può essere utilizzato in fase di esecuzione per trasformare un file flat arbitrario in un file XML. Mi stavo chiedendo se ci fosse un metodo più aperto o al buon based per fare la stessa cosa.

sto cercando un metodo per descrivere una varietà di formati di file flat se sono a larghezza fissa o delimitati, quindi CSV non è una risposta a questa domanda.

È stato utile?

Soluzione

XFlat: http://www.infoloom.com/gcaconfs/WEB/philadelphia99/ lyons.HTM # N29 http://www.unidex.com/overview.htm

Per i casi complessi (ad esempio log file) si può considerare un parser lessicale.

Altri suggerimenti

Informazioni su selezionando formati di file flat esistenti: Non è il formato valori (CSV) separato da virgole. O, più in generale, DSV . Ma questi non sono "a larghezza fissa", poiché c'è un carattere delimitatore (ad esempio una virgola) che separa le singole celle. Si noti che anche se CSV è standardizzato , non tutti aderisce allo standard. Inoltre, CSV può essere quello di semplice per i vostri scopi, in quanto non consente una ricca struttura del documento.

A questo proposito, il standardizzata e solo leggermente più complessa (ma quindi più utile) formati JSON e YAML sono una scelta migliore. Entrambi sono supportati fuori dalla scatola da un sacco di lingue.

La cosa migliore è quella di avere uno sguardo a tutte le lingue elencate come non binario a questa panoramica e quindi determinare quale funziona meglio per voi.

Informazioni su che descrive formati di file flat: Questo potrebbe essere molto facile o difficile, a seconda del formato. Anche se nella maggior parte dei casi esistono soluzioni più semplici, in un modo che funziona, in generale, è quello di visualizzare il formato di file come formale la grammatica , e scrivere la lexer / parser per esso. Ma lo ammetto, che è abbastanza macchinari pesanti.

Se siete fortunati, un paio di href="http://en.wikipedia.org/wiki/Regular_expression" può fare il trucco. La maggior parte dei formati non si prestano per che comunque Se hai intenzione di scrivere un lexer / parser te stesso, posso consigliare PLY (Python Lex-Yacc). Ma molte altre soluzioni esistono, in molte lingue diverse, un sacco di loro più conveniente rispetto alla vecchia scuola Lex & Yacc . Per di più, vedi Che generatore di parser mi consiglia?


: Sì, questo può essere un eufemismo
. : descrive Anche correttamente il formato indirizzo e-mail non è banale.

COBOL (che vi piaccia o no) ha un formato standard per descrivere i formati di registrazione a larghezza fissa in file.

formati di altri file, tuttavia, sono po 'più semplice da descrivere. Un file CSV, ad esempio, è solo una lista di stringhe. Spesso la prima riga di un file CSV è i nomi delle colonne -. Questa è la descrizione

Ci sono esempi di utilizzo di JSON per formulare i metadati per i file di testo. Questo può essere applicato a file JSON, file CSV e file di formato fisso.

http : //www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.html

Questa è IBM sMash (Project Zero) utilizzando JSON per codificare i metadati. Si può facilmente applicare questo al file flat.

Alla fine della giornata, si avrà probabilmente per definire il proprio standard di file che si rivolge specificamente alle vostre esigenze di storage. Quello che suggerisco è utilizzando XML, YAML o JSON come contenitore interno per tutti i tipi di file che si ricevono. In cima a questo, si dovrà implementare una logica in più di validazione per mantenere meta-dati, quali le dimensioni delle colonne dei file a larghezza fissa (per l'importazione e l'esportazione da a larghezza fissa). In alternativa, è possibile memorizzare o collegare un set di metadati per ciascun file di convertire al formato interno.

Ci può essere uno standard di là fuori, ma è troppo difficile creare 'taglia unica' soluzioni per questi problemi. Ci sono entità strumenti di gestione del rapporto di là fuori (Talend, altri) che rendono la creazione di questi mapping più facile, ma sarà ancora bisogno di spendere un sacco di tempo mantenendo le definizioni di formato di file e le regole.

Per quanto di far rispettare la larghezza della colonna, XML potrebbe essere la soluzione migliore, come si può descrivere i formati utilizzando schemi XML (con la restrizione di lunghezza). Per YAML o JSON, potrebbe essere necessario scrivere il proprio logica per questo, anche se sono sicuro che qualcun altro ha messo a punto una soluzione.

vs virgole file di testo delimitato per ulteriori di riferimento.

Non so se c'è qualsiasi formato standard o aperta per descrivere un formato di file flat. Ma un'industria ha fatto questo: il settore bancario. Le istituzioni finanziarie sono infatti comunicano usando il messaggio standardizzato su una rete dedicata chiamato SWIFT . messaggi SWIFT erano in origine posizionale (prima SWIFTML, la versione XMLified). Non so se è una buona idea, come è un pò oscuro, ma forse si poteva guardare il SWIFT formattazione , può ti dà alcune idee.

Dopo aver detto questo, check out Verme piatto , un file di parser piatta umili. L'ho usato per analizzare il file posizionale e / o CSV e mi è piaciuto il suo formato descrittore XML. Potrebbe essere un suggerimento migliore di SWIFT:)

CSV

  

CSV è un formato di dati delimitato con campi / colonne separate dal carattere virgola e record / righe separati da capo. I campi che contengono un carattere speciale (virgola, a capo, o virgolette), devono essere racchiusi tra virgolette. Tuttavia, se una riga contiene una singola voce, che è la stringa vuota, può essere racchiuso tra doppi apici. Se il valore di un campo contiene un carattere doppio apice è sfuggito ponendo un altro personaggio virgolette accanto ad essa. Il formato del file CSV non richiede una codifica specifica dei caratteri, l'ordine di byte, o in formato terminatore di linea.


La voce CSV su wikipedia mi ha permesso di trovare un di formati di dati di serializzazione cioè più o meno quello che hai chiesto.

L'unica cosa simile che conosco è Hachoir, che attualmente può analizzare 70 formati di file:

http://bitbucket.org/haypo/hachoir/wiki/Home

Non sono sicuro se conta davvero come un linguaggio dichiarativo, dal momento che è basata plug-parser, ma sembra funzionare, ed è estensibile, che può soddisfare le vostre esigenze più che bene.

Per inciso, ci sono interessanti, FORMATI flat-file estensibili standardizzati, come IFF (Interchange File Format).

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