Successivo: , Su: Accedere alla tabella simboli   [Contenuti][Indice]


17.4.10.1 Accedere alle variabili per nome e aggiornarle

Le routine che seguono permettono di raggiungere e aggiornare le variabili globali a livello di awk per nome. Nel gergo dei compilatori, gli identificativi di vario tipo sono noti come simboli, da cui il prefisso “sym” nei nomi delle routine. La struttura di dati che contiene informazioni sui simboli è chiamata Tabella dei simboli (Symbol table). Le funzioni sono le seguenti:

awk_bool_t sym_lookup(const char *nome,
                      awk_valtype_t wanted,
                      awk_value_t *risultato);

Riempie la struttura awk_value_t puntata da risultato con il valore della variabile il cui nome è nella stringa nome, che è una normale stringa di caratteri C. wanted indica il tipo di valore atteso. La funzione restituisce true se il tipo effettivo della variabile è quello specificato in wanted, e false in caso contrario. In quest’ultimo caso, risultato>val_type indica il tipo effettivo della variabile (vedi Tabella 17.2).

awk_bool_t sym_lookup_ns(const char *nome,
                         const char *name_space,
                         awk_valtype_t wanted,
                         awk_value_t *risultato);

Simile a sym_lookup(), ma il parametro name_space consente di specificare a quale spazio-di-nomi appartiene nome. name_space non può essere la stringa nulla (NULL). Se vale "" o "awk", allora nome è cercato nello spazio-di-nomi di default, ossia awk.

Si noti che namespace è una parola chiave di C++. Per ragioni di interoperabilità con C++, si dovrebbe evitare di usare questo identificativo nel codice C.

awk_bool_t sym_update(const char *nome, awk_value_t *valore);

Aggiorna la variabile il cui nome è contenuto nella stringa nome, che è una normale stringa di caratteri C. La variabile è aggiunta alla Tabella dei simboli di gawk, se non è già presente. Restituisce true se tutto è andato bene, e false in caso contrario.

La modifica del tipo (da scalare a vettoriale o viceversa) di una variabile già esistente non è consentito, e questa routine non può neppure essere usata per aggiornare un vettore. Questa routine non può essere usata per modificare nessuna delle variabili predefinite (come ARGC o NF).

Un’estensione può andare a cercare il valore delle variabili speciali di gawk. Tuttavia, con l’eccezione del vettore PROCINFO, un’estensione non può cambiare alcuna di queste variabili.


Successivo: , Su: Accedere alla tabella simboli   [Contenuti][Indice]