[successivo] [precedente] [inizio] [fine] [indice generale]
Il punto di forza dei programmi non interattivi è quello di poter essere facilmente utilizzati come anelli di una catena di strumenti o processi; la connessione delle varie parti può essere gestita semplicemente mediante generiche pipeline, o addirittura mediante specifici programmi «wrapper», progettati per uno scopo preciso, che costruiscano programmaticamente l'input da far elaborare.
Un esempio interessante è il programma njgraph.pl di Neil Spring. Si tratta di un piccolo sorgente in Perl che in pratica realizza una specie di programma frontale per Jgraph: esso legge dallo standard input una singola serie di dati da rappresentare graficamente, e dopo averli opportunamente passati a Jgraph per l'elaborazione invoca GV, a meno che lo standard output non venga rediretto. Il programma njgraph.pl riconosce altresì gli attributi marktype, linetype e color (e relativi valori) facoltativamente presenti sulla riga di comando, e li posiziona opportunamente all'interno del sorgente Jgraph prima dell'elaborazione.
La figura 12.1 illustra qualche esempio di invocazione del programma njgraph.pl, mentre la figura 12.2 ne illustra l'output.
|
|
Pochi giorni dopo la pubblicazione del presente articolo, ho ricevuto un messaggio di posta elettronica da parte di un lettore. Ecco il frammento rilevante:
|
Ad ulteriore conferma della versatilità degli strumenti come Jgraph, ho realizzato in poco più di mezz'ora(1) il programma data2multijgr.sh (il programma dovrebbe essere disponibile qui: <allegati/xs/data2multijgr_sh>). Il programma, pur essendo molto rudimentale, risolve il problema del lettore. Eccone la sintassi:
data2multijgr.sh [opzione] ... |
ed eccone un utilizzo tipico:
$
cat data
[Invio]
18 4 15 0 2 0 16 3 7 11 12 0 1 9 5 19 8 19 0 13 14 0 19 9 12 3 11 3 10 18 17 0 14 4 1 16 5 9 11 12 1 3 4 14 13 1 13 13 1 5 6 7 18 17 16 10 13 19 13 15 17 3 15 3 7 8 19 4 18 3 16 11 6 13 5 11 14 19 4 15 16 2 2 14 12 10 5 17 9 10 12 18 5 19 13 13 8 13 17 18 8 6 9 14 19 14 6 13 5 2 1 2 17 15 8 1 18 13 18 19 4 2 18 9 13 3 14 1 8 4 11 16 2 0 11 13 7 9 18 4 11 19 18 0 7 7 1 5 12 11 16 8 5 6 18 19 10 4 12 18 0 4 15 2 16 6 15 15 15 6 0 18 5 10 11 4 17 4 1 2 16 18 10 1 4 0 0 14 5 5 13 17 9 8 0 17 6 7 13 13 |
$
cat data | data2multijgr.sh -d 15 -t "Grafico multiplo" -X 40 -x -10 > multi.jgr
[Invio]
$
cat multi.jgr
[Invio]
newgraph title fontsize 50 : Grafico multiplo (1/14) xaxis min -10 max 40 size 5 hash_labels fontsize 30 yaxis min -1 max 15 size 8 hash_labels fontsize 30 newcurve marktype ybar cfill 1 0 0 marksize 1 0.75 pts 18 0 4 1 15 2 0 3 2 4 0 5 16 6 3 7 7 8 11 9 12 10 0 11 1 12 9 13 5 14 newpage newgraph title fontsize 50 : Grafico multiplo (2/14) xaxis min -10 max 40 size 5 hash_labels fontsize 30 yaxis min 14 max 30 size 8 hash_labels fontsize 30 newcurve marktype ybar cfill 1 0 0 marksize 1 0.75 pts 19 15 8 16 19 17 0 18 13 19 14 20 0 21 19 22 9 23 12 24 3 25 11 26 3 27 10 28 18 29 newpage newgraph title fontsize 50 : Grafico multiplo (3/14) xaxis min -10 max 40 size 5 hash_labels fontsize 30 yaxis min 29 max 45 size 8 hash_labels fontsize 30 newcurve marktype ybar cfill 1 0 0 marksize 1 0.75 pts 17 30 0 31 14 32 4 33 1 34 16 35 5 36 9 37 11 38 12 39 1 40 3 41 4 42 14 43 13 44 newpage newgraph ... |
$
cat multi.jgr | jgraph -P > multi.ps
[Invio]
$
Il file multi.ps
che così si ottiene è un file PostScript composto da più pagine ciascuna contenente un grafico relativo a un segmento specifico dei dati (la figura 12.6 riporta per brevità solamente le prime tre pagine).
|
La tabella 12.7 riassume le opzioni del programma. Chiunque fosse interessato è invitato adattare il programma data2multijgr.sh alle proprie esigenze, o aggiugervi delle caratteristiche più sofisticate (magari inviando una copia del programma modificato al sottoscritto).
Informatica per sopravvivere 2006.02.18 --- Copyright © 2004-2006 Massimo Piai -- <pxam67 (ad) virgilio·it>
1) A dire il vero il programma è stato successivamente limato, ma il prototipo funzionante era pronto dopo il tempo indicato (NdA).
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome utilizzo_programmatico.html