Su: Vettori multidimensionali   [Contenuti][Indice]


8.5.1 Visitare vettori multidimensionali

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.