Strutturazione di un file di input [chiuso]

3

Sono in procinto di strutturare un piccolo programma per eseguire alcune analisi idrauliche del flusso dei tubi. Come immagino questo, il programma leggerà un file di input, memorizzerà i parametri di input in modo appropriato, opererà su di essi e alla fine produrrà risultati. Sono alle prese con come strutturare il file di input in modo sano; cioè, in un modo in cui un essere umano può scriverlo facilmente e una macchina può analizzarlo facilmente. Un file di input di esempio reso disponibile per un programma simile è solo un flusso di numeri separati da virgola che non hanno molto senso da soli, quindi è lo scenario che sto tentando di evitare.

Anche se sto dando i dettagli del mio particolare problema, sono più interessato alle strategie generali di strutturazione dei file di input. La mia migliore scommessa è un flusso di valori separati da virgola? Sarebbe meglio usare un qualche tipo di chiave: la struttura del valore? Non ne so molto, quindi qualsiasi aiuto probabilmente mi metterà in una pista migliore di quanto non sia ora.

    
posta Ricardo 16.10.2013 - 04:23
fonte

4 risposte

6

Dai un'occhiata a YAML . È un linguaggio di serializzazione dei dati progettato per essere leggibile dall'uomo. Ecco un esempio dal link:

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046

Ci sono parser disponibili per tutte le lingue ufficiali.

    
risposta data 16.10.2013 - 04:30
fonte
4

I am struggling with how to structure the input file in a sane way; that is, in a way that a human can write it easily and a machine can parse it easily.

Dipende molto dalla complessità e dalla quantità di informazioni che è necessario inserire. Per complessità intendo le relazioni tra frammenti di informazioni di pezzi: una serie temporale che riporta i risultati di una misura in punti temporali diversi non ha praticamente alcuna complessità, anche se è grande in megabyte, mentre descrive l'allocazione di stanze e orari a lezioni in un l'università ha una complessità più grande, perché ci sono molti vincoli (solo una lezione alla volta in una data stanza, un professore non può tenere conferenze simultaneamente in più posti, e così via).

Pensa a tutto ciò che vuoi fare con l'input del tuo programma:

  1. Prepara l'input. ovviamente l'input deve essere preparato. È più semplice se il formato di input segue un'organizzazione simile al formato di output della metodologia (non necessariamente un programma per computer) utilizzata per preparare i dati. Quindi, è facile riprendere da un'interruzione durante la preparazione dell'input.

  2. Controlla l'input. se il tuo programma fornisce risultati discutibili, ti consigliamo di rivedere l'input. È quindi importante che il formato utilizzato sia chiaro e metta le informazioni rilevanti in primo piano. (I dati complessi probabilmente richiederanno comunque un riesame del programma di esplorazione).

  3. Correggi l'input. Una volta individuato un difetto, lo vuoi correggere. Se i tuoi dati sono complessi, una correzione non sarà limitata a una posizione specifica del file ma avrà ripercussioni in altri luoghi. Inoltre, la correzione potrebbe richiedere un peer-review o il check-in di un sistema di controllo della versione.

  4. Canonizza l'input. Se i tuoi dati sono complessi, potrebbero esserci molti modi diversi per inserire i dati, e potresti dover essere in grado di cambiare da uno all'altro o per rispondere alla domanda semplice ma difficile: questi due file di input rappresentano gli stessi dati?

Se hai pochi dati, fino a due o tre schermate di testo, un formato di valore chiave come JSON, YAML o Property list può essere adatto. Oltre ad avere un'implementazione gratuita per la tua lingua preferita, alcuni hanno anche editor visuali (ad esempio, l'Editor di elenchi di proprietà in Mac OS X può modificare gli elenchi di proprietà, esistono programmi simili per JSON e probabilmente altri). Ora, se il set di dati è abbastanza piccolo, 1. 2. 3. e 4. rimarrà un evento praticabile se la rappresentazione è maldestra.

Consideriamo ora il caso di un dato complesso: a seconda del valore che 1., 2., 3. e 4. per te, potresti voler progettare un piccolo linguaggio dichiarativo per rappresentarlo. Questo può essere un compito molto complesso, per il quale puoi utilizzare lex/yacc o i loro avatar nel tuo linguaggio di programmazione preferito.

Se non puoi permetterti di concepire una lingua specializzata, puoi contare su SGML / XML che può catturare una certa struttura dei tuoi dati. Un'alternativa interessante può essere usare un semplice formato di dizionario e scrivere un programma ausiliario per preparare l'input del tuo programma principale.

    
risposta data 17.10.2013 - 21:38
fonte
2

Vorrei usare i file XML per questo, anche con un schema xml si imposta la struttura consentita del file di input. Ciò assicurerebbe che tutti coloro che creano file di input abbiano lo stesso formato esatto (gli umani sono umani), inoltre garantisce che il programma che analizza il file di input ottenga esattamente quello che si aspetta

L'analisi XML supporta tutti i linguaggi di programmazione, è efficiente ed è facilmente leggibile dagli esseri umani.

    
risposta data 16.10.2013 - 07:38
fonte
1

Raccomando JSON, ma qui ci sono tre buone opzioni,

XML - eXtended Markup Language - usato sul web, SOAP, preferito dai programmatori Java ovunque, può essere validato, trasformato, ecc. gli elementi di dati sono etichettati usando ... i tag di apertura / chiusura e i tag possono avere attributi. ma considerato prolisso / prolisso da molti.

link

JSON - Notazione oggetti JavasScript - fondamentalmente 'quasi' un oggetto javascript. gli elementi di dati sono (solitamente) contrassegnati con nomi, i tag aperti / chiusi sono semplici parentesi

link

YAML - ancora un altro linguaggio di markup e condivide la comunanza con JSON. Spesso espresso come record di più righe

link

CSV o DSV - File di valori separati da virgola (o delimitatore) - lo hai già trovato e lo trovi inadeguato. Ma estremamente popolare.

    
risposta data 17.10.2013 - 19:28
fonte

Leggi altre domande sui tag