Newsgroup: it.comp.programmare
Titolo: Elaborazione di file di testo

Salve!
Premetto che ho cominciato da poco ad interessarmi e ad imparare un po'
di programmzione, partendo dal C per i suggerimenti di un amico e di
diversi pareri simili trovati su questo gruppo. Devo dire che rispetto a
quanto sapevo prima - meno di 0 - ho fatto qualche progresso.
Il problema che, perň, vorrei affrontare č questo: vorrei riuscire ad
analizzare e modificare dei file di testo. Il mio obiettivo sarebbe di
fare la conversione fra due codifiche di notazione musicali (entrambe
ascii), anche in modo "grossolano". Ma a questo punto mi trovo un po'
arenato col C - nel senso che richiede un una conoscenza approfondita che
[forse] acquisirň solo fra molto tempo.
Vorrei quindi provare ad orientarmi - contemporaneamente - anche verso la
programmazione della shell di Unix, o qualcosa di simile. Ho sentito
parlare di gawk, sed e altri comandi basilari ma potenti. Avete qualche
suggerimento?
Per essere piů preciso vorrei avere qualche dritta su due domande:
1. Il formato di partenza č qualcosa del tipo:
	partitura { 
	pagine { ....numero_di_pagine x
	pagina { ....
	insieme_di_pentagrammi { ....numero_di_insieme_di_pentagrammi x
	pantagramma {...
	battute { numero_di_battute x
	battuta { ...
	note { numero_di_note x
	nota {..............}
	....
	}
	....
	}
	...
	}
	....}...}.......}......}........}
Anche se non so se č il metodo migliore, vorrei comunque essere in grado
dividere il file in tanti piccoli pezzi (?file) da analizzare
separatamente.
Come si puo' fare in C e con la Bash/awk qualcosa del tipo: 
- trova le parola chiave;
- scrivi un file che va da una parola chiave all'altra, o da una
parentesi graffa aperta alla corrispondente chiusa.
Accetto volentiri esempi di codice - che non assicuro di capire - scusate
se sono pedante :-)
2. Verso che tipo di argomenti posso orientarmi per riuscire ad elaborare
formati di file? C'entrano qualcosa i parser - e cosa sono? E' verosimile
che in un po' di tempo riesca a cavare furi qualcosa, o sono argomenti
molto avanzati? Qualche libro in particolare, magari non troppo teorico?
Qulunque altro parere č ben accetto!
Grazie in anticipo a tutti!!
Guido

 ....}...}.......}......}........}
Un problema del genere si risolve in maniera molto semplice con l'accoppiata
XML/XSL.
XML e' un linguaggio per rappresentare i dati memorizzandoli sotto forma di
file ascii mentre XSL e' un linguaggio per elaborare i dati rappresentati in
XML.
Fatto questo potrai avvalerti di XML/XSL all'interno dei tuoi programmi
siano essi scritti in C o in qualsiasi altro linguaggio di programmazione
risparmiandoti la fatica di scrivere parser o interpreti.
Ciao, Davide

 interpreti.
Se puoi darmi qualche indicazione più precisa te ne sono grato!!
Grazie!
Guido


In linea di principio non ti serve nessun linguaggio di programmazione; mi
spiego meglio.
Una volta imparato XML/XSL sarai in grado di esprimere le tue partiture in
XML e le operazioni di conversione delle partiture in XSL.
A questo punto ti serve uno strumento capace di applicare le trasformazioni
XSL ai dati XML ritornando il risultato sotto forma di un nuovo file XML.
Usando strumenti di questo tipo non ti serve nessun altro linguaggio di
programmazione (per esempio puoi usare msxsl della MS disponibile all'url
http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?ur
l=/msdn-files/027/001/485/msdncompositedoc.xml ma questo e' solo uno dei
tanti).
Se invece vuoi costruire qualcosa di piu' complesso come per esempio un
intero ambiente di gestione ed elaborazione delle partiture allora ti serve
un insieme di funzioni (se vuoi proprio usare il C) o un insieme di classi
(se dovessi passare ad un qualsiasi linguaggio ad oggetti) che ti permettano
manipolare XML e XSL all'interno del tuo programma. Anche in questo caso
puoi scegliere il linguaggio che preferisci, l'importande e' che siano
disponibili le librerie per trattare XML e XSL (magari gratuitamente :)).
Questa seconda strada e' piu' complicata ma con un po' di impegno e'
sicuramente fattibile.
Ciao, Davide