summaryrefslogtreecommitdiff
path: root/doc/it/gawktexi.in
diff options
context:
space:
mode:
Diffstat (limited to 'doc/it/gawktexi.in')
-rwxr-xr-x[-rw-r--r--]doc/it/gawktexi.in1142
1 files changed, 873 insertions, 269 deletions
diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in
index 26e35e2c..8faac5de 100644..100755
--- a/doc/it/gawktexi.in
+++ b/doc/it/gawktexi.in
@@ -56,8 +56,8 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH Agosto 2022
-@set VERSION 5.2
+@set UPDATE-MONTH Febbraio 2023
+@set VERSION 5.3
@set PATCHLEVEL 0
@c added Italian hyphenation stuff
@@ -73,7 +73,7 @@
@set TITLE GAWK: Programmare efficacemente in AWK
@end ifclear
@set SUBTITLE Una Guida Utente per GNU Awk
-@set EDITION 5.2
+@set EDITION 5.3
@iftex
@set DOCUMENT libro
@@ -93,6 +93,16 @@
@set COMMONEXT (e.c.)
@set PAGE pagina
@end iftex
+@iflatex
+@set DOCUMENT libro
+@set CHAPTER capitolo
+@set APPENDIX appendice
+@set SECTION sezione
+@set SUBSECTION sottosezione
+@set DARKCORNER (a.b.)
+@set COMMONEXT (e.c.)
+@set PAGE pagina
+@end iflatex
@ifinfo
@set DOCUMENT File Info
@set CHAPTER nodo principale
@@ -179,6 +189,10 @@
@set LEQ @math{@leq}
@set PI @math{@pi}
@end iftex
+@iflatex
+@set LEQ <=
+@set PI @i{pi}
+@end iflatex
@ifdocbook
@set LEQ @inlineraw{docbook, &le;}
@set PI @inlineraw{docbook, &pgr;}
@@ -276,6 +290,10 @@ Some comments on the layout for TeX.
@syncodeindex fn cp
@syncodeindex vr cp
@end iftex
+@iflatex
+@syncodeindex fn cp
+@syncodeindex vr cp
+@end iflatex
@ifxml
@syncodeindex fn cp
@syncodeindex vr cp
@@ -293,6 +311,9 @@ Some comments on the layout for TeX.
@iftex
@finalout
@end iftex
+@iflatex
+@finalout
+@end iflatex
@c Enabled '-quotes in PDF files so that cut/paste works in
@c more places.
@@ -318,7 +339,7 @@ Email: <email>gnu@@gnu.org</email>
URL: <ulink url="https://www.gnu.org">https://www.gnu.org/</ulink>
</literallayout>
-<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2022
+<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2023
Free Software Foundation, Inc.
All Rights Reserved.
</literallayout>
@@ -341,7 +362,7 @@ Italian Linux Documentation Project (ILDP)
Email: <emailildp@@pluto.it
URL: <ulink url="http://www.pluto.it/ildp">http://www.pluto.it/ildp/</ulink></literallayout>
-<literallayout class="normal">Copyright &copy; 2016&ndash;2022
+<literallayout class="normal">Copyright &copy; 2016&ndash;2023
Free Software Foundation, Inc.
All Rights Reserved.
</literallayout>
@@ -349,7 +370,7 @@ All Rights Reserved.
@ifnotdocbook
@iftex
-Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2022 @*
+Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2023 @*
Free Software Foundation, Inc.
@end iftex
@end ifnotdocbook
@@ -436,7 +457,7 @@ URL: @uref{https://www.gnu.org/}@*
@c This one is correct for gawk 3.1.0 from the FSF
@c ISBN 1-882114-28-0
@sp 0
-Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2022@*
+Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2023@*
Free Software Foundation, Inc.
@sp 1
Traduzione e revisione:@*
@@ -679,6 +700,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Separare campi con @dfn{regexp}:: Usare @dfn{regexp} come separatori.
* Campi di un solo carattere:: Fare di ogni carattere un campo
separato.
+* Campi separati da virgola:: Lavorare con file CSV.
* Separatori campo da riga di comando:: Impostare @code{FS} dalla riga di
comando.
* Campo intera riga:: Fare di una riga intera un campo
@@ -692,7 +714,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Campi con dati a larghezza fissa:: Valore di campi con dati a larghezza
fissa.
* Separazione in base al contenuto:: Definire campi dal loro contenuto.
-* File CSV:: Ancora sui file CSV.
+* Ancora CSV:: Ancora sui file CSV.
* FS rispetto a FPAT:: Una differenza sottile.
* Controllare la creazione di campi:: Controllare come @command{gawk} sta
suddividendo i record.
@@ -746,6 +768,9 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Avvertimenti speciali:: Cose a cui prestare attenzione.
* Chiusura file e @dfn{pipe}:: Chiudere file in input e di output e
@dfn{pipe}.
+* Valore restituito da @code{close}:: Usare il valore di ritorno restituito da
+ @code{close()}.
+* Noflush:: Velocizzare output da @dfn{pipe}.
* Continuazione dopo errori:: Abilitare continuazione dopo errori
in output.
* Sommario di Output:: Sommario di Output.
@@ -944,7 +969,9 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Funzione getlocaltime:: Una funzione per ottenere data e
ora nel formato desiderato.
* Funzione isnumeric:: Una funzione per controllare se un
- valore @`e numerico.
+ valore @`e numerico.
+* Funzione tocsv:: Una funzione per convertire l'output
+ al formato CSV.
* Funzione readfile:: Una funzione per leggere un file
intero in un colpo solo.
* Apici alla shell:: Una funzione per passare stringhe
@@ -1215,15 +1242,16 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
per Cygwin.
* MSYS:: Usare @command{gawk} nell'ambiente
MSYS.
-* Installazione su VMS:: Installare @command{gawk} su VMS.
-* Compilazione su VMS:: Come compilare @command{gawk} su
- VMS.
-* Estensioni dinamiche su VMS:: Compilare estensioni dinamiche
- di @command{gawk} su VMS.
-* Dettagli installazione su VMS:: Come installare @command{gawk} su
- VMS.
-* Esecuzione su VMS:: Come eseguire @command{gawk} su VMS.
-* GNV su VMS:: Il progetto GNV di VMS.
+* Installazione su OpenVMS:: Installare @command{gawk} su OpenVMS.
+* Compilazione su OpenVMS:: Come compilare @command{gawk} su
+ OpenVMS.
+* Estensioni dinamiche su OpenVMS:: Compilare estensioni dinamiche
+ di @command{gawk} su OpenVMS.
+* Dettagli installazione su OpenVMS:: Come installare @command{gawk} su
+ OpenVMS.
+* Esecuzione su OpenVMS:: Come eseguire @command{gawk} su
+ OpenVMS.
+* GNV su OpenVMS:: Il progetto GNV su OpenVMS.
* Bug:: Notificare problemi e bug.
* Definizione di bug:: Definire cos'@`e e cosa non @`e un bug.
* Indirizzo bug:: Dove notificare problemi.
@@ -1622,7 +1650,7 @@ implementazione di @command{awk} chiamata @command{gawk} (che sta per
``GNU @command{awk}''). @command{gawk} funziona su una vasta gamma di sistemi
Unix, dai PC basati su architettura Intel fino
a sistemi di potenza molto maggiore.
-@command{gawk} @`e stato portato anche su Mac OS X,
+@command{gawk} @`e stato portato anche su macOS, z/OS,
Microsoft Windows
(tutte le versioni),
e OpenVMS.@footnote{Qualche altro sistema operativo obsoleto su cui
@@ -3622,7 +3650,7 @@ Questo esempio @`e leggermente diverso da quello precedente:
l'input @`e l'output del comando @command{expand}, che cambia i TAB
in spazi, in modo che le larghezze confrontate siano quelle che sarebbero
qualora le si stampasse, e non il numero dei caratteri di input su ogni
-riga. [il carattere TAB occupa un byte nel file, ma pu@`o generare fino a
+riga. [Il carattere TAB occupa un byte nel file, ma pu@`o generare fino a
otto spazi bianchi in fase di stampa.]
@item
@@ -3897,7 +3925,7 @@ per programmi sulla riga di comando, @emph{ammesso} che si stia usando una
shell conforme a POSIX, come la Unix Bourne shell o Bash. Ma la C shell si
comporta in maniera diversa! In quel caso, occorre usare due barre inverse
consecutive, in fondo alla riga. Si noti anche che quando si usa la C shell
-@emph{ogni} andata a capo nel vostro programma @command{awk} deve essere
+@emph{ogni} andata a capo nel vostro programma @command{awk} dev'essere
indicata con una barra inversa. Per esempio:
@example
@@ -3954,6 +3982,13 @@ successiva. Invece, la combinazione barra inversa-ritorno a capo non viene
per nulla notata, in quanto ``nascosta'' all'interno del commento. Quindi,
il @code{BEGIN} @`e marcato come errore di sintassi.
+Chi @`e interessato pu@`o vedere
+@uref{https://lists.gnu.org/archive/html/bug-gawk/2022-10/msg00025.html}
+per una modifica al codice sorgente che consente la continuazione di
+righe se sono racchiuse fra parentesi. Questa @dfn{patch} non @`e stata
+inclusa nella distribuzione di @command{gawk} perch@'e implicitamente
+diminuisce la portabilit@`a dei programmi @command{awk}.
+
@cindex istruzioni @subentry multiple
@cindex @code{;} (punto e virgola) @subentry separare istruzioni nelle azioni
@cindex punto e virgola (@code{;}) @subentry separare istruzioni nelle azioni
@@ -4449,7 +4484,7 @@ Le variabili da riga di comando della forma
@end itemize
Quest'opzione @`e particolarmente necessaria per le applicazioni World Wide Web
-CGI che passano argomenti attraverso le URL; l'uso di quest'opzione impedisce
+CGI che passano argomenti attraverso gli URL; l'uso di quest'opzione impedisce
a un utente malintenzionato (o ad altri) di passare opzioni, assegnamenti o
codice sorgente @command{awk} (con @option{-e}) all'applicazione
CGI.@footnote{Per maggiori dettagli,
@@ -4538,6 +4573,23 @@ Questa tracciatura @`e stampata sullo standard error.
Ogni ``codice operativo'' @`e preceduto da un segno @code{+}
nell'output.
+@item @option{-k}
+@itemx @option{--csv}
+@cindex @option{-k} (opzione)
+@cindex opzione @subentry @option{-k}
+@cindex @option{--csv} (opzione)
+@cindex opzione @subentry @option{--csv}
+@cindex campi separati da virgola (CSV) come dati @subentry opzione @option{-k}
+@cindex campi separati da virgola (CSV) come dati @subentry opzione @option{--csv}
+@cindex CSV (dati con valori separati da virgola) @subentry opzione @option{-k}
+@cindex CSV (dati con valori separati da virgola) @subentry opzione @option{--csv}
+@cindex dati CSV (campi separati da virgola) @subentry @option{-k}
+@cindex dati CSV (campi separati da virgola) @subentry @option{--csv}
+Richiede un trattamento speciale per file CSV [valori separati da virgola].
+@xref{Campi separati da virgola}.
+Quest'opzione non pu@`o essere usata insieme all'opzione @option{--posix}.
+Se lo si fa, viene generato un errore fatale.
+
@item @option{-l} @var{ext}
@itemx @option{--load} @var{ext}
@cindex @option{-l} (opzione)
@@ -5593,11 +5645,16 @@ directory possono essere necessarie per organizzare i file da includere.
Vista la possibilit@`a di specificare opzioni @option{-f} multiple, il
meccanismo @code{@@include} non @`e strettamente necessario.
Comunque, la direttiva @code{@@include} pu@`o essere d'aiuto nel costruire
-programmi @command{gawk} autosufficienti, riducendo cos@`{@dotless{i}} la necessit@`a
-di scrivere righe di comando complesse e tediose.
+programmi @command{gawk} autosufficienti, riducendo cos@`{@dotless{i}} la
+necessit@`a di scrivere righe di comando complesse e tediose.
In particolare, @code{@@include} @`e molto utile per scrivere @dfn{script} CGI
eseguibili da pagine web.
+La direttiva @code{@@include} e l'opzione @option{-i}/@option{--include}
+sulla riga di comando sono completamente equivalenti. Un programma sorgente
+incluso non viene caricato di nuovo se @`e stato gi@`a caricato
+in precedenza.
+
Le regole usate per trovare un file sorgente, descritte
@iftex
nella
@@ -5682,7 +5739,7 @@ Questa
@ifinfo
Questo
@end ifinfo
-@value{SECTION} descrive funzionalit@`a o opzioni da riga di comando
+@value{SECTION} descrive una funzionalit@`a o opzione da riga di comando
provenienti da precedenti versioni di @command{gawk} che non sono pi@`u
disponibili nella versione corrente, o che sono ancora utilizzabili ma sono
deprecate (ci@`o significa che @emph{non} saranno presenti in una futura
@@ -6116,7 +6173,7 @@ $ @kbd{awk 'BEGIN @{ print "Egli le disse \"ciao!\"." @}'}
Lo stesso carattere di barra inversa @`e un altro carattere che non pu@`o essere
incluso normalmente; occorre scrivere @samp{\\} per inserire una barra
inversa nella stringa o @dfn{regexp}. Quindi, la stringa costituita dai due
-caratteri @samp{"} e @samp{\} deve essere scritta come @code{"\"\\"}.
+caratteri @samp{"} e @samp{\} dev'essere scritta come @code{"\"\\"}.
Altre sequenze di protezione rappresentano caratteri non stampabili
come TAB o il ritorno a capo. Anche se @`e possibile immettere la maggior parte dei
@@ -6189,7 +6246,7 @@ Il valore esadecimale @var{hh}, dove @var{hh} indica una sequenza di cifre
esadecimali (@samp{0}--@samp{9}, e @samp{A}--@samp{F}
o @samp{a}--@samp{f}). Dopo @samp{\x} @`e consentito un massimo di due cifre.
Ogni ulteriore cifra esadecimale @`e considerata come una semplice
-lettera o numero. @value{COMMONEXT}
+lettera o numero. @value{COMMONEXT}
(La sequenza di protezione @samp{\x} non @`e permessa in POSIX awk.)
@quotation ATTENZIONE
@@ -6203,6 +6260,27 @@ Dalla @value{PVERSION} 4.2,
vengono elaborate solo due cifre.
@end quotation
+@cindex @code{\} (barra inversa) @subentry @code{\u} (sequenza di protezione)
+@cindex backslash (@code{\}) @subentry @code{\u} (sequenza di protezione)
+@cindex barra inversa (@code{\}) @subentry @code{\/} (sequenza di protezione)
+@cindex estensioni comuni @subentry @code{\u} (sequenza di protezione)
+@cindex comuni @subentry estensioni @subentry @code{\u} (sequenza di protezione)
+@item \u@var{hh}@dots{}
+Il valore esadecimale @var{hh}, dove @var{hh} indica una sequenza di cifre
+esadecimli (@samp{0}--@samp{9}, e @samp{A}--@samp{F} o
+@samp{a}--@samp{f}). Un massimo di otto cifre @`e consentito dopo
+la @samp{\u}. Ogni successiva cifra esadecimale eventualmente immessa
+@`e trattata come una semplice lettera o numero. @value{COMMONEXT}
+(La sequenza di protezione @samp{\u} non @`e ammessa in modalit@`a POSIX.)
+
+Questa sequenza di protezione serve per indicare una lettera o un
+simbolo come specificato nella codifica Unicode.
+@command{gawk} dapprima converte le cifre cos@`{@dotless{i}} specificate in
+un numero intero, e poi traduce il ``carattere largo''
+cos@`{@dotless{i}} specificato nella codifica multibyte locale (anche se la
+codifica locale non @`e Unicode). Se i byte specificati non
+rappresentano un carattere valido, il valore diviene @code{"?"}.
+
@cindex @code{\} (barra inversa) @subentry @code{\/} (sequenza di protezione)
@cindex barra inversa (@code{\}) @subentry @code{\/} (sequenza di protezione)
@item \/
@@ -6361,7 +6439,6 @@ Le sequenze di protezione descritte
@ifnotinfo
prima
@end ifnotinfo
-
@iftex
nella
@end iftex
@@ -6530,7 +6607,7 @@ da ricercare @`e @samp{phhhhhhhhhhhhhhooey}, @samp{ph*} individua tutte le
@cindex pi@`u (@code{+}) @subentry operatore @dfn{regexp}
@item @code{+}
Questo simbolo @`e simile a @samp{*}, tranne per il fatto che l'espressione
-precedente deve essere trovata almeno una volta. Questo significa che
+precedente dev'essere trovata almeno una volta. Questo significa che
@samp{wh+y} individuerebbe @samp{why} e @samp{whhy}, ma non @samp{wy}, mentre
@samp{wh*y} li troverebbe tutti e tre.
@@ -7152,6 +7229,8 @@ Individua la stringa nulla che ricorre all'interno di una parola.
Per esempio,
@code{/\Bora\B/} individua @samp{Colorado}, ma non individua @samp{che ora @`e}.
@samp{\B} @`e essenzialmente l'opposto di @samp{\y}.
+Un altro modo di intenderlo @`e che @samp{\B} corrisponde alla stringa vuota,
+nel caso questa non si trovi al bordo di una parola.
@end table
@cindex buffer @subentry operatori per
@@ -7482,6 +7561,20 @@ il carattere che fa da separatore fra i record.
Altrimenti (in @command{gawk}), @code{RS} @`e valutata come espressione
regolare. Questo meccanismo @`e spiegato pi@`u in dettaglio qui sotto.
+@quotation NOTA
+Quando @command{gawk} @`e chiamato con l'opzione @option{--csv}, nulla
+di quanto descritto in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SECTION} @`e applicabile.
+@xref{Campi separati da virgola},
+per i dettagli.
+@end quotation
+
@menu
* awk divisione record:: Come @command{awk} standard divide i record.
* gawk divisione record:: Come @command{gawk} divide i record.
@@ -8160,6 +8253,7 @@ in precedenza.
* Separare campi con @dfn{regexp}:: Usare @dfn{regexp} come separatori.
* Campi di un solo carattere:: Fare di ogni carattere un campo
separato.
+* Campi separati da virgola:: Lavorare con file CSV.
* Separatori campo da riga di comando:: Assegnare @code{FS} dalla riga di
comando.
* Campo intera riga:: Far s@`{@dotless{i}} che la riga intera sia un
@@ -8208,10 +8302,10 @@ ricerca speciale
@code{BEGIN}
(@pxref{BEGIN/END}).
Per esempio, qui impostiamo il valore di @code{FS} alla stringa
-@code{","}:
+@code{":"}:
@example
-awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}'
+awk 'BEGIN @{ FS = ":" @} ; @{ print $2 @}'
@end example
@cindex @code{BEGIN} (regola)
@@ -8219,7 +8313,7 @@ awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}'
Data la riga in input:
@example
-John Q. Smith, 29 Oak St., Walamazoo, MI 42139
+John Q. Smith: 29 Oak St.: Walamazoo: MI 42139
@end example
@noindent
@@ -8235,7 +8329,7 @@ nome della persona dell'esempio che abbiamo appena usato potrebbe avere un
titolo o un suffisso annesso, come:
@example
-John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
+John Q. Smith: LXIX: 29 Oak St.: Walamazoo: MI 42139
@end example
@noindent
@@ -8253,8 +8347,6 @@ si possano manipolare con un programma @command{awk} separato.)
@cindex separatore di campo @subentry spazi vuoti come
@cindex spazi vuoti @subentry come separatore di campo
-@cindex separatore di campo @subentry @code{FS} (variabile) come
-@cindex @code{FS} (variabile) @subentry come separatore di campo
I campi sono separati normalmente da spazi vuoti
(spazi, tabulazioni e ritorni a capo), non solo da spazi singoli. Due spazi
in una riga non delimitano un campo vuoto. Il valore di default del separatore
@@ -8437,6 +8529,111 @@ In modalit@`a di compatibilit@`a
se @code{FS} @`e la stringa nulla, anche @command{gawk}
si comporta in questo modo.
+@node Campi separati da virgola
+@subsection Lavorare con file CSV
+
+@cindex CSV (dati con valori separati da virgola) @subentry record e campi
+@cindex dati CSV (dati con valori separati da virgola) @subentry record e campi
+@cindex campi separati da virgola (CSV) come dati @subentry record e campi
+Molti programmi di uso frequente si servono della virgola come separatore
+di campo, invece di usare lo spazio. [Normalmente i file in input
+a @command{gawk} hanno in questo caso come suffisso "csv",
+Comma Separated Value, ovvero Campi separati da virgola.]
+Questo @`e il caso in particolare per popolari fogli di calcolo.
+Non c'@`e uno standard accettato da tutti che regoli il formato di tali
+file, sebbene il documento
+@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180}
+elenchi le pratiche normalmente seguite.
+
+Per decenni, chi voleva lavorare con file CSV in @command{awk}
+ha dovuto ``trovare da solo'' una soluzione. (Per esempio,
+@pxref{Separazione in base al contenuto}).
+Nel 2023, Brian Kernighan ha deciso di aggiungere un supporto
+per i file CSV alla sua versione di @command{awk}.
+Per restare allo stesso livello, anche @command{gawk} rende
+disponibile lo stesso supporto presente nella versione di Brian.
+Per usare dei file contenenti campi in formato CSV, basta
+chiamare @command{gawk} specificando come opzione
+@option{-k} oppure @option{--csv}.
+
+I campi nei file CSV sono separati da virgola. Per consentire la
+presenza di una virgola all'interno di un campo (p.es. come parte
+di un dato), il campo pu@`o essere racchiuso fra doppi apici.
+Per consentire un doppio apice all'interno di un campo racchiuso fra
+doppi apici, il campo stesso @empf{deve} essere racchiuso fra doppi apici
+e due doppi apici vanno specificati per ogni singolo doppio apice
+all'interno del campo.
+Il doppio apice che segnala l'inizio del campo dev'essere
+il primo carattere dopo la virgola [che segna l'inizio del campo].
+La tabella
+@ref{table-csv-examples} mostra alcuni esempi.
+
+@float Table,table-csv-examples
+@caption{Esempi di dati in file CSV}
+@multitable @columnfractions .3 .3
+@headitem Input @tab Contenuto del campo
+@item @code{abc def} @tab @code{abc def}
+@item @code{"dati tra doppi apici"} @tab @code{dati tra doppi apici}
+@item @code{"dati tra, doppi apici"} @tab @code{dati tra, doppi apici}
+@item @code{"Lei disse ""Basta!""."} @tab @code{Lei disse "Basta!".}
+@item @code{Lei disse "Basta!".} @tab @code{Lei disse "Basta!".}
+@end multitable
+@end float
+
+Inoltre, ed @`e qui che la situazione si ingarbuglia, all'interno
+di un campo fra doppi apici @`e consentito anche inserire
+il carattere a-capo!
+Per gestire una tale situazione, quando sta trattando un file CSV
+@command{gawk} analizza il file in input alla ricerca di
+caratteri a-capo che non siano racchiusi fra doppi apici.
+Quindi, se si utilizza l'opzione @option{--csv}, il modo
+di gestire i record utilizzando la variabile @code{RS}
+(@pxref{Record}) non viene utilizzato per nulla.
+
+@cindex Kernighan, Brian @subentry citazioni di
+@sidebar Carriage-Return--Line-Feed Line Endings In CSV Files
+@sidebar Fine riga dei file CSV con ritorno-carrello--a-capo
+@quotation
+@code{\r\n} @i{@`e un'invenzione del diavolo.}
+@author Brian Kernighan
+@end quotation
+
+Molti file CSV provengono da sistemi in cui il carattere di
+fine riga per file di testo @`e costituito dalla coppia di
+caratteri ritorno-carrello--a-capo
+(CR-LF, @samp{\r} seguito da @samp{\n}).
+Per semplificare la vita @command{gawk}, quando tratta
+dei file CSV, include il carattere a-capo a fine record solo
+quando precede immediatamente un carattere ritorno-carrello
+nell'input.
+@end sidebar
+
+Il comportamento della funzione @code{split()} (ancora non
+formalmente trattato, vedere @ref{Funzioni per stringhe})
+@`e leggermento differente quando si abbia a che fare con file CSV.
+Se @`e chiamato con due argomenti
+(@samp{split(@var{stringa}, @var{vettore})}), @code{split()}
+separa i campi con la logica CSV.
+In tutti gli altri casi, il comportamento @`e quello normale.
+
+Se si @`e specificato l'opzione @option{--csv}, l'elemento
+@code{PROCINFO["CSV"]} esister@`a, altrimenti non sar@`a disponibile.
+@xref{Variabili auto-assegnate}.
+
+Infine, se si @`e specificato @option{--csv}, l'assegnazione di
+un valore a una delle variabili
+@code{FS}, @code{FIELDWIDTHS}, @code{FPAT}, o @code{RS}
+genera un messaggio di avvertimento.
+
+Per amor di chiarezza, @command{gawk} considera come
+autoritativo per il file in input di tipo CSV
+il documento
+@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180}.
+Non ci sono meccanismi che consentono di accettare file CSV
+in input che non rispettino tali specifiche, p.es. dei
+file che usino come carattere che separa i campi un
+punto-e-virgola al posto della virgola.
+
@node Separatori campo da riga di comando
@subsection Impostare @code{FS} dalla riga di comando
@cindex @option{-F} (opzione) sulla riga di comando
@@ -8628,9 +8825,17 @@ Il seguente elenco riassume come i campi vengono divisi, in base al valore
di @code{FS} (@samp{==} significa ``@`e uguale a''):
@table @code
+@item @asis{@command{gawk} @`e stato chiamato specificando l'opzione @option{--csv}}
+La divisione in campi segue le regole esposte in @ref{Campi separati da virgola}.
+Il valore di @code{FS} @`e ignorato.
+
@item FS == " "
-I campi sono separati da serie di spazi vuoti. Gli spazi vuoti iniziale e
-finale sono ignorati. Questo @`e il comportamento di default.
+I campi sono separati da uno o pi@`u spazi vuoti. Gli spazi vuoti iniziali
+e finali sono ignorati. Questo @`e il comportamento di default.
+
+@item FS == ","
+I campi sono separati da virgola, con regole speciali per inserire in un
+campo virgole e/o doppi apici.
@item FS == @var{qualsiasi altro carattere singolo}
I campi sono separati da ogni ricorrenza del carattere. Ricorrenze
@@ -8933,8 +9138,12 @@ per un esempio di tale funzione).
@node Separazione in base al contenuto
@section Definire i campi in base al contenuto
+@strong{FIXME}: Quest'intera sezione dev'essere riscritta
+dopo che in @command{gawk} @`e stata introdotta la capacit@`a di analizzare
+file di tipo CSV. Ahim@`e.
+
@menu
-* File CSV:: Ancora sui file CSV.
+* Ancora CSV:: Ancora sui file CSV.
* FS rispetto a FPAT:: Una differenza sottile.
@end menu
@@ -8958,12 +9167,12 @@ parole, @code{FS} definisce cosa un campo @emph{non @`e}, invece di cosa
Tuttavia, ci sono casi in cui effettivamente si ha bisogno di definire i campi
in base a cosa essi sono, e non in base a cosa non sono.
-@cindex dati CSV (valori separati da virgole) @subentry analizzare con @code{FPAT}
-@cindex CSV (valori separati da virgole) come dati @subentry analizzare con @code{FPAT}
-@cindex Comma Separated Values (CSV) come dati @subentry analizzare con @code{FPAT}
-@cindex valori separati da virgole (CSV) come dati @subentry analizzare con @code{FPAT}
-Il caso pi@`u emblematico @`e quello dei dati cosiddetti @dfn{comma-separated
-value} (CSV). Molti fogli elettronici, per esempio, possono esportare i dati
+@cindex CSV (campi separati da virgola) come dati @subentry analizzare con @code{FPAT}
+@cindex dati CSV (campi separati da virgola) @subentry analizzare con @code{FPAT}
+@cindex campi separati da virgola (CSV) come dati @subentry analizzare con @code{FPAT}
+Il caso pi@`u emblematico
+@`e quello dei dati di tipo CSV (campi separati da virgola).
+Molti fogli elettronici, per esempio, possono esportare i dati
in file di testo, dove ogni record termina con un ritorno a capo e i campi
sono separati tra loro da virgole. Se le virgole facessero solo da separatore
fra i dati non ci sarebbero problemi. Il problema sorge se uno dei campi
@@ -9093,7 +9302,16 @@ effettuata utilizzando @code{FS} o @code{FIELDWIDTHS}.
Infine, la funzione @code{patsplit()} rende la stessa funzionalit@`a disponibile
per suddividere normali stringhe (@pxref{Funzioni per stringhe}).
-@node File CSV
+@quotation NOTA
+Poich@'e @command{gawk} consente ora un trattamento diretto dei
+file di tipo CSV (@pxref{Campi separati da virgola}), gli esempi
+presentati qui sono obsoleti.
+Nonostante ci@`o, rimangono utili come esempio di ci@`o che
+un'analisi dei campi utilizzando la variabile @code{FPAT}
+permette di fare.
+@end quotation
+
+@node Ancora CSV
@subsection Ancora sui file CSV
@cindex Collado, Manuel
@@ -9162,9 +9380,9 @@ $ @kbd{gawk -v fpat=2 -f test-csv.awk sample.csv}
@cindex Collado, Manuel
@cindex @code{CSVMODE}, libreria per @command{gawk}
@cindex libreria @subentry @code{CSVMODE} per @command{gawk}
-@cindex dati CSV (valori separati da virgole) @subentry analizzare con libreria @code{CSVMODE}
-@cindex CSV (valori separati da virgole) come dati @subentry analizzare con libreria @code{CSVMODE}
-@cindex valori separati da virgole (CSV) come dati @subentry analizzare con libreria @code{CSVMODE}
+@cindex dati CSV (campi separati da virgola) @subentry analizzare con libreria @code{CSVMODE}
+@cindex CSV (campi separati da virgola) come dati @subentry analizzare con libreria @code{CSVMODE}
+@cindex campi separati da virgola (CSV) come dati @subentry analizzare con libreria @code{CSVMODE}
In generale, usare @code{FPAT} per effettuare l'analisi di dati in formato CSV
@`e come utilizzare un lenzuolo troppo corto. Rimane sempre un angolo che non
@`e coperto. Si raccomanda, in alternativa, di usare la libreria @code{CSVMODE}
@@ -9222,7 +9440,9 @@ Il valore @`e @code{"FS"} se si usa la maniera normale di divisione dei campi,
oppure @code{"FPAT"} se si una la divisione in campi in base al contenuto:
@example
-if (PROCINFO["FS"] == "FS")
+if ("CSV" in PROCINFO)
+ @var{divisione in campi secondo le regole CSV} @dots{}
+else if (PROCINFO["FS"] == "FS")
@var{divisione normale in campi} @dots{}
else if (PROCINFO["FS"] == "FIELDWIDTHS")
@var{divisione in campi a lunghezza fissa} @dots{}
@@ -9234,8 +9454,9 @@ else
@end example
Quest'informazione @`e utile se si sta scrivendo una funzione che
-deve cambiare provvisoriamente @code{FS} o @code{FIELDWIDTHS}, leggere alcuni
-record e poi ripristinare le inpostazioni originali. Si veda
+deve cambiare provvisoriamente @code{FS}, @code{FIELDWIDTHS}, o
+@code{FPAT}, leggere alcuni
+record e poi tornale alle impostazioni originali. Si veda
(@pxref{Funzioni Passwd} per un esempio di una funzione di questo tipo.
@node Righe multiple
@@ -10084,7 +10305,7 @@ Questo
@value{SECTION} descrive una funzionalit@`a disponibile solo in
@command{gawk}.
-Si pu@`o specificare un tempo limite in millisecondi per leggere l'input dalla
+Si pu@`o specificare un tempo limite in millisecondi per leggere l'input dalla
tastiera, da una @dfn{pipe} o da una comunicazione bidirezionale, compresi i
@dfn{socket} TCP/IP. Questo pu@`o essere fatto per input, per comando o per
connessione, impostando un elemento speciale nel vettore @code{PROCINFO}
@@ -10405,6 +10626,7 @@ e parla della funzione predefinita @code{close()}.
file gi@`a aperti a inizio esecuzione
* Chiusura file e @dfn{pipe}:: Chiudere file in input e di output e
@dfn{pipe}.
+* Noflush:: Velocizzare output da @dfn{pipe}.
* Continuazione dopo errori:: Abilitare continuazione dopo errori
in output.
* Sommario di Output:: Sommario di Output.
@@ -11376,7 +11598,7 @@ invece di inviarlo a un file. Questa ridirezione apre una @dfn{pipe} verso
L'argomento @var{comando}, verso cui @`e rivolta la ridirezione, @`e in realt@`a
un'espressione
@command{awk}. Il suo valore @`e convertito in una stringa il cui contenuto
-costituisce un comando della shell che deve essere eseguito. Per esempio,
+costituisce un comando della shell che dev'essere eseguito. Per esempio,
il seguente programma produce due file, una lista non ordinata di nomi di
persone e una lista ordinata in ordine alfabetico inverso:
@@ -11674,8 +11896,8 @@ per accedere a ogni altro file aperto ereditato:
@table @file
@item /dev/fd/@var{N}
-Il file associato al descrittore di file @var{N}. Il file indicato deve
-essere aperto dal programma che inizia l'esecuzione di @command{awk}
+Il file associato al descrittore di file @var{N}. Il file indicato
+dev'essere aperto dal programma che inizia l'esecuzione di @command{awk}
(tipicamente la shell). Se non sono state poste in essere iniziative
speciali nella shell da cui @command{gawk} @`e stato invocato, solo i
descrittori 0, 1, e 2 sono disponibili.
@@ -11761,6 +11983,11 @@ Se lo si fa, il comportamente risultante @`e imprevedibile.
@cindex coprocessi @subentry chiusura
@cindex @code{getline} (comando) @subentry coprocessi, usare da
+@menu
+* Valore restituito da @code{close}:: Usare il valore di ritorno restituito da
+ @code{close()}.
+@end menu
+
Se lo stesso @value{FN} o lo stesso comando di shell @`e usato con @code{getline}
pi@`u di una volta durante l'esecuzione di un programma @command{awk}
(@pxref{Getline}),
@@ -11813,9 +12040,10 @@ close("sort -r nomi")
Una volta eseguita questa chiamata di funzione, la successiva @code{getline}
da quel file o comando, o la successiva @code{print} o @code{printf} verso quel
file o comando, riaprono il file o eseguono nuovamente il comando.
-Poich@'e l'espressione da usare per chiudere un file o una @dfn{pipeline} deve
-essere uguale all'espressione usata per aprire il file o eseguire il comando,
-@`e buona norma usare una variabile che contenga il @value{FN} o il comando.
+Poich@'e l'espressione da usare per chiudere un file o una @dfn{pipeline}
+dev'essere uguale all'espressione usata per aprire il file o eseguire il
+comando, @`e buona norma usare una variabile che contenga il valore
+@value{FN} o il comando.
Il precedente esempio cambia come segue:
@example
@@ -11940,7 +12168,9 @@ rinviata alla
@ref{I/O bidirezionale},
che ne parla pi@`u dettagliatamente e fornisce un esempio.
-@sidebar Usare il codice di ritorno di @code{close()}
+@node Valore restituito da @code{close}
+@subsection Usare il valore di ritorno restituito da @code{close()}
+@node Usare il valore di ritorno di @code{close()}
@cindex angolo buio @subentry funzione @subentry @code{close()}
@cindex funzione @subentry @code{close()} @subentry codice di ritorno
@cindex @code{close()} (funzione) @subentry codice di ritorno
@@ -11972,7 +12202,7 @@ In tal caso, @command{gawk} imposta la variabile predefinita
In @command{gawk}, a partire dalla @value{PVERSION} 4.2,
quando si chiude una @dfn{pipe} o un coprocesso (in input o in output),
-il codice di ritorno @`e quello restituito dal comando,
+il valore di ritorno @`e quello restituito dal comando,
come descritto
@iftex
nella
@@ -11988,6 +12218,8 @@ Altrimenti, @`e il codice di ritorno dalla chiamata alle funzione
di sistema @code{close()} o alla funzione C @code{fclose()}
se si sta chiudendo un file in input o in output, rispettivamente.
Questo valore @`e zero se la chiusura riesce, o @minus{}1 se non riesce.
+Anche le versioni pi@`u recenti di BWK @command{awk} restituiscono gli stessi
+valori per la funzione @command{close()}.
@float Tabella,table-close-pipe-return-values
@caption{Codici di ritorno dalla @code{close()} di una @dfn{pipe}}
@@ -12011,10 +12243,64 @@ portabile.
@value{DARKCORNER}
In modalit@`a POSIX (@pxref{Opzioni}), @command{gawk} restituisce solo zero
quando chiude una @dfn{pipe}.
-@end sidebar
+
+@node Noflush
+@section Velocizzare output da @dfn{pipe}
+@c FIXME: Add indexing
+
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION} descrive una funzionalit@`a propria di @command{gawk}.
+
+Normalmente, quando si spediscono data tramite una @dfn{pipe} a
+un comando, usando le istruzioni @code{print} o @code{printf},
+@command{gawk} scarica l'output verso la @dfn{pipe}.
+Ovvero, l'output non @`e bufferizzato, ma scritto direttamente.
+Ci@`o garantisce che l'output della @dfn{pipe}, insieme a quello
+generato da @command{gawk} viene scritto enll'ordine che ci si
+aspetta:
+
+@example
+print "qualcosa" # va allo standard output
+print "qualcos'altro" | "un-comando" # anche allo standard output
+print "ulteriori cose" # come pure questo
+@end example
+
+Fare ci@`o ha un prezzo; scaricare dati nella @dfn{pipe} usa
+pi@`u tempo CPU, e in alcuni ambienti tale consumo pu@`o
+essere eccessivo.
+
+Si pu@`o chiedere a @command{gawk} di non scaricare direttamente dati
+ma di bufferizzarli, in uno dei seguenti due modi:
+
+@itemize @bullet
+@item
+Impostare @code{PROCINFO["BUFFERPIPE"]} a un valore qualsiasi.
+Dopo aver fatto questo, @command{gawk} bufferizzer@`a i dati per tutte
+le @dfn{pipe}.
+
+@item
+Impostare @code{PROCINFO["@var{un-comando}", "BUFFERPIPE"]} a un
+valore qualsiasi. In tal caso, solo i dati relativi al comando
+@var{un-comando} saranno bufferizzati.
+@end itemize
+
+Uno degli elementi visti sopra @emph{deve} essere impostato nel
+vettore @code{PROCINFO} @emph{prima} di eseguire la prima istruzione
+@code{print} o @code{printf} diretta alla @dfn{pipe}.
+Se lo si fa dopo che dell'output @`e gi@`a stato inviato alla @dfn{pipe},
+@`e troppo tardi.
+
+Utilizzare questa funzionalit@`a pu@`o modificare il comportamento
+dell'output [cambiando l'ordine di quel che viene stampato],
+quindi occorre stare attenti a quello che si fa.
@node Continuazione dopo errori
@section Abilitare continuazione dopo errori in output
+@c FIXME: Add indexing
@ifnotinfo
Questa
@@ -12366,7 +12652,10 @@ In modalit@`a POSIX (@pxref{Opzioni}), @command{gawk} non consente
caratteri protetti di avanzamento riga. Altrimenti, il
comportamento @`e quello descritto sopra.
-BKW @command{awk} e BusyBox @command{awk}
+BKW @command{awk}@footnote{In tutti gli esempi contenuti in
+questo @value{DOCUMENT}, il comando @command{nawk}
+richiama BWK @command{awk}.}
+e BusyBox @command{awk}
tolgono la barra inversa, ma lasciano indisturbato il carattere
di avanzamento riga, che fa quindi parte della stringa:
@@ -15677,12 +15966,17 @@ specificati sulla riga di comando di @command{gawk}.
Come con le regole @code{BEGIN} ed @code{END}
@ifnottex
@ifnotdocbook
+@ifnotlatex
(@pxref{BEGIN/END}),
+@end ifnotlatex
@end ifnotdocbook
@end ifnottex
@iftex
(si veda la @value{SECTION} precedente),
@end iftex
+@iflatex
+(si veda la @value{SECTION} precedente),
+@end iflatex
@ifdocbook
(si veda la @value{SECTION} precedente),
@end ifdocbook
@@ -17438,13 +17732,13 @@ uno dei seguenti:
Microsoft Windows, utilizzando MinGW.
@item "os390"
-OS/390.
+OS/390 (noto anche come z/OS).
@item "posix"
-GNU/Linux, Cygwin, Mac OS X, e sistemi Unix tradizionali.
+GNU/Linux, Cygwin, macOS, e sistemi Unix tradizionali.
@item "vms"
-OpenVMS o Vax/VMS.
+OpenVMS.
@end table
@item PROCINFO["pgrpid"]
@@ -17455,6 +17749,17 @@ Il @dfn{ID di gruppo del processo} del programma corrente.
@cindex @dfn{process ID} del programma @command{gawk}
Il @dfn{process ID} del programma corrente.
+@item PROCINFO["pma"]
+@cindex memoria persistente @subentry disponibile in @command{gawk}
+@cindex PMA (allocatore di memoria persistente) @subentry disponibile in @command{gawk}
+@cindex allocatore di memoria persistente (PMA) @subentry disponibile in @command{gawk}
+@cindex memoria persistente (PMA) @subentry disponibile in @command{gawk}
+La versione dell'allocatore di memoria persistente (PMA)
+disponibile in @command{gawk}.
+Questo elemento non sar@`a presente se l'allocatore di memoria
+persistente non @`e disponibile.
+@xref{Memoria persistente}.
+
@item PROCINFO["ppid"]
@cindex @dfn{parent process ID} del programma @command{gawk}
Il @dfn{ID di processo del padre} del programma corrente.
@@ -17534,6 +17839,14 @@ I seguenti elementi consentono di modificare il comportamento di
@command{gawk}:
@table @code
+@item PROCINFO["BUFFERPIPE"]
+Se questo elemento esiste, tutto l'output alla @dfn{pipe} viene
+bufferizzato.
+
+@item PROCINFO["@var{un-comando}", "BUFFERPIPE"]
+Rende bufferizzato l'output del comnado @var{un-comando}.
+@xref{Noflush}.
+
@item PROCINFO["NONFATAL"]
Se questo elemento esiste, gli errori di I/O per tutte le ridirezioni
consentono la prosecuzione del programma.
@@ -18070,10 +18383,10 @@ concettualmente, se i valori degli elementi sono 8, @code{"pippo"},
@float Figura,vettore-elementi
@caption{Un vettore contiguo}
@ifset SMALLPRINT
-@center @image{vettore-elementi, 11cm, , Un vettore contiguo}
+@center @image{gawk-vettore-elementi, 11cm, , Un vettore contiguo}
@end ifset
@ifclear SMALLPRINT
-@center @image{vettore-elementi, , , Un vettore contiguo}
+@center @image{gawk-vettore-elementi, , , Un vettore contiguo}
@end ifclear
@end float
@end ifnotdocbook
@@ -18082,7 +18395,7 @@ concettualmente, se i valori degli elementi sono 8, @code{"pippo"},
<figure id="vettore-elementi" float="0">
<title>Un vettore contiguo</title>
<mediaobject>
-<imageobject role="web"><imagedata fileref="vettore-elementi.png" format="PNG"/></imageobject>
+<imageobject role="web"><imagedata fileref="gawk-vettore-elementi.png" format="PNG"/></imageobject>
</mediaobject>
</figure>
@end docbook
@@ -18823,9 +19136,10 @@ successivamente:
@example
@dots{}
-if ("sorted_in" in PROCINFO) @{
+if ("sorted_in" in PROCINFO)
ordine_salvato = PROCINFO["sorted_in"]
- PROCINFO["sorted_in"] = "@@val_str_desc" # o qualcos'altro
+
+PROCINFO["sorted_in"] = "@@val_str_desc" # o qualcos'altro
@}
@dots{}
if (ordine_salvato)
@@ -20394,7 +20708,7 @@ Se @var{separacampo} @`e omesso, si usa il valore di @code{FS}.
@code{@var{vettore}[@var{i}+1]}.
Se @var{separacampo} @`e uno spazio bianco, ogni eventuale spazio bianco
a inizio stringa viene messo in @code{@var{separatori}[0]} e ogni
-eventuale spazio bianco a fine stringa viene messo in
+eventuale spazio bianco a fine stringa viene messo in
@code{@var{separatori}[@var{n}]}, dove @var{n} @`e il valore restituito da
@code{split()} (cio@`e il numero di elementi in @var{vettore}).
@@ -20419,13 +20733,22 @@ a[3] = "sac"
e imposta il contenuto del vettore @code{separatori} come segue:
@example
-seps[1] = "-"
-seps[2] = "-"
+separatori[1] = "-"
+separatori[2] = "-"
@end example
@noindent
Il valore restituito da questa chiamata a @code{split()} @`e tre.
+Se @command{gawk} @`e chiamato con l'opzione @option{--csv}, una chiamata
+a @code{split()} con due soli argomenti, divide la stringa usando le
+regole di analisi dei file di dati CSV, come esposto in
+@ref{Campi separati da virgola}. Con tre o quattro argomenti,
+@code{split()} funzione come visto sopra. La chiamata con quattro
+argomenti non avrebbe senso per i file CSV, poich@'e ogni elemento
+del vettore @var{separatori} consisterebbe semplicemente in una
+stringa che contiene una virgola.
+
@cindex differenze tra @command{awk} e @command{gawk} @subentry funzione @code{split()}
Come nella divisione in campi dei record in input, quando il valore di
@var{separacampo} @`e @w{@code{" "}}, gli spazi bianchi a inizio e fine stringa
@@ -21800,7 +22123,7 @@ L'ora espressa in numero di secondi a partire dall'Epoca.
@ignore
@item %v
-La data in formato VMS (p.es., @samp{20-JUN-1991}).
+La data in formato OpenVMS (p.es., @samp{20-JUN-1991}).
@end ignore
@end table
@@ -23248,6 +23571,13 @@ valore pi@`u alto contenuto nel vettore.
@node Variabili di tipo dinamico
@subsection Funzioni e loro effetti sul tipo di una variabile
+@quotation
+@i{@`E una farcitura per il deserto! @*@footnote{Si tratta di un
+gioco di parole fra "desert" (deserto) e "dessert" (dolce).}
+@`E una cera per pavimenti!}
+@author Saturday Night Live (quando era ancora divertente)
+@end quotation
+
@command{awk} @`e un linguaggio molto fluido.
@`E possible che @command{awk} non sia in grado di stabilire se un
identificativo rappresenta una variabile scalare o un vettore,
@@ -23274,8 +23604,65 @@ un errore fatale, quindi @command{awk} non arriver@`a a segnalare il secondo
errore. Se si commenta la prima chiamata e si riesegue il
programma, a quel punto @command{awk} terminer@`a con un messaggio
relativo al secondo errore.
-Solitamente queste cose non causano grossi problemi, ma @`e bene
-esserne a conoscenza.
+
+Ecco un esempio pi@`u complesso:
+
+@example
+BEGIN @{
+ funky(a)
+ if (A == 0)
+ print "<" a ">"
+ else
+ print a[1]
+@}
+
+function funky(arr)
+@{
+ if (A == 0)
+ arr = 1
+ else
+ arr[1] = 1
+@}
+@end example
+
+In questo esempio, la funzione usa il parametro che le viene
+passato in modo differente a seconda del valore della variabile
+globale @code{A}.
+Se @code{A} vale zero, il parametro @code{arr} @`e trattato come una
+variabile scalare. Altrimenti @`e trattato come un vettore.
+
+Ci sono due modi in cui questo programma potrebbe comportarsi.
+@command{awk} potrebbe determinare che, nel programma principale
+@code{a} ha un indice (ossia @`e un elemento di un vettore), e quindi
+considerarlo un vettore (nella fase di analisi del programma, ossia
+prima ancora che il programma inizi la sua esecuzione.
+BWK @code{awk}, @code{mawk}, e forse altri fanno questo:
+
+@example
+$ @kbd{nawk -v A=0 -f funky.awk}
+@error{} nawk: can't assign to a; it's an array name.
+@error{} source line number 11
+$ @kbd{nawk -v A=1 -f funky.awk}
+@print{} 1
+@end example
+
+Oppure @command{awk} potrebbe attendere il momento in cui l'istruzione
+viene eseguita, per determinare il tipo della variabile @code{a}.
+In tal caso, poich@'e @code{a} non @`e ancora stato usato prima di essere
+passato alla funzione, l'uso che ne fa la funzione determina il tipo
+della variabile, che quindi pu@`o diventare scalare o vettoriale.
+@command{gawk} e MKS @command{awk} si comportano cos@`{@dotless{i}}:
+
+@example
+$ @kbd{gawk -v A=0 -f funky.awk}
+@print{} <>
+$ @kbd{gawk -v A=1 -f funky.awk }
+@print{} 1
+@end example
+
+POSIX non specifica quale dei due comportamenti sia quello corretto,
+quindi occorre essere consapevoli che differenti implementazioni di
+@command{awk} si comportano in modi diversi.
@node Chiamate indirette
@section Chiamate indirette di funzione
@@ -24116,6 +24503,8 @@ programmazione.
con apici alla shell.
* Funzione isnumeric:: Una funzione per controllare se un valore
@`e numerico.
+* Funzione tocsv:: Una funzione per convertire l'output
+ al formato CSV.
@end menu
@node Funzione strtonum
@@ -25011,6 +25400,102 @@ uguale a quella originale.
Tuttavia, per farlo, utilizza la funzione @code{typeof()}
(@pxref{Funzioni per i tipi}), che @`e disponibile solo in @command{gawk}.
+@node Funzione tocsv
+@subsection Produrre output in formato CSV
+
+@cindex campi separati da virgola (CSV) come dati @subentry generare output in formato CSV
+@cindex CSV (dati con valori separati da virgola) @subentry generare output in formato CSV
+@cindex dati CSV (campi separati da virgola) @subentry generati da @command{gawk}
+L'opzione @option{--csv} di @command{gawk} permette di gestire dati di input in formato
+CSV (@pxref{Campi separati da virgola}).
+
+Se si volesse invece, a partire da dati normali, generare in output
+dati in formato CSV?
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION} fornisce delle funzioni che consentono di farlo.
+
+La prima funzione, @code{tocsv()}, ha come input un vettore
+formato da campi di dati. Il vettore dovrebbe avere come indice
+i numeri, a partire dall'uno. Il secondo parametro, opzionale,
+specifica quale sia il separatore dei campi. Se non se ne
+specifica uno, quello di default @`e la virgola.
+
+La funzione @`e in grado di mettere correttamente in formato
+CSV campi che contengono al loro interno doppi apici, caratteri
+a-capo, o il carattere stesso usato come separatore.
+Il record finale in formato CSV viene preparato e restituito
+dalla funzione.
+
+@cindex @code{tocsv()} @subentry funzione definita dall'utente
+@cindex funzione definita dall'utente @subentry @code{tocsv()}
+@example
+@c file eg/lib/tocsv.awk
+# tocsv.awk --- convertire dati al formato CSV
+@c endfile
+@ignore
+@c file eg/lib/tocsv.awk
+#
+# Arnold Robbins, arnold@@skeeve.com, Public Domain
+# April 2023
+@c endfile
+@end ignore
+@c file eg/lib/tocsv.awk
+
+function tocsv(campi, sep, i, j, n_campi, risultato)
+@{
+ if (length(campi) == 0)
+ return ""
+
+ if (sep == "")
+ sep = ","
+ delete n_campi
+ for (i = 1; i in campi; i++) @{
+ n_campi[i] = campi[i]
+ if (n_campi[i] ~ /["\n]/ || index(n_campi[i], sep) != 0) @{
+ gsub(/"/, "\"\"", n_campi[i]) # raddoppia doppi apici
+ n_campi[i] = "\"" n_campi[i] "\"" # fra doppi apici
+ @}
+ @}
+
+ risultato = n_campi[1]
+ j = length(n_campi)
+ for (i = 2; i <= j; i++)
+ risultato = risultato sep n_campi[i]
+
+ return risultato
+@}
+@c endfile
+@end example
+
+La funzione che segue, @code{tocsv_rec()} serve per utilizzare
+@code{tocsv()}. Si pu@`o usare se si vuol convertire un record in
+input al formato CSV. La funzione stessa si limita a copiare i
+campi del record in un vettore, che viene poi passato alla funzione
+@code{tocsv()} che effettua la conversione.
+La funzione accetta come suo primo parametro un carattere di
+separazione opzionale, che viene semplicemente passato alla funzione
+@code{tocsv()}.
+
+@cindex @code{tocsv_rec()} @subentry funzione definita dall'utente
+@cindex funzione definita dall'utente @subentry @code{tocsv_rec()}
+@example
+@c file eg/lib/tocsv.awk
+function tocsv_rec(sep, i, campi)
+@{
+ delete campi
+ for (i = 1; i <= NF; i++)
+ campi[i] = $i
+
+ return tocsv(campi, sep)
+@}
+@c endfile
+@end example
+
@node Gestione File Dati
@section Gestione di @value{DF}
@@ -25044,7 +25529,7 @@ presenta funzioni utili per gestire @value{DF} da riga di comando.
@cindex file @subentry gestione di @subentry limiti dei file-dati
@cindex file @subentry inizializzazione e pulizia
Ognuna delle regole @code{BEGIN} ed @code{END} viene eseguita esattamente
-solo una volta, rispettivamente all'inizio e alla fine del programma
+una volta sola, rispettivamente all'inizio e alla fine del programma
@command{awk} (@pxref{BEGIN/END}).
Una volta noi (gli autori di @command{gawk}) siamo venuti in contatto
con un utente che
@@ -25851,7 +26336,7 @@ Si continua poi:
@example
@c file eg/lib/getopt.awk
- if (substr(opzioni_lunghe, i+1+length(unaopz), 1) == ":") @{
+ if (substr(opzioni_lunghe, i+1+RLENGTH, 1) == ":") @{
if (j > 0)
Optarg = substr(argv[Optind], j + 1)
else
@@ -28416,7 +28901,7 @@ Ci sono due aspetti importanti da considerare qui:
@itemize @bullet
@item
-Si deve essere in grado di generare facilmente tali suffissi e in
+Si dev'essere in grado di generare facilmente tali suffissi e in
particolare di gestire facilmente lo ``scorrimento''; per esempio,
passare da @samp{abz} ad @samp{aca}.
@@ -29362,8 +29847,11 @@ Si spera che siano interessanti e divertenti.
Un errore comune quando si scrive un testo lungo @`e quello di ripetere
accidentalmente delle parole. Tipicamente lo si pu@`o vedere in testi del tipo
``questo programma fa quanto segue segue@dots{}'' Quando il testo @`e pubblicato in rete, spesso
-le parole duplicate sono poste tra il termine di
-una riga e l'inizio di un'altra, il che rende difficile scoprirle.
+le parole duplicate sono poste tra il termine di una
+@iftex
+una
+@end iftex
+riga e l'inizio di un'altra, il che rende difficile scoprirle.
@c as here!
Questo programma, @file{dupword.awk}, legge un file una riga alla volta
@@ -29720,7 +30208,7 @@ per ogni record:
@c endfile
@end ignore
@c file eg/prog/translate.awk
-# Bug: non gestisce cose del tipo tr A-Z a-z; deve essere
+# Bug: non gestisce cose del tipo tr A-Z a-z; dev'essere
# descritto carattere per carattere.
# Tuttavia, se `a' @`e pi@`u corto di `da',
# l'ultimo carattere in `a' @`e usato per il resto di `da'.
@@ -33117,6 +33605,10 @@ formato con cui sono stati inseriti.
@node Memoria persistente
@section Preservare dati fra successive esecuzioni di @command{gawk}
+@cindex PMA (allocatore di memoria persistente)
+@cindex allocatore di memoria persistente (PMA)
+@cindex memoria persistente (PMA)
+
A partire dalle versione @value{PVERSION} 5.2, @command{gawk} supporta
la @dfn{memoria persistente} [@dfn{persistent memory}].
@@ -33144,8 +33636,8 @@ in @command{gawk} in questo modo:
@example
$ @kbd{gawk --version}
-@print{} GNU Awk 5.2.0, API 3.2, PMA Avon 7, (GNU MPFR 4.0.1, GNU MP 6.1.2)
-@print{} Copyright (C) 1989, 1991-2022 Free Software Foundation.
+@print{} GNU Awk 5.2.1, API 3.2, PMA Avon 8-g1, (GNU MPFR 4.1.0, GNU MP 6.2.1)
+@print{} Copyright (C) 1989, 1991-2023 Free Software Foundation.
@dots{}
@end example
@@ -33153,11 +33645,19 @@ $ @kbd{gawk --version}
Se @`e presente la stringa @samp{PMA} con un indicatore di versione, allora
la memoria persistente @`e supportata.
+@cindex @env{REALLY_USE_PERSIST_MALLOC} (variabile d'ambiente)
+@cindex variabili d'ambiente @subentry @env{REALLY_USE_PERSIST_MALLOC}
Finora la memoria persistente @`e stata testata solo nei sistemi operativi
-GNU/Linux, Cygwin, Solaris 2.11 e in Mac OS.
-In altri sistemi operativi, la situazione pu@`o essere diversa, e potrebbero
-essere necessarie ulteriori indagini prima di utilizzare questa
-funzionalit@`a.
+GNU/Linux, Cygwin, Solaris 2.11, sistemi macOS su hardware Intel,
+FreeBSD 13.1 e OpenBSD 7.1.
+Su tutti gli altri sistemi, la memoria persistente @`e disabilitata
+per default. Si pu@`o chiedere di abilitarla esportando la
+variabile d'ambiente @env{REALLY_USE_PERSIST_MALLOC} con un
+valore diverso dalla stringa nulla, prima di eseguire
+@command{configure}
+(@pxref{Installazione veloce}).
+Se lo fate, e tutti i test passano senza errori, siete pregati
+di informare il manutentore di @command{gawk}.
Per usare la memoria persistente, seguire questa procedura:
@@ -33171,6 +33671,14 @@ di utilit@`a @command{truncate}:
$ @kbd{truncate -s 4G dati.pma}
@end example
+@item
+Si raccomanda (ma non @`e obbligatorio farlo) di modificare i permessi
+di accesso al file in modo che solo il proprietario possa leggere e
+aggiornare il file:
+
+@example
+$ @kbd{chmod 0600 dati.pma}
+@end example
@cindex @env{GAWK_PERSIST_FILE} (variabile d'ambiente)
@cindex variabili d'ambiente @subentry @env{GAWK_PERSIST_FILE}
@@ -33264,19 +33772,34 @@ di memoria persistente.
codice sorgente @file{support/pma.c} per comprendere il comportamento
dei vari livelli di verbosit@`a.
-@quotation NOTA
+Ci sono alcune limitazioni all'uso della memoria persistente:
+
+@itemize @bullet
+@item
Se si usa la libreria MPFR (opzione @option{-M}) nella prima esecuzione
di un programma che fa uso della memoria persistente si @emph{deve}
usarla in tutte le esecuzioni successive.
Analogamente, se non si usa l'opzione @option{-M} nella prima esecuzione
non va usata in alcuna esecuzione successiva.
-Mischiare esecuzioni che usano la libreria MPFR con esecuzioni che non
-la usano, utilizzando lo stesso file di memoria persistente produrr@`a
-risultati inattesi e/o errori fatali.
-@command{gawk} non rileva una tale situazione, e non @`e detto che lo
-far@`a in qualche versione futura.
-@end quotation
+Non @`e consentito alternare esecuzioni che usano la libreria MPFR con
+esecuzioni che non la usano. Se @command{gawk} rileva questa
+situazione, termina l'esecuzione con un errore fatale.
+
+@item
+Il filesystem CIFS in ambiente GNU/Linux risulta non
+funzionare bene con l'allocatore PMA.
+Quindi, non va usato un file di appoggio per la memoria persistente
+residente su un filesystem CIFS.
+
+@item
+Se @command{gawk} @`e eseguito dall'utente @command{root}, l'uso
+della memoria persistente non @`e consentito.
+Ci@`o al fine di evitare la possibilit@`a che dati "privati"
+siano salvati nel file di appoggio e vengano successivamente
+acceduti da un altro utente o hacker (che a sua volta sia divenuto
+@command{root}.
+@end itemize
Terence Kelly ha preparato un documento a parte, dedicato alla
memoria persistente @cite{@value{PMGAWKTITLE}},
@@ -34732,7 +35255,7 @@ quello di programmi che risiedono su file.)
Nel nostro caso, il debugger verr@`a invocato in questo modo:
@example
-$ @kbd{gawk -D -f getopt.awk -f join.awk -f uniq.awk -1 file_di_input}
+$ @kbd{gawk -D -f getopt.awk -f join.awk -f uniq.awk -- -1 file_di_input}
@end example
@cindex @env{AWKPATH} (variabile d'ambiente)
@@ -34744,6 +35267,10 @@ questa sintassi @`e leggermente differente da quello che sono abituati a usare.
Col debugger di @command{gawk}, si danno gli argomenti per eseguire il
programma nella riga di comando al debugger piuttosto che come parte del
comando @code{run} al prompt del debugger.)
+Il doppio trattino @option{--} termina le opzioni specificate a @command{gawk}
+sulla riga di comando. Non @`e strettamente necessaria in questo caso,
+ma lo diviente se un'opzione destinata al programma @command{awk}
+@`e in conflitto con qualche opzione di @command{gawk}.
L'opzione @option{-1} @`e un'opzione per @file{uniq.awk}.
@cindex debugger @subentry prompt
@@ -37067,8 +37594,8 @@ Si pu@`o verificare se il supporto a MPFR @`e disponibile in questo modo:
@example
$ @kbd{gawk --version}
-@print{} GNU Awk 5.2.0, API 3.2, PMA Avon 7, (GNU MPFR 4.0.1, GNU MP 6.1.2)
-@print{} Copyright (C) 1989, 1991-2022 Free Software Foundation.
+@print{} GNU Awk 5.2.1, API 3.2, PMA Avon 8-g1, (GNU MPFR 4.1.0, GNU MP 6.2.1)
+@print{} Copyright (C) 1989, 1991-2023 Free Software Foundation.
@dots{}
@end example
@@ -38475,10 +39002,10 @@ Questo si pu@`o vedere in @inlineraw{docbook, <xref linkend="figura-carica-esten
@float Figura,figura-carica-estensione
@caption{Caricamento dell'estensione}
@ifclear SMALLPRINT
-@center @image{api-figura1, , , Caricamento dell'estensione}
+@center @image{gawk-api-figura1, , , Caricamento dell'estensione}
@end ifclear
@ifset SMALLPRINT
-@center @image{api-figura1, 11cm, , Caricamento dell'estensione}
+@center @image{gawk-api-figura1, 11cm, , Caricamento dell'estensione}
@end ifset
@end float
@@ -38488,7 +39015,7 @@ Questo si pu@`o vedere in @inlineraw{docbook, <xref linkend="figura-carica-esten
<figure id="figura-carica-estensione" float="0">
<title>Caricamento dell'estensione</title>
<mediaobject>
-<imageobject role="web"><imagedata fileref="api-figura1.png" format="PNG"/></imageobject>
+<imageobject role="web"><imagedata fileref="gawk-api-figura1.png" format="PNG"/></imageobject>
</mediaobject>
</figure>
@end docbook
@@ -38516,10 +39043,10 @@ Questo @`e shown in @inlineraw{docbook, <xref linkend="figura-registrare-una-nuo
@float Figura,figura-registrare-una-nuova-funzione
@caption{Registrare una nuova funzione}
@ifclear SMALLPRINT
-@center @image{api-figura2, , , Registrare una nuova funzione}
+@center @image{gawk-api-figura2, , , Registrare una nuova funzione}
@end ifclear
@ifset SMALLPRINT
-@center @image{api-figura2, 11cm , , Registrare una nuova funzione}
+@center @image{gawk-api-figura2, 11cm , , Registrare una nuova funzione}
@end ifset
@end float
@end ifnotdocbook
@@ -38528,7 +39055,7 @@ Questo @`e shown in @inlineraw{docbook, <xref linkend="figura-registrare-una-nuo
<figure id="figura-registrare-una-nuova-funzione" float="0">
<title>Registering a new function</title>
<mediaobject>
-<imageobject role="web"><imagedata fileref="api-figura2.png" format="PNG"/></imageobject>
+<imageobject role="web"><imagedata fileref="gawk-api-figura2.png" format="PNG"/></imageobject>
</mediaobject>
</figure>
@end docbook
@@ -38556,10 +39083,10 @@ Questo @`e mostrato in @inlineraw{docbook, <xref linkend="figura-chiamata-nuova-
@float Figura,figura-chiamata-nuova-funzione
@caption{Chiamata della nuova funzione}
@ifclear SMALLPRINT
-@center @image{api-figura3, , , Chiamata della nuova funzione}
+@center @image{gawk-api-figura3, , , Chiamata della nuova funzione}
@end ifclear
@ifset SMALLPRINT
-@center @image{api-figura3,11cm , , Chiamata della nuova funzione}
+@center @image{gawk-api-figura3,11cm , , Chiamata della nuova funzione}
@end ifset
@end float
@end ifnotdocbook
@@ -38568,7 +39095,7 @@ Questo @`e mostrato in @inlineraw{docbook, <xref linkend="figura-chiamata-nuova-
<figure id="figura-chiamata-nuova-funzione" float="0">
<title>Chiamata della nuova funzione</title>
<mediaobject>
-<imageobject role="web"><imagedata fileref="api-figura3.png" format="PNG"/></imageobject>
+<imageobject role="web"><imagedata fileref="gawk-api-figura3.png" format="PNG"/></imageobject>
</mediaobject>
</figure>
@end docbook
@@ -39658,9 +40185,9 @@ registrate, quando viene invocato specificando l'opzione @option{--version}.
@cindex input @subentry analizzatore di @subentry personalizzato
Per default, @command{gawk} legge file di testo come input. Il valore della
-variabile @code{RS} @`e usato per determinare la fine di un record, e subito
-dopo la variabile @code{FS} (o @code{FIELDWIDTHS} o @code{FPAT}) viene usata
-per suddividerlo in campi
+variabile @code{RS} @`e usato per determinare la fine di un record in input,
+e subito dopo la variabile @code{FS} (o @code{FIELDWIDTHS} o @code{FPAT})
+viene usata per suddividerlo in campi
@iftex
(@pxrefil{Leggere file}).
@end iftex
@@ -39776,14 +40303,41 @@ inizialmente) da @code{@var{XXX}_can_take_file()}, e quelli che sono usati da
Il nome del file.
@item int fd;
-Un descrittore di file per il file. Se @command{gawk} riesce ad aprire
-il file, il valore di @code{fd} @emph{non} sar@`a uguale a
-@code{INVALID_HANDLE} [descrittore non valido]. In caso contrario,
-quello sar@`a il valore.
+Un descrittore di file per il file. @command{gawk} tenta di aprire
+il file in lettura usando la chiamata di sistema @code{open()}.
+Se il file viene effettivamente aperto, il valore di @code{fd}
+@emph{non} sar@`a uguale a @code{INVALID_HANDLE}
+[descrittore non valido].
+In caso contrario, il valore sar@`a quello.
+
+Un'estensione pu@`o decidere che non desidera usare il descrittore
+di file aperto che le viene passato da @command{gawk}.
+In tal caso pu@`o chiudere il file e impostare il relativo
+descrittore di file @code{fd} al valore @code{INVALID_HANDLE},
+oppure ignorarlo e mantenere un suo proprio descrittore di file
+nei suoi dati privati, raggiungibili usando il puntatore
+@code{opaque} (vedere pi@`u sotto in questa lista).
+In ogni caso, se il descrittore di file @`e valido, @emph{non}
+dovrebbe essere sovrascritto con un altro valore; se lo si fa,
+si causa una perdita di dati.
@item struct stat sbuf;
Se il descrittore di file @`e valido, @command{gawk} avr@`a riempito i campi di
questa struttura invocando la chiamata di sistema @code{fstat()}.
+Altrimenti, se la chiamata di sistema @code{lstat()} @`e disponibile,
+essa verr@`a usata. Se neppure @code{lstat()} @`e disponibile, allora
+verr@`a usata la chiamata di sistema @code{stat()}.
+
+L'ottenere informazioni relative al file consente alle estensioni di
+controllare il tipo di file, anche se non sar@`a poi possibile aprirlo.
+Ci@`o capita, per esempio, nei sistemi Windows, quando si tenta di
+usare @code{open()} su una directory.
+
+Se @command{gawk} non sar@`a riuscito a ottenere le informazioni
+relative al file, allora @code{sbuf} conterr@`a zeri binari.
+In particolare, il codice dell'estensione pu@`o testare se il campo
+@samp{sbuf.st_mode == 0}. Se @`e questo il caso, allora in
+@code{sbuf} non @`e contenuta alcuna informazione.
@end table
La funzione @code{@var{XXX}_can_take_file()} dovrebbe esaminare i campi di
@@ -39821,7 +40375,7 @@ Questo puntatore a funzione dovrebbe puntare a una funzione che crea i record
in input. Tale funzione @`e il nucleo centrale dell'analizzatore di input.
Il suo modo di operare @`e descritto nel testo che segue questo elenco.
-@item ssize_t (*read_func)();
+@item ssize_t (*read_func)(int, void *, size_t);
Questo puntatore a funzione dovrebbe puntare a una funzione che ha lo
stesso comportamento della chiamata di sistema standard POSIX @code{read()}.
@`E in alternativa al puntatore a @code{get_record}. Il relativo comportamento
@@ -39848,14 +40402,16 @@ record in input. I parametri sono i seguenti:
@table @code
@item char **out
-Questo @`e un puntatore a una variabile @code{char *} che @`e impostatata in modo
-da puntare al record. @command{gawk} usa una sua copia locale dei dati,
-quindi l'estensione deve gestire la relativa area di memoria.
+Questo @`e un puntatore a una variabile @code{char *} che @`e impostatata
+in modo da puntare al record. @command{gawk} usa una sua copia locale dei
+dati, quindi l'estensione dell'utente deve gestire la relativa area di
+memoria.
@item struct awk_input *iobuf
-Questa @`e la struttura @code{awk_input_buf_t} per il file. I campi dovrebbero
-essere usati per leggere i dati (@code{fd}) e per gestire lo stato privato
-(@code{opaque}), se necessario.
+Questa @`e la struttura @code{awk_input_buf_t} per il file.
+Due dei suoi campi dovrebbero essere usati dall'estensione utente:
+@code{fd} per leggere i dati, e @code{opaque} per gestire lo stato privato
+se necessario.
@item int *errcode
Se si verifica un errore, @code{*errcode} dovrebbe essere impostato a un
@@ -39867,8 +40423,8 @@ Se il concetto ``fine record'' @`e applicabile,
@code{*rt_start} dovrebbe essere impostato per puntare ai dati da usare come
@code{RT}, e @code{*rt_len} dovrebbe essere impostata alla lunghezza di quel
campo. In caso contrario, @code{*rt_len} dovrebbe essere impostata a zero.
-@command{gawk} usa una sua copia di questi dati, quindi l'estensione deve
-gestire tale memoria.
+Anche qui @command{gawk} usa una sua copia di questi dati, quindi
+l'estensione utente deve gestire tale memoria.
@item const awk_fieldwidth_info_t **field_width
Se @code{field_width} non @`e @code{NULL}, @code{*field_width} sar@`a
@@ -39880,6 +40436,7 @@ inoltre essa deve rimanere disponibile almeno fino alla successiva chiamata a
@code{get_record} o a @code{close_func}. Si noti inoltre che
@code{field_width} vale @code{NULL} quando @code{getline} sta assegnando
i risultati a una variabile, e quindi un'analisi del campo non @`e necessaria.
+
Se l'analizzatore imposta @code{*field_width},
allora @command{gawk} usa questa descrizione per analizzare il record in
input, e il valore di @code{PROCINFO["FS"]} sar@`a @code{"API"} finch@'e questo
@@ -39938,15 +40495,8 @@ valore preso da una variabile @command{awk}, come fa l'estensione XML
inclusa nel progetto @code{gawkextlib} (@pxref{gawkextlib}).
In quest'ultimo caso, il codice in una regola @code{BEGINFILE}
pu@`o controllare @code{FILENAME} ed @code{ERRNO} per decidere se
-attivare un analizzatore di input (@pxref{BEGINFILE/ENDFILE}) oppure no.
-
-Un analizzatore di input va registrato usando la seguente funzione:
-
-@table @code
-@item void register_input_parser(awk_input_parser_t *input_parser);
-Registra l'analizzatore di input puntato da @code{input_parser} con
-@command{gawk}.
-@end table
+attivare un analizzatore di input utente oppure no
+(@pxref{BEGINFILE/ENDFILE}).
Se si vuole ignorare il meccanismo di default per l'analisi dei campi
per un determinato record, si deve riempire una struttura
@@ -39993,6 +40543,14 @@ dimensione pu@`o essere usata come argomento per @code{malloc()} o in una
struttura @dfn{union} per allocare spazio staticamente.
Per un esempio si pu@`o vedere l'estensione di esempio @code{readdir_test}.
+Un analizzatore di input va registrato usando la seguente funzione:
+
+@table @code
+@item void register_input_parser(awk_input_parser_t *input_parser);
+Registra l'analizzatore di input puntato da @code{input_parser} con
+@command{gawk}.
+@end table
+
@node Processori di output
@subsubsection Registrare un processore di output
@cindex personalizzato @subentry processore di output
@@ -40108,11 +40666,14 @@ appropriate per fare il lavoro richiesto.
La funzione @code{@var{XXX}_can_take_file()} dovrebbe decidere in base ai
campi @code{nome} e @code{modo}, e a ogni altro ulteriore indicatore di stato
(p.es., valori di variabili @command{awk}) adatto allo scopo.
+@command{gawk} tenta di aprire in scrittura il file indicato.
+L'elemento @code{fp} varr@`a @code{NULL} solo se non si riesci ad aprire
+il file.
Quando @command{gawk} chiama @code{@var{XXX}_take_control_of()}, la funzione
dovrebbe riempire i rimanenti campi
in modo opportuno, tranne che per @code{fp}, che dovrebbe essere usato
-normalmente.
+normalmente se il suo valore non @`e @code{NULL}.
Il processore di output va registrato usando la seguente funzione:
@@ -40987,7 +41548,7 @@ richiede di comprendere il modo con cui tali valori sono convertiti in stringhe
Come per @emph{tutte} le stringhe passate a @command{gawk} da
un'estensione, la memoria che contiene il valore della stringa con chiave
-@code{index} deve essere stata acquisita utilizzando le funzioni
+@code{index} dev'essere stata acquisita utilizzando le funzioni
@code{gawk_malloc()}, @code{gawk_calloc()} o @code{gawk_realloc()}, e
@command{gawk} rilascer@`a (al momento opportuno) la relativa memoria.
@@ -41285,7 +41846,7 @@ codice di un'estensione:
@itemize @value{BULLET}
@item
-Il vettore appena creato deve essere subito messo nella Tabella dei simboli di
+Il vettore appena creato dev'essere subito messo nella Tabella dei simboli di
@command{gawk}. Solo dopo aver fatto questo @`e possibile aggiungere elementi
al vettore.
@@ -43348,8 +43909,9 @@ valore uno se completa il lavoro o zero se non va a buon fine.
Questa funzione ha come argomento una stringa, che @`e il nome del file
dal quale leggere i valori di molteplici variabili globali.
Per ogni variabile contenuta nel file, il relativo valore viene
-caricato, a meno che la variabile sia gi@`a esistente.
-Se la variabile esiste gi@`a, il valore della variabile specificato
+caricato, a meno che alla variabile sia gi@`a stato assegnato un
+valore, o sia stata usata come un vettore.
+In tal caso, il valore della variabile specificato
nel file viene ignorato. Restituisce il
valore uno se completa il lavoro o zero se non va a buon fine.
@end table
@@ -43439,18 +44001,6 @@ if (contents == "" && ERRNO != "") @{
@node Esempio di estensione Time
@subsection Funzioni dell'estensione time
-@quotation ATTENZIONE
-A partire da @command{gawk} @value{PVERSION} 5.1.0, quest'estensione @`e
-da considerarsi obsoleta. @`E sostituita dall'estensione
-@code{timex} in @code{gawkextlib} (@pxref{gawkextlib}).
-
-Nella @value{PVERSION} 5.1, non viene emesso alcun messaggio di avviso
-se si usa quest'estensione.
-A partire dalla prossima versione principale, verr@`a emesso un messaggio
-di avviso. Nella versione successiva a quella, quest'estensione sar@`a
-rimossa dalla distribuzione.
-@end quotation
-
L'estensione @code{time} aggiunge due funzioni, di nome
@code{gettimeofday()} e @code{sleep()}, come segue:
@@ -43486,6 +44036,34 @@ numero intero).
Dettagli di implementazione: a seconda della disponibilit@`a nel sistema in uso,
questa funzione tenta di usare @code{nanosleep()} o @code{select()} per
ottenere il tempo di attesa richiesto.
+
+@cindex @code{strptime()} (funzione estesa)
+@cindex funzione estesa @subentry @code{strptime()}
+@item timeval = strptime(@var{string}, @var{format})
+Questa funzione accetta due argomenti, una stringa che rappresenta
+una data e un'ora e una stringa di formato che descrive i dati
+contenuti nella prima stringa.
+Viene richiamata la funzione di libreria C @code{strptime()},
+con i valori passati alla funzione.
+Se la scansione dei parametri risulta essere corretta, i risultati
+sono quindi passati alla funzione di libreria C @code{mktime()},
+i cui risultati vengono poi restituiti, e contengono il numero di
+secondi passato dall'inizio del tempo in Unix (01 gennaio 1970),
+nel fuso orario del computer, a prescindere da qualsiasi specificazione
+di fuso orario contenuta negli argomenti passati alla funzione.
+(Ci@`o equivale alla funzione predefinita @code{systime()} di
+@command{gawk}.
+Altrimenti, in caso di errore, viene restituito @minus{}1.
+
+Notare che la routine di libreria C @code{strptime()} qui
+richiamata ignora ogni indicazione di fuso orario nella stringa
+che descrive la data, restituendo sempre valori relativi al
+fuso orario del computer.
+@ignore
+It might be better to have this
+routine return a string similar to what @command{gawk}'s @code{mktime()}
+function expects, but we ran out of energy.
+@end ignore
@end table
@node Esempio di estensione API Test
@@ -43693,8 +44271,8 @@ un'estensione.
considerata come in sola lettura dall'estensione.
@item
-@emph{Tutta} la memoria passata da un'estensione a @command{gawk} deve
-essere ottenuta dalle funzioni di allocazione della memoria previste
+@emph{Tutta} la memoria passata da un'estensione a @command{gawk}
+dev'essere ottenuta dalle funzioni di allocazione della memoria previste
dall'API. @command{gawk} @`e responsabile per la gestione di quella memoria e
la libera quando @`e il momento per farlo.
@@ -44472,7 +45050,7 @@ Tandem (non-POSIX)
Compilatore pre-standard VAX C per VAX/VMS
@item
-GCC per VAX e Alpha non @`e stato verificato da parecchio tempo.
+GCC per Alpha non @`e stato verificato da parecchio tempo.
@end itemize
@@ -45219,6 +45797,10 @@ La funzione @code{getline} ridiretta @`e stata resa possibile all'interno di
(@pxref{BEGINFILE/ENDFILE}).
@item
+Supporto per continuare dopo errori di I/O non fatali
+@xref{Continuazione dopo errori}.
+
+@item
Il comando @code{where} @`e stato aggiunto al debugger
(@pxref{Stack di esecuzione}).
@@ -45440,6 +46022,34 @@ integrato, consentendo l'uso di dati persistenti
sistemi
(@pxref{Memoria persistente}).
+@item
+L'elemento @code{PROCINFO["pma"]} esiste se l'allocatore di memoria
+persistente (PMA) @`e disponibile.
+@pxref{Variabili auto-assegnate}.)
+
+@end itemize
+
+La versione 5.3 ha aggiunto le seguenti funzionalit@`a:
+
+@itemize
+@item
+Divisione in campi per file di tipo CSV (Campi separati da virgola)
+(@pxref{Campi separati da virgola}).
+
+@item
+La possibilit@`a che @command{gawk} bufferizzi l'output a @dfn{pipe}
+(@pxref{Noflush}).
+
+@item
+La sequenza di protezione @samp{\u}
+(@pxref{Sequenze di protezione}).
+
+@item
+La necessit@`a di utilizzare la libreria GNU @code{libsigsegv}
+@`e stata rimossa da @command{gawk}.
+Il valore aggiunto relativo non @`e mai stato grande e la funzionalit@`a
+causava problemi in alcuni sistemi.
+
@end itemize
@c XXX ADD MORE STUFF HERE
@@ -45457,18 +46067,20 @@ le tre versioni liberamente disponibili pi@`u usate di @command{awk}
@multitable {File speciale @file{/dev/stderr}} {BWK @command{awk} } {@command{mawk}} {@command{gawk}} {Standard attuale}
@headitem Funzionalit@`a @tab BWK @command{awk} @tab @command{mawk} @tab @command{gawk} @tab Standard attuale
+@item Operatori @code{**} e @code{**=} @tab X @tab @tab X @tab
@item Sequenza di protezione @samp{\x} @tab X @tab X @tab X @tab
-@item Stringa nulla come @code{FS} @tab X @tab X @tab X @tab
+@item Sequenza di protezione @samp{\u} @tab X @tab @tab X @tab
@item File speciale @file{/dev/stdin} @tab X @tab X @tab X @tab
@item File speciale @file{/dev/stdout} @tab X @tab X @tab X @tab
@item File speciale @file{/dev/stderr} @tab X @tab X @tab X @tab
+@item Variabile @code{BINMODE} @tab @tab X @tab X @tab
+@item Supporto CSV @tab X @tab @tab X @tab
+@item Stringa nulla come @code{FS} @tab X @tab X @tab X @tab
@item @code{delete} senza indici @tab X @tab X @tab X @tab X
@item Funzione @code{fflush()} @tab X @tab X @tab X @tab X
+@item Parola chiave @code{func} @tab X @tab @tab X @tab
@item @code{length()} di un vettore @tab X @tab X @tab X @tab
@item Istruzione @code{nextfile} @tab X @tab X @tab X @tab X
-@item Operatori @code{**} e @code{**=} @tab X @tab @tab X @tab
-@item Parola chiave @code{func} @tab X @tab @tab X @tab
-@item Variabile @code{BINMODE} @tab @tab X @tab X @tab
@item @code{RS} come @dfn{regexp} @tab X @tab X @tab X @tab
@item Funzioni gestione data/ora @tab @tab X @tab X @tab
@end multitable
@@ -45889,10 +46501,6 @@ resto del team di sviluppo.
John Malmberg ha apportato miglioramenti significativi alla versione
OpenVMS e alla relativa documentazione.
-@item
-@cindex Colombo, Antonio
-Antonio Giovanni Colombo ha riscritto diversi esempi, che non erano pi@`u
-attuali, contenuti nei primi capitoli, e gliene sono estremamente grato.
Ha inoltre preparato con Marco Curreli e mantiene la traduzione in
italiano di questo libro.
@@ -46387,8 +46995,8 @@ File necessari per compilare @command{gawk} sotto MS-Windows
(@pxref{Installazione su PC} per i dettagli).
@item vms/*
-File necessari per compilare @command{gawk} sotto Vax/VMS e OpenVMS
-(@pxref{Installazione su VMS} per i dettagli).
+File necessari per compilare @command{gawk} sotto OpenVMS
+(@pxref{Installazione su OpenVMS} per i dettagli).
@item test/*
Una serie di test per
@@ -46802,7 +47410,7 @@ vari sistemi non-Unix.
@menu
* Installazione su PC:: Installare e compilare @command{gawk}
su Microsoft Windows.
-* Installazione su VMS:: Installare @command{gawk} su VMS.
+* Installazione su OpenVMS:: Installare @command{gawk} su OpenVMS.
@end menu
@node Installazione su PC
@@ -47079,16 +47687,16 @@ automaticamente la conversione di @code{"\r\n"}, mentre cos@`{@dotless{i}} non @
In ambiente MSYS2, la compilazione usando i comandi classici
@samp{./configure && make} funziona senza necessitare di alcuna modifica.
-@node Installazione su VMS
-@appendixsubsec Compilare e installare @command{gawk} su Vax/VMS e OpenVMS
+@node Installazione su OpenVMS
+@appendixsubsec Compilare e installare @command{gawk} su OpenVMS
@c based on material from Pat Rankin <rankin@eql.caltech.edu>
@c now rankin@pactechdata.com
@c now r.pat.rankin@gmail.com
-@cindex @command{gawk} @subentry versione VMS di
-@cindex installare @command{gawk} @subentry su VMS
-@cindex VMS @subentry installare @command{gawk} su
+@cindex @command{gawk} @subentry versione OpenVMS di
+@cindex installare @command{gawk} @subentry su OpenVMS
+@cindex OpenVMS @subentry installare @command{gawk} su
@ifnotinfo
Questa
@end ifnotinfo
@@ -47098,23 +47706,23 @@ Questo
@value{SUBSECTION}
descrive come compilare e installare @command{gawk}
sotto OpenVMS.
-Il termine classico ``VMS'' @`e usato qui per designare OpenVMS.
@menu
-* Compilazione su VMS:: Come compilare @command{gawk} su VMS.
-* Estensioni dinamiche su VMS:: Compilare estensioni dinamiche
- di @command{gawk} su VMS.
-* Dettagli installazione su VMS:: Come installare @command{gawk} su VMS.
-* Esecuzione su VMS:: Come eseguire @command{gawk} su VMS.
-* GNV su VMS:: Il progetto VMS GNV.
+* Compilazione su OpenVMS:: Come compilare @command{gawk} su OpenVMS.
+* Estensioni dinamiche su OpenVMS:: Compilare estensioni dinamiche
+ di @command{gawk} su OpenVMS.
+* Dettagli installazione su OpenVMS:: Come installare @command{gawk} su
+ OpenVMS.
+* Esecuzione su OpenVMS:: Come eseguire @command{gawk} su OpenVMS.
+* GNV su OpenVMS:: Il progetto GNV su OpenVMS.
@end menu
-@node Compilazione su VMS
-@appendixsubsubsec Compilare @command{gawk} su VMS
-@cindex compilare @command{gawk} @subentry per VMS
-@cindex VMS @subentry compilare @command{gawk} per
+@node Compilazione su OpenVMS
+@appendixsubsubsec Compilare @command{gawk} su OpenVMS
+@cindex compilare @command{gawk} @subentry per OpenVMS
+@cindex OpenVMS @subentry compilare @command{gawk} per
-Per compilare @command{gawk} sotto VMS, esiste una procedura di comandi
+Per compilare @command{gawk} sotto OpenVMS, esiste una procedura di comandi
@code{DCL} che esegue tutti i comandi @code{CC} e @code{LINK} necessari. C'@`e
anche un @file{Makefile} da usare con i programmi di utilit@`a @code{MMS} e
@code{MMK}.
@@ -47152,7 +47760,7 @@ il nome del parametro che specifica l'obiettivo pu@`o dover essere scritto
digitando esattamente le lettere maiuscole e minuscole.
@command{gawk} @`e stato testato usando VMS Software, Inc.@:
-Community editions.
+Community editions:
@itemize @bullet
@item
@@ -47164,15 +47772,15 @@ IA64 @`e anche nota come ``Itanium''.}
@end itemize
Poich@'e HPE ha eliminato il programma di licenza Hobbyist, non @`e possibile
-effettuare ulteriori test su versioni pi@`u datate di VAX/VMS e OpenVMS.
+effettuare ulteriori test su versioni pi@`u datate di OpenVMS.
-@xref{GNV su VMS} per informazioni su come compilare
+@xref{GNV su OpenVMS} per informazioni su come compilare
@command{gawk} come un kit PCSI compatible con il prodotto GNV.
-@node Estensioni dinamiche su VMS
-@appendixsubsubsec Compilare estensioni dinamiche di @command{gawk} in VMS
+@node Estensioni dinamiche su OpenVMS
+@appendixsubsubsec Compilare estensioni dinamiche di @command{gawk} su OpenVMS
-Le estensioni che sono state rese disponibile su VMS possono essere
+Le estensioni che sono state rese disponibile su OpenVMS possono essere
costruite dando uno dei comandi seguenti:
@example
@@ -47197,45 +47805,34 @@ col formato IEEE. La dimensione dei puntatori @`e 32 bit, e il trattamento dei
simbolici dovrebbe richiedere il rispetto esatto di maiuscole/minuscole, con le
abbreviazioni CRC per simboli pi@`u lunghi di 32 bit.
-Per Alpha e Itanium:
-
@example
/nome=(as_is,short)
/float=ieee/ieee_mode=denorm_results
@end example
-Per VAX@footnote{Le estensioni dinamiche in questo momento non funzionano
-su VAX, quanto segue vale solo come documentazione.}:
-
-@example
-/nome=(as_is,short)
-@end example
-
Le macro da usare al momento della compilazione devono essere definite prima di
-includere il primo file di intestazione proveniente da VMS, come segue:
+includere il primo file di intestazione proveniente da OpenVMS, come segue:
@example
-#if (__CRTL_VER >= 70200000) && !defined (__VAX)
+#if (__CRTL_VER >= 70200000)
#define _LARGEFILE 1
#endif
-#ifndef __VAX
#ifdef __CRTL_VER
#if __CRTL_VER >= 80200000
#define _USE_STD_STAT 1
#endif
#endif
-#endif
@end example
-Se si scrivono delle estensioni utente da eseguire su VMS, vanno fornite anche
-queste definizioni. Il file @file{config.h} creato quando si compila
-@command{gawk} su VMS lo fa gi@`a; se invece si usa qualche altro file simile,
-occorre ricordarsi di includerlo prima di qualsiasi file di intestazione
-proveniente da VMS.
+Se si scrivono delle estensioni utente da eseguire su OpenVMS, vanno fornite
+anche queste definizioni. Il file @file{config.h} creato quando si compila
+@command{gawk} su OpenVMS lo fa gi@`a; se invece si usa qualche altro file
+simile, occorre ricordarsi di includerlo prima di qualsiasi file di
+intestazione proveniente da OpenVMS.
-@node Dettagli installazione su VMS
-@appendixsubsubsec Installare @command{gawk} su VMS
+@node Dettagli installazione su OpenVMS
+@appendixsubsubsec Installare @command{gawk} su OpenVMS
Per usare @command{gawk}, tutto ci@`o che serve @`e un comando ``esterno'', che @`e
un simbolo @code{DCL} il cui valore inizia col segno del dollaro.
@@ -47269,14 +47866,14 @@ Per farlo solo nella sessione corrente si pu@`o usare:
$ @kbd{set command gnv$gnu:[vms_bin]gawk_verb.cld}
@end example
-Oppure il sistemista VMS pu@`o usare @file{GNV$GNU:[vms_bin]gawk_verb.cld} per
+Oppure il sistemista OpenVMS pu@`o usare @file{GNV$GNU:[vms_bin]gawk_verb.cld} per
aggiungere i comandi @command{gawk} e @command{awk} alla tabella
@samp{DCLTABLES} valida per tutto il sistema.
La sintassi DCL @`e documentata nel file @file{gawk.hlp}.
In alternativa, l'elemento @file{gawk.hlp} pu@`o essere caricato in una
-libreria di aiuto VMS:
+libreria di aiuto OpenVMS:
@example
$ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp}
@@ -47284,7 +47881,7 @@ $ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp}
@noindent
(Una libreria specifica dell'installazione potrebbe venir usata invece
-della libreria standard VMS library @samp{HELPLIB}.) Dopo aver installato
+della libreria standard OpenVMS @samp{HELPLIB}.) Dopo aver installato
il testo di aiuto, il comando:
@example
@@ -47305,11 +47902,11 @@ ancora stato trovato, @command{gawk} appone il suffisso @samp{.awk} al
@value{FN} e ritenta la ricerca del file. Se @samp{AWK_LIBRARY} non @`e
definita, si usa per essa il valore di default @samp{SYS$LIBRARY:}.
-@node Esecuzione su VMS
-@appendixsubsubsec Eseguire @command{gawk} su VMS
+@node Esecuzione su OpenVMS
+@appendixsubsubsec Eseguire @command{gawk} su OpenVMS
L'elaborazione della riga di comando e le convenzioni per proteggere i
-caratteri sono significativamente differenti in VMS, e quindi gli esempi
+caratteri sono significativamente differenti in OpenVMS, e quindi gli esempi
presenti in questo @value{DOCUMENT} o provenienti da altre fonti necessitano
piccole modifiche. Le modifiche, tuttavia, @emph{sono} veramente piccole, e
tutti i programmi @command{awk} dovrebbero funzionare correttamente.
@@ -47326,33 +47923,34 @@ $ @kbd{gawk -"W" version}
Si noti che il testo con caratteri maiuscoli e misti maiuscoli/minuscoli
dev'essere incluso tra doppi apici.
-La versione VMS di @command{gawk} comprende un'interfaccia in stile @code{DCL},
-oltre a quella originale, di tipo shell (si veda il file di aiuto per ulteriori
-dettagli). Un effetto indesiderato della duplice analisi della riga
-di comando @`e che se c'@`e solo un unico parametro (come nel programma con le
-righe contenenti doppi apici), il comando diviene ambiguo. Per evitare questo
-inconveniente, il flag, normalmente non necessario, @option{--} @`e necessario
-per forzare un esame dei parametri in stile Unix, piuttosto che nella modalit@`a
-@code{DCL}. Se qualsiasi altra opzione preceduta dal segno @option{-} (o pi@`u
-parametri, per esempio, pi@`u @value{DF} in input) @`e presente, non c'@`e ambiguit@`a,
+La versione OpenVMS di @command{gawk} comprende un'interfaccia in stile
+@code{DCL}, oltre a quella originale, di tipo shell (si veda il file di aiuto
+per ulteriori dettagli). Un effetto indesiderato della duplice analisi della
+riga di comando @`e che se c'@`e solo un unico parametro (come nel programma
+con le righe contenenti doppi apici), il comando diviene ambiguo. Per evitare
+questo inconveniente, il flag, normalmente non necessario, @option{--} @`e
+necessario per forzare un esame dei parametri in stile Unix, piuttosto che
+nella modalit@`a @code{DCL}.
+Se qualsiasi altra opzione preceduta dal segno @option{-} (o pi@`u parametri,
+per esempio, pi@`u @value{DF} in input) @`e presente, non c'@`e ambiguit@`a,
e l'opzione @option{--} pu@`o essere omessa.
-@cindex codice di ritorno @subentry di @command{gawk} @subentry in VMS
-@cindex @code{exit} (istruzione) @subentry codice di ritorno di @command{gawk}, in VMS
+@cindex codice di ritorno @subentry di @command{gawk} @subentry in OpenVMS
+@cindex @code{exit} (istruzione) @subentry codice di ritorno di @command{gawk}, in OpenVMS
Il valore di @code{exit} @`e un valore in stile Unix e viene trasformato in
-un codice di ritorno VMS all'uscita del programma.
+un codice di ritorno OpenVMS all'uscita del programma.
-I bit di severit@`a di VMS saranno impostati a partire dal valore dell'istruzione
-@code{exit}. Un errore grave @`e indicato da 1, e VMS imposta la condizione
-@code{ERROR}. Un errore fatale @`e indicato da 2, e VMS imposta la condizione
+I bit di severit@`a di OpenVMS saranno impostati a partire dal valore dell'istruzione
+@code{exit}. Un errore grave @`e indicato da 1, e OpenVMS imposta la condizione
+@code{ERROR}. Un errore fatale @`e indicato da 2, e OpenVMS imposta la condizione
@code{FATAL}. Ogni altro valore imposta la condizione @code{SUCCESS}. Il
-valore d'uscita @`e codificato per aderire agli standard di codifica VMS e avr@`a
+valore d'uscita @`e codificato per aderire agli standard di codifica OpenVMS e avr@`a
un @code{C_FACILITY_NO} di @code{0x350000} con il codice costante @code{0xA000}
aggiunto al numero spostato a sinistra di 3 bit per far posto al codice di
severit@`a.
Per estrarre il codice reale di ritorno dell'istruzione @code{exit}
-di @command{gawk} dalla condizione impostata da VMS, si usi:
+di @command{gawk} dalla condizione impostata da OpenVMS, si usi:
@example
unix_status = (vms_status .and. %x7f8) / 8
@@ -47362,20 +47960,8 @@ unix_status = (vms_status .and. %x7f8) / 8
Un programma C che usa @code{exec()} per chiamare @command{gawk}
ricever@`a il valore originale della exit in stile Unix.
-Precedenti versioni di @command{gawk} per VMS consideravano un
-codice di ritorno a Unix di 0 come 1, un errore come 2,
-un errore fatale come 4, e tutti
-gli altri valori erano restituiti immodificati. Questa era una violazione
-rispetto alle specifiche di codifica delle condizioni di uscita di VMS.
-
-@cindex numeri @subentry in virgola mobile @subentry VAX/VMS
-@cindex VAX/VMS @subentry numeri in virgola mobile,
-L'aritmetica in virgola mobile VAX/VMS usa un arrotondamento statistico.
-@xref{Funzione round}.
-
-VMS restituisce data e ora in formato GMT, a meno che non siano stati impostati
-i nomi logici @code{SYS$TIMEZONE_RULE} o @code{TZ}. Precedenti versioni di
-VMS, come VAX/VMS 7.3, non impostano questi nomi logici.
+OpenVMS restituisce data e ora in formato GMT, a meno che non siano stati impostati
+i nomi logici @code{SYS$TIMEZONE_RULE} o @code{TZ}.
@cindex percorso di ricerca
@cindex percorso di ricerca @subentry per file sorgente
@@ -47389,24 +47975,24 @@ di directory, separate da virgola. Nel definirla, il valore dovrebbe essere
incluso tra doppi apici, in modo che consenta una sola traduzione, e non una
lista di ricerca multitraduzione @code{RMS}.
-@cindex ridirezione in VMS
+@cindex ridirezione in OpenVMS
Questa restrizione vale anche se si esegue @command{gawk} sotto GNV,
in quanto la ridirezione @`e sempre verso un comando DCL.
-Se si ridirigono dati verso un comando o un programma di utilit@`a VMS,
-l'implementazione corrente richiede la creazione di un comando VMS esterno che
+Se si ridirigono dati verso un comando o un programma di utilit@`a OpenVMS,
+l'implementazione corrente richiede la creazione di un comando OpenVMS esterno che
esegua un file di comandi, prima di invocare @command{gawk}.
(Questa restrizione potrebbe essere rimossa in una futura versione di
-@command{gawk} per VMS.)
+@command{gawk} su OpenVMS.)
Senza un tale file di comandi, i dati in input saranno presenti anche
in output, prima dei dati di output veri e propri.
-Ci@`o consente la simulazione di comandi POSIX non disponibili in VMS
+Ci@`o consente la simulazione di comandi POSIX non disponibili in OpenVMS
o l'uso di programmi di utilit@`a GNV.
L'esempio seguente mostra come ridirigere dati da @command{gawk} verso il
-comando VMS @command{sort}.
+comando OpenVMS @command{sort}.
@example
$ sort = "@@device:[dir]vms_gawk_sort.com"
@@ -47434,10 +48020,10 @@ $ define/user sys$input sys$command:
$ sort sys$input: sys$output:
@end example
-@node GNV su VMS
-@appendixsubsubsec Il progetto VMS GNV
+@node GNV su OpenVMS
+@appendixsubsubsec Il progetto GNV su OpenVMS
-Il pacchetto VMS GNV fornisce un ambiente di sviluppo simile
+Il pacchetto OpenVMS GNV fornisce un ambiente di sviluppo simile
a POSIX tramite una collezione di strumenti @dfn{open source}.
Il @command{gawk} presente nel pacchetto base GNV @`e una vecchia versione.
Attualmente, il progetto GNV @`e in fase di riorganizzazione, con l'obiettivo
@@ -47448,7 +48034,7 @@ La procedura normale per compilare @command{gawk} produce un programma
adatto a essere usato con GNV.
Il file @file{vms/gawk_build_steps.txt} nella distribuzione documenta
-la procedura per compilare un pacchetto PCSI compatible con GNV.
+la procedura per compilare un pacchetto PCSI OpenVMS compatible con GNV.
@node Bug
@appendixsec Segnalazione di problemi e bug
@@ -47952,7 +48538,7 @@ Le persone che si occupano delle varie versioni di @command{gawk} sono:
@item MS-Windows con MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz (chiocciola) gnu (punto) org}
-@item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw (chiocciola) qsl (punto) net}
+@item OpenVMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw (chiocciola) qsl (punto) net}
@item z/OS (OS/390) @tab Daniel Richard G.@: @EMAIL{skunk@@iSKUNK.ORG,skunk (chiocciola) iSKUNK (punto) ORG}
@end multitable
@@ -48020,7 +48606,7 @@ Brian Kernighan, uno degli sviluppatori originali di Unix @command{awk},
ha reso disponibile liberamente la sua implementazione di @command{awk}.
Pu@`o essere scaricata da GitHub:
@example
-git clone git://github.com/onetrueawk/awk bwkawk
+git clone https://github.com/onetrueawk/awk bwkawk
@end example
@noindent
@@ -48043,7 +48629,7 @@ POSIX @command{awk}.
Incidentalmente, Dan Bornstein ha creato un deposito Git che contiene tutte le
versioni di BWK @command{awk} che @`e riuscito a trovare. @`E disponibile in
-@uref{git://github.com/danfuzz/one-true-awk}.
+@uref{https://github.com/danfuzz/one-true-awk}.
@cindex Brennan, Michael
@cindex @command{mawk} (programma di utilit@`a)
@@ -48248,6 +48834,21 @@ Questo @`e un modulo Python che intende introdurre funzionalit@`a di tipo
ulteriori informazioni. (Questo programma non @`e correlato con la versione
modificata da Nelson Beebe di BWK @command{awk}, descritta prima.)
+@cindex Ramming, J.@: Christopher
+@cindex @command{awkcc}, @subentry traduttore da @command{awk} a C
+@cindex compilatore per @command{awk} @subentry @command{awkcc}
+@cindex sorgente @subentry codice @subentry @command{awkcc}
+@cindex codice sorgente @subentry @command{awkcc}
+@item @command{awkcc}
+Questo @`e un adattamento di una versione Unix di @command{awk}
+che traduce script @command{awk} in programmi C.
+@`E stato scritto da J.@: Christopher Ramming nei Bell Labs,
+attorno al 1988.
+@`E disponibile in @uref{https://github.com/nokia/awkcc}.
+Aggiornare questo programma per renderlo applicabile
+alle versioni pi@`u recenti di @command{gawk} sarebbe
+un interessante esercizio di ingegneria del software.
+
@item @w{QSE @command{awk}}
@cindex QSE @command{awk}
@cindex codice sorgente @subentry QSE @command{awk}
@@ -48311,7 +48912,7 @@ per poter scaricare il file.
@command{gawk} pu@`o essere installato anche su sistemi non-POSIX. I sistemi
correntemente supportati sono MS-Windows, usando
MSYS, MSYS2, MinGW e Cygwin,
-e sia Vax/VMS che OpenVMS. Le istruzioni per ognuno di questi sistemi sono
+e OpenVMS. Le istruzioni per ognuno di questi sistemi sono
incluse in
@ifnotinfo
questa
@@ -48454,7 +49055,10 @@ ugualmente al deposito usando il comando:
git clone http://git.savannah.gnu.org/r/gawk.git
@end example
-Una volta modificato il sorgente, @`e posibile usare @samp{git diff} per
+@noindent
+(Utilizzare un URL di tipo @code{https} @`e ritenuto pi@`u sicuro.)
+
+Una volta modificato il sorgente, @`e possibile usare @samp{git diff} per
produrre una @dfn{patch}, e spedirla al manutentore di @command{gawk}; si veda
@ref{Bug}, per come farlo.
@@ -48852,11 +49456,11 @@ solo scaricare una data versione e provarla?
Il manutentore di @command{gawk} desidera che per tutti gli utenti
@command{awk} interessati sia possibile limitarsi a clonare il deposito sul
-proprio computer, selezionare la variante che lo interessa e costruirla. Senza
+proprio computer, selezionare la variante che lo interessa e costruirla, senza
doversi preoccupare di avere a disposizione le versioni corrette degli Autotool
GNU.@footnote{Ecco un programma GNU che (secondo noi) @`e estremamente difficile
da estrarre dal deposito Git e compilare. Per esempio, in un vecchio (ma
-ancora funzionante) PowerPC Macintosh, con il sistema operativo Mac Os X 10.5,
+ancora funzionante) PowerPC Macintosh, con il sistema operativo macOs 10.5,
@`e stato necessario scaricare e compilare una tonnellata di software,
incominciando dallo stesso programma Git, per riuscire a lavorare con l'ultima
versione del codice. Non @`e un'esperienza piacevole e, specie sui vecchi
@@ -49428,10 +50032,10 @@ Si veda la @inlineraw{docbook, <xref linkend="figura-generica-flusso"/>}.
@float Figura,figura-generica-flusso
@caption{Flusso generico di un programma}
@ifclear SMALLPRINT
-@center @image{programma-generico, , , Flusso generico di un programma}
+@center @image{gawk-programma-generico, , , Flusso generico di un programma}
@end ifclear
@ifset SMALLPRINT
-@center @image{programma-generico, 11cm, , Flusso generico di un programma}
+@center @image{gawk-programma-generico, 11cm, , Flusso generico di un programma}
@end ifset
@end float
@end ifnotdocbook
@@ -49440,7 +50044,7 @@ Si veda la @inlineraw{docbook, <xref linkend="figura-generica-flusso"/>}.
<figure id="figura-generica-flusso" float="0">
<title>Flusso generico di un programma</title>
<mediaobject>
-<imageobject role="web"><imagedata fileref="programma-generico.png" format="PNG"/></imageobject>
+<imageobject role="web"><imagedata fileref="gawk-programma-generico.png" format="PNG"/></imageobject>
</mediaobject>
</figure>
@end docbook
@@ -49478,10 +50082,10 @@ come si vede nella @inlineraw{docbook, <xref linkend="figura-flusso-elaborazione
@float Figura,figura-flusso-elaborazione
@caption{Fasi di un programma generico}
@ifclear SMALLPRINT
-@center @image{flusso-elaborazione, , , Fasi di un programma generico}
+@center @image{gawk-flusso-elaborazione, , , Fasi di un programma generico}
@end ifclear
@ifset SMALLPRINT
-@center @image{flusso-elaborazione, 11cm , , Fasi di un programma generico}
+@center @image{gawk-flusso-elaborazione, 11cm , , Fasi di un programma generico}
@end ifset
@end float
@end ifnotdocbook
@@ -49490,7 +50094,7 @@ come si vede nella @inlineraw{docbook, <xref linkend="figura-flusso-elaborazione
<figura id="figura-flusso-elaborazione" float="0">
<title>Fasi di un programma generico</title>
<mediaobject>
-<imageobject role="web"><imagedata fileref="flusso-elaborazione.png" format="PNG"/></imageobject>
+<imageobject role="web"><imagedata fileref="gawk-flusso-elaborazione.png" format="PNG"/></imageobject>
</mediaobject>
</figure>
@end docbook
@@ -51078,7 +51682,7 @@ termini della sezione 6d.
@end enumerate
Una porzione separabile del codice oggetto, il cui sorgente @`e escluso dal
-Sorgente Corrispondente e trattato come Libreria di Sistema, non deve essere
+Sorgente Corrispondente e trattato come Libreria di Sistema, non dev'essere
obbligatoriamente inclusa nella distribuzione del codice oggetto del
programma.
@@ -51111,7 +51715,7 @@ distribuzione avviene come parte di una transazione nella quale il diritto di
possesso e di uso del Prodotto Utente viene trasferito al destinatario per
sempre o per un periodo prefissato (indipendentemente da come la transazione
sia caratterizzata), il Sorgente Corrispondente distribuito secondo le
-condizioni di questa sezione deve essere accompagnato dalle Informazioni di
+condizioni di questa sezione dev'essere accompagnato dalle Informazioni di
Installazione. Questa condizione non @`e richiesta se n@`e tu n@`e una terza parte
ha la possibilit@`a di installare versioni modificate del codice oggetto sul
Prodotto Utente (per esempio, se il programma @`e installato su una ROM)
@@ -51627,7 +52231,7 @@ codificata in un formato le cui specifiche sono disponibili pubblicamente,
tale che il suo contenuto possa essere modificato in modo semplice con
generici editor di testi o (per immagini composte da pixel) con generici
editor di immagini o (per i disegni) con qualche editor di disegni
-ampiamente diffuso; la copia deve essere adatta al trattamento per la
+ampiamente diffuso; la copia dev'essere adatta al trattamento per la
formattazione o per la conversione in una variet@`a di formati atti alla
successiva formattazione. Una copia fatta in un formato di file, per il
resto trasparente, i cui marcatori o assenza di tali sono stati progettati