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:
-
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.
-
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).
-
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.
-
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.