Successivo: , Precedente: , Su: Funzioni di tipo generale   [Contenuti][Indice]


10.2.6 Trasformare un vettore in una sola stringa

Quando si fanno elaborazioni su stringhe, spesso è utile poter unire tutte le stringhe di un vettore in una lunga stringa. La funzione seguente, join(), svolge questo compito. Verrà utilizzata nel seguito in diversi programmi applicativi (vedi la sezione Programmi utili scritti in awk).

La buona progettazione di una funzione è importante; la funzione dev’essere generale, ma potrebbe anche avere un ragionevole comportamento di default. Viene chiamata con un vettore e anche con gli indici iniziale e finale degli elementi del vettore da riunire. Questo presuppone che gli indici del vettore siano numerici—una supposizione logica, dato che il vettore probabilmente è stato creato con split() (vedi la sezione Funzioni di manipolazione di stringhe):

# join.awk --- trasforma un vettore in una stringa

function join(vettore, iniz, fine, separ,    risultato, i)
{
    if (separ == "")
       separ = " "
    else if (separ == SUBSEP) # valore magico
       separ = ""
    risultato = vettore[iniz]
    for (i = iniz + 1; i <= fine; i++)
        risultato = risultato separ vettore[i]
    return risultato
}

Un ulteriore argomento opzionale è il separatore da usare quando si uniscono nuovamente le stringhe. Se il chiamante fornisce un valore non nullo, join() usa quello; se non viene fornito, per default ha un valore nullo. In questo caso, join() usa uno spazio singolo come separatore di default per le stringhe. Se il valore è uguale a SUBSEP, join() unisce le stringhe senza un separatore tra di esse. SUBSEP serve come valore “magico” per indicare che potrebbe non esserci un separatore tra le stringhe componenti.72


Note a piè di pagina

(72)

Sarebbe bello se awk avesse un operatore di assegnamento per la concatenazione. La mancanza di un esplicito operatore per la concatenazione rende le operazioni sulle stringhe più difficili di quanto potrebbero essere.


Successivo: , Precedente: , Su: Funzioni di tipo generale   [Contenuti][Indice]