Non c’è un’istruzione for
particolare per visitare un
vettore “multidimensionale”. Non ce ne può essere una, perché
awk
in realtà non ha
vettori o elementi multidimensionali: c’è solo una modalità
multidimensionale per accedere a un vettore.
Comunque, se un programma ha un vettore al quale si accede sempre in
modalità multidimensionale, si può ottenere il risultato di visitarlo
combinando l’istruzione di visita for
(vedi la sezione Visitare tutti gli elementi di un vettore) con la funzione
interna split()
(vedi la sezione Funzioni di manipolazione di stringhe).
Si procede nel seguente modo:
for (indice_combinato in vettore) { split(indice_combinato, indici_separati, SUBSEP) … }
Questo imposta la variabile indice_combinato
a ogni
concatenazione di indici contenuta nel vettore, e la suddivide
nei singoli indici separandoli
in corrispondenza del valore di
SUBSEP
. I singoli indici diventano poi gli elementi
del vettore indici_separati
.
Perciò, se un valore è stato precedentemente memorizzato in
vettore[1, "pippo"]
, esiste in vettore
un elemento con indice
"1\034pippo"
(ricordare che il valore di default di SUBSEP
è il carattere con codice ottale 034).
Prima o poi, l’istruzione for
trova quell’indice e fa un’iterazione
con la variabile indice_combinato
impostata a "1\034pippo"
.
Poi viene chiamata la funzione split()
in questo modo:
split("1\034pippo", indici_separati, "\034")
Il risultato è quello di impostare indici_separati[1]
a "1"
e
indici_separati[2]
a "pippo"
. Ecco fatto!
La sequenza originale degli indici separati è ripristinata.