Avvio rapido

Questa sezione riassume rapidamente i fondamenti per realizzare un programma Proteus; ulteriori informazioni sugli argomenti citati si trovano nelle successive sezioni.

A livello elementare, Proteus viene impiegato come processore di testo; questo significa che dovete avere un file di testo in un qualche formato (Dos, Macintosh™, Unix™) da convertire in qualche altro formato, o da cui volete estrarre informazioni.

Di norma, il vostro file consisterà in una serie di linee accomunate da alcune caratteristiche.

Considereremo in questo caso un esempio in cui ogni riga consiste in tre campi di lunghezza fissa:

cognome (30 caratteri) nome (20 caratteri) numero di telefono (12 caratteri)

Per poter spiegare a Proteus come volete che il vostro file dati sia elaborato dovete scrivere un programma.
Un programma Proteus è un file di testo, in qualunque formato, contenente tutte le operazioni da effettuare su ciascuna riga. Per scriverlo potete utilizzare un qualsiasi editor di testo o anche un word processor, purché poi salviate il vostro lavoro in formato testo (comunemente indicato anche come ASCII); si raccomanda di mantenere l'estensione '.prt' ai file di programmi per Proteus.

La sintassi di un programma è piuttosto elastica, nel senso che non vi sono particolari formalità da seguire per quanto riguarda spazi, indentazioni e maiuscole/minuscole.

Quando il programma viene eseguito, vi sono alcuni identificatori predefiniti fondamentali che assumono determinati valori in base ai dati in ingresso; due identificatori importanti sono L ed N.

L assume il valore dell'ultima riga letta dal file sorgente, mentre N indica il numero della riga corrispondente ad L nel medesimo file.

Supponiamo di voler estrarre dal nostro file di esempio tutti i cognomi (primo campo, di lunghezza fissa pari a 30 caratteri); un programma per fare questo è il seguente:

cCognome = LEFT(L, 30)
PRINTLN cCognome

Analizziamolo in dettaglio.

La prima riga (o istruzione) è detta istruzione di assegnamento; essa assegna all'identificatore cCognome un determinato valore, che consiste nella parte a destra del segno di uguale (tale simbolo può anche essere omesso, ma consigliamo di mantenerlo per maggiore chiarezza). Ciò che si trova a destra è detto espressione; nella fattispecie, consiste nell'invocazione di una funzione di libreria predefinita di Proteus (LEFT), che estrae i primi n caratteri di una stringa, cioè la sua parte sinistra (LEFT in inglese significa appunto sinistra). Notiamo che per invocare questa funzione non facciamo altro che scrivere il suo nome, seguito immediatamente dalla parentesi tonda aperta, da alcuni dati (detti parametri) separati da virgole (',') ed infine da una parentesi tonda chiusa. Ogni funzione viene chiamata in questo modo; il numero di parametri e la loro interpretazione dipendono dalla funzione invocata. La funzione LEFT prende per l'appunto due parametri: la stringa da elaborare ed il numero di caratteri che ci interessano.
Il significato di questa istruzione è: assegna a cCognome i primi 30 caratteri della stringa corrispondente all'identificatore L. Come abbiamo visto, L è un identificatore predefinito che assume come valore il contenuto dell'ultima riga letta dal file in ingresso, pertanto per ogni riga che viene letta questa istruzione estrae esattamente quanto cercato, cioé il cognome. L'identificatore cCognome non è predefinito; esso rappresenta un nome di variabile, cioé un "contenitore" in cui possiamo memorizzare dati di tipo stringa o numerici. Nel momento stesso in cui noi citiamo un identificatore non predefinito, Proteus crea spazio per esso ed imposta a "" (= 0 = 0.0) il suo valore; successivamente, se ne modifichiamo il valore esso mantiene tale valore finché non viene esplicitamente cambiato.

La seconda istruzione è l'istruzione di output fondamentale di Proteus; essa scrive sul file di uscita il valore dell'espressione che segue il nome del metodo (PRINTLN, in questo caso) e va a capo; i metodi sono strutture di controllo e particolari funzioni che non ritornano alcun valore; il loro numero è abbastanza esiguo, al contrario delle funzioni di libreria;  PRINTLN è un metodo.

L'espressione passata a PRINTLN è l'identificatore cCognome, che abbiamo appena posto uguale al cognome per la riga corrente; ne risulta che, per ogni riga letta, queste due istruzioni comportano la scrittura sul file di uscita del cognome presente nel file dati. Poiché non vi sono altre istruzioni, subito dopo aver scritto il contenuto di cCognome Proteus legge un'altra riga dal file in ingresso e ripete dall'inizio il programma.

Quando non vi sono altre righe disponibili, Proteus arresta l'esecuzione, chiude tutti i file e restituisce il controllo all'utente.

Questo programma si può scrivere anche in maniera più compatta, così:

PRINTLN LEFT(L, 30)

In questo modo otteniamo maggiore efficienza in quanto evitiamo l'utilizzo di una variabile e usiamo una istruzione in meno, tuttavia il primo esempio è più chiaro; bisogna decidere caso per caso se è necessaria la massima chiarezza (ad esempio se il programma deve essere successivamente modificato da altre persone) oppure la massima efficienza (qualora il programma sia eseguito con grande frequenza).

Modifichiamo un po' il nostro esempio aggiungendo alcuni altri vincoli; ad esempio, supponiamo che il nostro file in ingresso abbia due righe di intestazione che devono essere ignorate. Possiamo utilizzare, a tal fine, il valore dell'identificatore predefinito N e la struttura di controllo condizionale di Proteus:

IF LE(N, 2)
  IGNORE
FI
PRINTLN LEFT(L, 30)

La struttura condizionale inizia con IF e termina con FI (che corrisponde a IF letto da destra verso sinistra); essa comporta l'esecuzione di tutte le istruzioni tra IF e FI (o ELSE) se il valore dell'espressione che compare dopo IF è diverso da 0, l'esecuzione delle istruzioni dopo ELSE (e prima di FI) in caso contrario e qualora vi sia un ramo ELSE. Altre strutture di controllo sono FOR, WHILE, SWITCH e REPEAT.

LE è anch'essa una funzione di libreria; essa prende due parametri e ritorna un valore diverso da 0 se il primo è minore o uguale (numericamente) al secondo, 0 in caso contrario. In Proteus, come in "C", 0 è equivalente a FALSO nei test, mentre un numero diverso da 0 è equivalente a VERO.

IGNORE è un metodo molto particolare; esso indica a Proteus di terminare l'esecuzione del programma per la linea corrente, di passare alla riga successiva e ricominciare dall'inizio l'esecuzione del programma.
Ciò è esattamente quello che vogliamo Proteus faccia per le prime due righe di intestazione.
Quando Proteus ha letto la terza riga, N vale 3 e quindi le istruzioni dentro l'IF non saranno più eseguite, mentre sarà eseguita la PRINTLN che scriverà i cognomi come richiesto.

Complichiamo ancora il nostro esempio, supponendo che i campi non abbiano lunghezza fissa, bensì siano delimitati da virgole (',').

Delle stringhe di caratteri separate da uno o più caratteri presi da una certa lista sono dette token; nel nostro caso, dunque, ogni riga consiste in tre token delimitati da virgole.

Proteus dispone di molte funzioni di libreria per manipolare i token; nel nostro caso, utilizzeremo la funzione di tokenizzazione dinamica TOKEN, che prende tre parametri:

Il programma diventa:

IF LE(N, 2)
  IGNORE
FI
PRINTLN TOKEN(L, 1, ",")

Si noti che, qualora uno o più campi possano essere vuoti, è necessario utilizzare la funzione VECSPLIT invece delle funzioni tokenizzatrici; in caso contrario, si correrebbe il rischio di considerare un campo al posto di un altro.
Ad esempio, con i seguenti dati:

Rossi,Mario,555-443322
Bianchi,,555-667788

presumendo di voler prelevare il nome, il seguente codice è errato:

PRINTLN TOKEN(L, 2, ",")

Infatti, nel caso del signor Bianchi, per il quale non abbiamo il nome, questo codice restituirebbe il numero di telefono, "555-667788". Viceversa, il codice seguente è CORRETTO:

VH = VECSPLIT(L, ",")
PRINTLN VECGET(VH, 2)
VECFREE(VH)

Infatti VECSPLIT crea un vettore, contenente i vari campi determinati a partire dalla stringa, considerando anche eventuali campi vuoti (cioé due separatori consecutivi).

Tornando al nostro esempio iniziale, se vogliamo eliminare gli spazi eventualmente presenti a destra e a sinistra del cognome, possiamo utilizzare la funzione di libreria ALLTRIM (taglia a destra e sinistra) in questo modo:

IF LE(N, 2)
  IGNORE
FI
PRINTLN ALLTRIM(TOKEN(L, 1, ","), " ")

L'istruzione di scrittura ha ora una forma molto più complessa; come si vede, ogni parametro di funzione può essere a sua volta una funzione; ciò permette di ottenere espressioni compatte, evitando l'utilizzo di molte variabili inutili; inoltre, poichè Proteus non possiede operatori, l'ordine di esecuzione è implicitamente determinato e non sono richieste parentesi addizionali.

É anche possibile scrivere programmi che siano eseguiti una sola volta, senza file di ingresso e di uscita standard; si veda il parametro sulla linea di comando -z.

Ciò completa la nostra breve introduzione all'uso di Proteus; le sezioni successive specificano con maggiore dettaglio sintassi e semantica di tutti i metodi e delle funzioni di libreria, oltre a presentare alcuni argomenti avanzati come le funzioni definite dall'utente (UDF), il resto degli identificatori predefiniti e le espressioni regolari.

 

Inizio pagina Prossimo argomento Argomento precedente Indice per argomenti Indice analitico
Midnight Lake iPhone Case Black Women Shoes Black Flat Shoes Leather Flats Black Patent Ballerinas Black Ballet Shoes Casual Shoes Black Shoes Women Balle Record Player Cufflinks Best iPhone XR Clear Cases iPhone XS/XS Max Leather Cases Sale Best iPhone 8/8 Plus Silicone Cases iPhone 7/7 Plus Cases & Screen Protector New Cases For iPhone 6/6 Plus iPhone 8 Case Sale iPhone Xr Case Online iPhone 7 Case UK Online iPhone X Case UK Sale iPhone X Case Deals iPhone Xs Case New Case For iPhone Xr UK Online Case For iPhone 8 UK Outlet Fashion Silver Cufflinks For Men Best Mens Cufflinks Outlet Online The Gold Cufflinks Shop Online Cheap Shirt Cufflinks On Sale Nice Wedding Cufflinks UK Online Top Black Cufflinks UK Online Mens Cufflinks Online Silver Cufflinks For Men Men Cufflinks UK Sale Gold Cufflinks UK Online Gold Cufflinks UK Silver Cufflinks UK Shirt Cufflinks Discount Online Mens Cufflinks Deals & Sales Girls Shoes For Dance Fashion Ballet Dance Shoes Best Ballet Flats Shoes UK Online Cheap Ballet Pointe Shoes UK Online Best Ballet Shoes Outlet Best Dance Shoes Sale Cheap Ballet Flats Sale UK Best Pointe Shoes Online UK Ballet Dance Shoes UK Shoes For Dance UK Best Ballet Slippers Shop Best Yoga Shoes Hotsell