WinPulisci edizione 1.0
Sostituzione modulare di stringhe
in file di testo
Copyright 1993-2015 Giuliano Artico
Pagina WebScrivi all'autore
Guida all'uso del programma

IMPORTANTE

Si dà per scontato che, prima di iniziare a servirsi del programma WinPulisci, ogni utilizzatore prenda visione della licenza per la distribuzione e l'uso ed accetti e rispetti integralmente le norme in essa contenute. Chi è in disaccordo anche con una sola delle condizioni deve rinunciare a qualunque impiego di questo software.

Sommario

1.0. Premessa

Questo documento costituisce la guida di riferimento per il programma WinPulisci. Coloro che già conoscono il programma PULISCI per MS-DOS possono iniziare leggendo il [¶14] che compendia sinteticamente le variazioni apportate nella versione per Windows. Malgrado sussistano varie analogie, occorre comunque consultare il resto del manuale per informazioni particolareggiate sulle nuove caratteristiche. Infatti, al pari della versione MS-DOS, il programma WinPulisci può essere usato efficacemente soltanto conoscendo in modo approfondito i principi che lo regolano. Per possibili problemi o malfunzionamenti v. [¶15.3].

Le tabelle allegate al programma vanno intese come esempi elementari che forniscono suggerimenti sul modo di sfruttare le caratteristiche di WinPulisci e non come applicazioni pronte all'uso [¶13].

Gli utilizzatori sono invitati a fare buon uso di questo manuale, la cui stesura ha richiesto un impegno rilevante per fornire uno strumento completo, particolareggiato e il più possibile chiaro. L'autore di WinPulisci non è disponibile né a ripetere le spiegazioni già esposte nel manuale né a fornire assistenza nella redazione delle tabelle.

1.1. Introduzione

Lo scopo del programma WinPulisci è agevolare la sostituzione in qualunque file di testo di determinate stringhe di caratteri con altre opportunamente predisposte. La tecnica modulare di definizione delle corrispondenze consente una vasta gamma di conversioni, grazie anche agli accorgimenti disponibili, fra i quali le direttive che si possono specificare singolarmente per ciascuna corrispondenza.

L'uso di questo programma risulta vantaggioso quando l'intervento va ripetuto su numerosi file (ad esempio, per correggere gli errori di riconoscimento sistematici che si verificano nei file di puro testo prodotti da un programma OCR).

L'elaborazione può avvenire sia in modo interattivo sia in modo batch, cioè assegnando i parametri al prompt dei comandi o per mezzo di un file batch.

La definizione delle stringhe di caratteri da sostituire e di quelle che devono prendere il loro posto è svolta dalle tabelle di sostituzione, che vanno preparate in anticipo a seconda delle necessità. Il programma è in grado di caricare simultaneamente numerose tabelle: distribuendo le corrispondenze secondo criteri opportuni, si possono ottenere molte combinazioni, rendendo così il procedimento assai flessibile.

Le tabelle sono ordinari file di testo per la cui redazione si devono seguire le regole descritte in [¶7]. Sono fornite a corredo alcune tabelle che presentano le varie possibilità e possono servire da esempio per la preparazione di altre (v. i file contenuti nella sottocartella tab della cartella di lavoro).

Nelle tabelle sono previsti costrutti per la definizione di corrispondenze multiple: il carattere jolly che varia entro insiemi di caratteri assegnati dall'utilizzatore [¶7.6] e gli array che consentono anche di associare stringhe appartenenti a due o più liste [¶7.11]. Vedere inoltre le corrispondenze speciali [¶8.13].

È previsto l'uso di variabili utente, nel cui valore si possono inserire le variabili predefinite di WinPulisci e le variabili di ambiente di Windows, v. [¶7.9] e [¶7.10].

Si possono elaborare insieme tutti i file di una cartella o i file che corrispondono a una specificazione comprendente caratteri jolly di Windows, includendo eventualmente i file contenuti nelle sottocartelle fino a una profondità prestabilita dall'utilizzatore (elaborazione multipla, [¶4.10]).

Alcune caratteristiche del procedimento di elaborazione.

Quando si termina una sessione, il programma memorizza i parametri di funzionamento in un apposito file di inizializzazione, in modo da ripresentare le stesse condizioni al successivo utilizzo [¶11]. Sono infine previste varie opzioni utilizzabili dal prompt dei comandi [¶10].

Torna al sommario.

2. Download e installazione del programma

Il programma WinPulisci può essere usato, copiato e distribuito gratuitamente, purché vengano accettate e rispettate rigorosamente tutte le condizioni specificate nella licenza.

La pagina Internet del programma WinPulisci è:

http://www.artico.name/soft/wpulisci/

Per eseguire l'installazione del programma svolgere le seguenti operazioni:

Importante. Se si altera l'impostazione predefinita per la cartella di installazione, il setup richiede che sia specificata esplicitamente la cartella contenitore per i file del programma. Scegliere una cartella nuova oppure la cartella di una precedente installazione di WinPulisci e in ogni caso evitare le cartelle contenenti altro materiale, ad esempio C:\Programmi o D:\, perché l'intero contenuto dell'archivio verrebbe decompresso direttamente in quella posizione, senza creare alcuna cartella contenitore.
Il programma va avviato con il collegamento che si trova nel desktop al termine dell'installazione [¶2.3].

I file presenti nell'archivio di setup sono:

Il programma WinPulisci non genera voci in Installazione applicazioni del Pannello di controllo. Per effettuare la disinstallazione eliminare la cartella di installazione, ad esempio C:\Programmi\WinPulisci, e cancellare, a seconda dei casi, il collegamento WPulisci o lo script WPulisci.vbs sul desktop. In ambiente Windows 7 o successivo va inoltre eliminata la cartella di lavoro [¶2.1].

2.1. Cartella di lavoro

In questo manuale sono usati i termini cartella di installazione e cartella di lavoro.

La cartella di installazione o cartella del programma è quella che contiene il file eseguibile, il manuale e la licenza.

La cartella di lavoro ospita vari file necessari per il funzionamento e alcune sottocartelle per i file originali, i file elaborati e le tabelle. La sua collocazione può variare a seconda del sistema operativo [¶2.2].

L'ambiente di lavoro prevede le seguenti cartelle predefinite, che sono sottocartelle della cartella di lavoro:

Orig\
cartella origine predefinita, dove l'utilizzatore colloca i file origine, cioè quelli da elaborare;
Dest\
cartella destinazione predefinita, dove il programma pone i file risultanti dall'elaborazione;
tab\
cartella predefinita delle tabelle, dove vanno poste tutte le tabelle contenenti le corrispondenze richieste per l'elaborazione.
Nota. Il programma riconosce l'abbreviazione ^\ per indicare la cartella di lavoro nei percorsi di file e cartelle. Nell'immissione da prompt occorre indicare ^^\.

2.2. Sistema operativo

Il programma WinPulisci può essere utilizzato in ambiente Windows XP o versione successiva. In particolare, esso funziona in ambiente Windows 7 (32 o 64 bit).

La posizione della cartella di lavoro può dipendere dal sistema operativo in uso. In ambiente Windows XP la cartella di lavoro coincide con la cartella del programma e quindi la sua posizione è determinata esclusivamente dalla scelta fatta dall'utilizzatore al momento dell'installazione.

Nelle versioni successive di Windows (Vista/Win7, eccetera) possono verificarsi due situazioni.

Primo caso: la cartella di installazione è contenuta nella cartella dei programmi
viene utilizzata la cartella di lavoro WinPulisci (nome prefissato) contenuta nella cartella Documenti dell'utente attuale. Qui vengono posti tutti i file necessari al funzionamento (tabelle, file di inizializzazione, resoconti, file temporanei). In particolare, in questa cartella si trovano le tre cartelle predefinite tab, orig e dest.
Secondo caso: la cartella di installazione non si trova nella cartella dei programmi
in questo caso il programma funziona come in ambiente Windows XP, facendo coincidere cartella di installazione e cartella di lavoro e collocando tutti i file necessari nella stessa posizione in cui si trova il programma.
Perciò il programma WinPulisci può essere ospitato per intero in un'unità scelta a piacere, ad esempio in un'unità esterna USB, rimanendo così indipendente dalla particolare versione del sistema operativo [¶2.3].

Se si riscontrano inconvenienti con altre versioni di Windows o con emulazioni di Windows in ambienti diversi, si raccomanda di verificare per prima cosa le proprietà del collegamento sul desktop, adattando il contenuto dei campi alla situazione reale. In ogni caso è possibile cancellare il collegamento prodotto dall'installazione e sostituirlo con uno nuovo, ottenuto mediante le apposite funzioni del sistema operativo.

2.3. Avvio del programma dal desktop

Normalmente il setup di WinPulisci colloca sul desktop l'icona WPulisci per avviare il programma.

Una situazione particolare si verifica se la cartella scelta durante l'installazione si trova in un'unità removibile. In questa circostanza il setup colloca sul desktop uno script di nome WPulisci.vbs che sostituisce l'ordinario collegamento. Infatti, se dopo un riavvio il sistema modificasse la lettera abbinata all'unità, il normale collegamento non funzionerebbe, mentre lo script è in grado di individuare il cambiamento.

In ogni caso una copia dello script WPulisci.vbs si trova nella sottocartella demo\ perché viene utilizzato dai file batch dimostrativi presenti nella cartella stessa [¶13.1]. . Questa cartella può essere spostata in qualunque altra posizione, ma lo script non deve essere separato dai file batch.

2.4. Archivio di setup e regolarità dell'installazione

Il file di setup di WinPulisci è un archivio generato con il software di compressione dati WinRAR. È indispensabile che l'installazione avvenga correttamente nel modo illustrato più sopra.

Le operazioni indicate di seguito devono essere evitate perché danno luogo a installazioni irregolari.

  1. Decompressione dell'archivio di setup con un software di archiviazione-.
  2. Copia della cartella del programma da un PC a un altro PC.
  3. Copia della cartella del programma da un'unità removibile a un'unità fissa, qualora l'installazione sia stata effettuata in un diverso PC.
In caso di installazione irregolare potrebbero verificarsi malfunzionamenti anche gravi e perciò è possibile avviare il programma soltanto in modo ristretto, modo nel quale non è consentita l'elaborazione dei file. Notare che per accedere al modo ristretto occorre digitare l'username dell'utente attuale.

Si raccomanda di non cancellare il file di inizializzazione e di non alterare la chiave di sblocco perché in mancanza di questi due elementi l'unica possibilità di utilizzare il programma in modo regolare sarebbe di eseguire una nuova installazione. Per informazioni sulla chiave di sblocco v. [¶15.2].

2.5. Utilizzo da parte di diversi utenti

In merito all'utilizzo multiutente, WinPulisci si comporta in modi diversi a seconda del sistema operativo. Notare però che l'installazione in un'unità removibile USB è considerata regolare anche se l'unità viene collegata a un diverso PC, indipendentemente dal sistema operativo in cui è avvenuta l'installazione e di quello in cui viene utilizzato il programma.
Windows XP
Normalmente il programma deve essere avviato dall'utente che ha effettuato l'installazione. Affinché WinPulisci possa essere usato da più utenti, occorre operare in uno dei modi indicati di seguito.
  • Effettuare l'installazione in una cartella distinta per ciascun utente e rinominare opportunamente l'icona che ogni volta viene posta sul desktop.
  • Installare il programma una sola volta in un'unità removibile.
Windows 7 e Windows 8
Sono possibili tre alternative.
  • Effettuare l'installazione per ciascun utente utilizzando sempre la cartella proposta dal setup (non occorre rinominare l'icona sul desktop).
  • Effettuare l'installazione in cartelle distinte, una per ciascun utente, che si trovino in un disco fisso ma che non siano contenute nella cartella dei programmi. In questo caso occorre rinominare opportunamente l'icona che ogni volta viene posta sul desktop.
  • Installare il programma una sola volta in un'unità removibile.

Torna al sommario.

3. Il modo interattivo

Il modo normale di funzionamento è quello interattivo (per il modo batch v. [¶5]).

La schermata che si presenta all'avvio è detta finestra principale. Ci sono quattro campi, in altrettante righe, destinati all'immissione dei dati. I più importanti sono i primi due, che servono per indicare il nome del file originale e di quello prodotto dopo l'elaborazione. Quest'ultimo è detto file destinazione e i due nomi possono coincidere, ammesso che si accetti di perdere il file originale. Nel secondo campo, quello relativo al file destinazione, si può indicare semplicemente il nome di una cartella esistente e in tal caso il file destinazione conserva il nome del file originale, ma viene collocato nella cartella indicata.

I due campi rimanenti servono per mostrare ed eventualmente impostare le cartelle origine e destinazione.

cartella origine
Specifica la posizione corrente da cui il programma preleva i file originali da elaborare: se essa è una sottocartella della cartella di lavoro, viene mostrato il percorso relativo, altrimenti viene mostrato il percorso completo. Può differire dalla cartella origine predefinita [¶2.1].
Cartella destinazione
Specifica la posizione corrente nella quale il programma colloca i file risultanti al termine dell'elaborazione: se essa è una sottocartella della cartella di lavoro, viene mostrato il percorso relativo, altrimenti viene mostrato il percorso completo.
Può differire dalla cartella destinazione predefinita [¶2.1]. Può coincidere con la cartella origine corrente (scelta non consigliata).
L'impostazione predefinita prevede l'uso di una cartella destinazione distinta dalla cartella origine. Ciò offre fra l'altro il vantaggio di raggruppare insieme tutti i file elaborati. Notare che, non appena immesso il nome del file origine nel primo campo, il programma propone automaticamente nel secondo campo il nome del file destinazione e adatta in conformità i percorsi delle cartelle nel terzo e nel quarto campo.

In mancanza di indicazioni contrarie, le due cartelle origine e destinazione predefinite [¶2.1] sono assunte come cartelle di uso corrente. Per la loro impostazione v. le opzioni /O e /D [¶10], nonché le chiavi KDefOrigDir e KDefDestDir del file di inizializzazione [¶11].

Il trattamento del file origine viene avviato premendo F2 oppure Ctrl+Invio. Normalmente, prima di avviare l'elaborazione, si deve controllare quali sono le tabelle selezionate, entrando con F3 nell'apposita schermata di selezione delle tabelle.

Lo stato dei parametri di funzionamento [¶4.7]) è mostrato nella riga di stato che si trova nella parte inferiore della finestra principale e può essere modificato agendo sugli appositi tasti [¶3.1].

Per evitare cancellazioni indesiderate il programma prevede due precauzioni.

Si possono svolgere inoltre altre operazioni preliminari quali l'esplorazione delle unità disco [¶4.2], l'aggiunta di una nuova tabella [¶4.8] e l'apertura con l'editor del file origine [¶4.5].

Alla conclusione compare sullo schermo un rapporto sintetico sul lavoro svolto. Un resoconto particolareggiato viene trascritto nell'apposito file se il parametro Log è impostato a [¶9].

3.1. Elenco dei tasti utilizzabili nella finestra principale

Esc o Alt+F4
Uscita.
FrecciaGiù/FrecciaSu
Campo successivo/precedente. Idem con Tab/Shift+Tab. La pressione è accompagnata da un breve segnale acustico.
F1 o Alt+H
Testo di aiuto con elenco comandi e documentazione.
Shift+F1
Apre la licenza del programma.
Ctrl+F1
Sommario delle opzioni disponibili da prompt.
F2 o Ctrl+Invio
Avvia il procedimento di sostituzione.
Shift+F2 o Alt+L
Attiva/disattiva la scrittura dei resoconti.
F3 o Alt+T
Apre la finestra di scelta delle tabelle, nella quale le stesse possono essere attivate o disattivate.
Shift+F3 o Alt+K
Immissione dei quattro parametri di riga.
F4 o Alt+E
Apre una nuova tabella detta extra.
Shift+F4 o Alt+M
Chiude e salva l'attuale tabella extra.
F5 o Alt+A
Attiva/disattiva la funzione Auto (riconoscimento automatico della sequenza di ritorno a capo).
Shift+F5 o Alt+P
Attiva/disattiva la funzione di taglio.
F6 o Alt+S
Attiva/disattiva le segnalazioni acustiche.
Shift+F6 o Alt+R
Attiva/disattiva la reimpaginazione.
F7 o Alt+C
Commutatore a quattro posizioni per impostare il parametro Conserva (conservazione degli spazi a inizio e fine riga).
Shift+F7 o Alt+Y
Attiva/annulla la protezione delle chiavi critiche.
F8 o Alt+D
Esplorazione delle unità disco.
Shift+F8 o Alt+Z
Attiva/annulla la protezione delle cartelle critiche.
F9 o Alt+G
Apre il manuale del programma.
Shift+F9
Apre la finestra di scelta dell'editor.
F10, Invio o Alt+F
Nei campi File origine e File destinazione apre con l'editor il file specificato.
Shift+F10
Apre con l'editor il file di inizializzazione (sono ammesse modifiche nella sezione [CONFIG]).
F11/F12
Riduce/aumenta il volume delle segnalazioni acustiche.
Shift+F11
Apre con l'editor il file resoconto.
Shift+F12
Apre con l'editor il resoconto delle tabelle attive.
Alt+O
Copia nel campo File origine il nome del file destinazione.
Alt+Q
Nasconde o ripristina la riga dei parametri e il riepilogo delle tabelle.
Alt+W
Avvia l'editor senza parametri.

3.2. Cartelle critiche

Una cartella è considerata critica se contiene file aventi una fra le estensioni EXE, COM, DLL, OCX, PIF. Una cartella critica non può essere utilizzata come cartella destinazione quando il parametro PrDir è posto a (condizione predefinita). Per cambiare lo stato del parametro PrDir usare Shift+F8 o Alt+Z, dal prompt l'opzione /Z.

Nota bene. Indipendentemente dallo stato del parametro PrDir, non è mai consentito utilizzare le seguenti cartelle come cartella destinazione:

Nella finestra di esplorazione [¶4.2] l'accesso alla cartella di Windows e alla cartella dei programmi è consentito quando il parametro PrDir (protezione delle cartelle critiche) è posto a No.

Torna al sommario.

4. Operazioni

In questo capitolo sono descritte le operazioni preparatorie alla vera e propria fase di elaborazione, vale a dire l'applicazione delle sostituzioni.

4.1. Scelta e attivazione delle tabelle

Premendo il tasto F3 nella finestra principale si apre la finestra di scelta delle tabelle. Ogni videata mostra le proprietà di una tabella. Fra le altre informazioni (grandezza in byte, data, eccetera) è mostrato il commento, desunto dalla parte iniziale della tabella: in fase di redazione è importante prevedere una descrizione che aiuti a rammentare il significato delle singole tabelle.

La tabella in esame viene attivata o disattivata premendo Spazio. Se essa è attiva, il suo nome è evidenziato in nero su fondo bianco (reverse) e la comparsa delle informazioni è accompagnata da un segnale acustico particolare.

Sono disponibili vari comandi di movimento e ricerca (v. il prospetto più avanti). In particolare, si notino i tasti F5 e F6 (o anche - e +) che permettono di portare una tabella indietro o avanti nell'elenco (l'ordine con cui le tabelle vengono caricate è significativo).

La ricerca di una stringa avviene nei nomi delle tabelle e nelle loro descrizioni. Con F3 si immette una nuova stringa (viene proposta la stringa che è già stata specificata in precedenza), con Ctrl+PgUP e Ctrl+PgDn si cerca la stringa attuale.

Una volta selezionato un certo gruppo di tabelle, esso rimane attivo per tutti i file che si elaborano in seguito, anche in sessioni successive, salvo richiamare nuovamente la finestra di scelta per possibili modifiche.

Premendo Esc si torna alla finestra principale. È anche possibile premere F2 o Ctrl+Invio per avviare direttamente l'elaborazione dalla finestra di scelta delle tabelle, ammesso naturalmente che in precedenza sia già stato specificato un file da elaborare.

Segue l'elenco dei comandi disponibili nella finestra di scelta (quelli contrassegnati con (*) comportano la rilettura delle tabelle e annullano la corrispondenza prompt e l'array prompt [¶7.7]).

Esc o Alt+F4
Ritorno alla finestra principale.
F1 o Alt+H
Testo di aiuto con elenco comandi e documentazione.
Spazio
attiva e disattiva la tabella visualizzata (*).
FrecciaSu
Mostra la tabella precedente. Si possono usare anche , (virgola) o < (minore).
FrecciaGiù
Mostra la tabella successiva.. Si possono usare anche . (punto) o > (maggiore).
PgUp/PgDn
Sposta il contatore indietro/avanti di dieci posizioni.
Home/End
Mostra la prima/ultima tabella dell'elenco.
Tab/Shift+Tab
Mostra la tabella attiva successiva/precedente.
F2 o Ctrl+Invio
Chiude la finestra e avvia il procedimento di sostituzione.
F3 o Alt+R
Ricerca di una stringa nei nomi delle tabelle e nei loro commenti.
F4
Riordina l'elenco mantenendo attive le tabelle selezionate (*).
Shift+F4
Riordina l'elenco e deseleziona tutte le tabelle attive (*).
F5 o -
Scambia la tabella evidenziata con la precedente (*).
F6 o +
Scambia la tabella evidenziata con la successiva (*).
F7 o Ctrl+PgUp
ricerca all'indietro la stringa già impostata con F3.
F8 o Ctrl+PgDn
ricerca in avanti la stringa già impostata con F3.
F9 o Alt+G
Apre il manuale del programma.
F10, Invio o Alt+F
Apre con l'editor la tabella (*).
F11/F12
Riduce/aumenta il volume delle segnalazioni acustiche.
Lettera A-Z, cifra 0-9
Mostra la tabella il cui nome inizia con il carattere premuto.
Alt+W
Avvia l'editor senza parametri.
BackSpace
Posiziona il cursore per cinque secondi sul riepilogo della tabella a fondo schermo (comando dedicato agli utilizzatori di screen reader).
Il resoconto delle tabelle, che viene aggiornato se intervengono variazioni, è consultabile premendo Shift+F12 nella finestra principale.

Se si specifica una o più tabelle con l'opzione /T [¶10], il programma ignora il precedente stato di selezione memorizzato nel file di inizializzazione e considera attive solo le tabelle nell'ordine in cui sono state indicate nel comando di avvio. Se la sessione è interattiva, la finestra di scelta risulta aggiornata secondo il nuovo stato e questo verrà memorizzato al termine nel file di inizializzazione. Se l'elaborazione è in modo batch, ugualmente non viene considerato il precedente stato di selezione, ma in questo caso il file di inizializzazione non subisce alcuna modifica.

Nota. Nella finestra di scelta il numero di corrispondenze di una tabella può talvolta risultare impreciso perché qui viene fatta un'analisi rapida che non tiene conto né di incoerenze reciproche fra le direttive né delle corrispondenze espanse in relazione a eventuali array [¶7.11].

4.2 Esplorazione delle unità disco

Il file da elaborare può essere selezionato con l'apposita funzione di esplorazione delle unità disco.

Nella finestra principale premere F8 oppure Alt+D. La prima volta che si usa questo comando si apre la cartella origine predefinita, le volte successive l'ultima cartella consultata. Nell'elenco che compare si può spostare il cursore con vari comandi, come specificato di seguito. Notare il comportamento di Spazio e di Invio in questo contesto.

Esc o Alt+F4
Ritorno alla finestra principale.
F1
Aiuto contestuale della funzione di esplorazione.
Spazio
Se l'elemento puntato dal cursore è un file esso viene accettato come file origine, se è una cartella essa diventa la cartella origine corrente. In entrambi i casi si esce dall'esplorazione e si torna alla finestra principale.
FrecciaGiù/FrecciaSu
Sposta il cursore nella riga successiva/precedente. Idem con Tab/Shift+Tab. La pressione è accompagnata da un breve segnale acustico.
PgUp/PgDn
Sposta il cursore su/giù di una videata.
Home/End
Seleziona il primo/ultimo elemento dell'elenco.
Ctrl+Home/Ctrl+End
Sposta il cursore a inizio/fine schermo.
BackSpace
Risale alla directory di livello precedente.
F2
Apre la cartella origine corrente.
F3
Apre la cartella origine predefinita.
F4
Salta le directory e va al primo file.
F9 o Alt+G
Apre il manuale del programma.
F10 o Invio
Se l'elemento puntato dal cursore è un file esso viene aperto, se è una cartella si ottiene la visualizzazione della stessa.
F11/F12
Riduce/aumenta il volume delle segnalazioni acustiche.
Lettera A-Z, cifra 0-9
Portano il cursore su un file o una cartella che iniziano con quel carattere.
Alt+W
Avvia l'editor senza parametri.
I file di testo vengono aperti normalmente con l'editor impostato. Usare la chiave KExtProc del file di inizializzazione per specificare i tipi di file che si vuole vengano aperti con le applicazioni associate dal sistema.

Le cartelle critiche [¶3.2] non sono elencate quando la loro protezione è attiva [¶4.7.

4.3. Funzione di reimpaginazione

La reimpaginazione, se attivata, viene svolta al termine del procedimento di sostituzione. Essa consiste nel riscrivere il testo con righe di lunghezza vicina all'apposito parametro lunghezza di riga 4.6. Inoltre, se il parametro lunghezza parola a fine riga ha un valore diverso da 0, vengono mandate a capo le parole a fine riga la cui lunghezza non supera tale valore: questo accorgimento può favorire una miglior leggibilità del testo.
La reimpaginazione è attivata quando il parametro Reimpagina è posto a [¶4.7]: premere Shift+F6 o Alt+R per cambiarne lo stato o avviare il programma con l'opzione /R [¶10].

La reimpaginazione, se attivata in occasione di un'elaborazione multipla [¶4.10], viene eseguita senza alcuna richiesta di consenso.

4.4. Funzione di taglio

La funzione di taglio permette di restringere l'elaborazione a una porzione del file origine. Se attivata, viene svolta all'inizio, prima delprocedimento di sostituzione.

La scelta della parte di file da trattare può essere svolta con due criteri distinti:

4.4.1. Taglio delimitato da stringhe

Viene elaborata solo la parte di file origine compresa fra una stringa iniziale e una stringa finale (la parte restante del file viene ignorata). Se si omette la stringa iniziale, viene considerata tutta la parte di file che precede la stringa finale. Se si omette la stringa finale, viene considerata la parte di file successiva alla stringa iniziale.

Nella sezione [CONFIG] [¶7.2] di una delle tabelle selezionate si specifica almeno una fra le due stringhe suddette utilizzando le chiavi _StIni e _StFin come indicato di seguito.

_StIni=["]stringa_iniziale["]
_StFin=["]stringa_finale["]
Occorre che almeno una fra stringa_iniziale e stringa_finale sia non vuota in una tabella attiva. Le virgolette che racchiudono la stringa sono facoltative e possono essere usate per evidenziare eventuali spazi agli estremi della stringa (che altrimenti verrebbero ignorati).

Oltre all'impostazione delle stringhe di cui sopra, occorre indicare alcune modalità per l'applicazione del taglio mediante le chiavi _nSIni (per la stringa iniziale) e _nSFin (per la stringa finale). In ciascuna di esse si possono specificare da uno a tre numeri separati da virgole nel modo seguente (anche qui i termini facoltativi sono indicati fra parentesi quadre, che non devono essere digitate):

_nSIni=n1[,m1[,e1]]
_nSFin=n2[,m2[,e2]]
Nell'ordine, il significato dei tre numeri in ciascuna chiave è il seguente:
numero n
È un contatore che indica il numero di occorrenza della stringa: se è positivo (1, 2, 3, eccetera) specifica che si cerca l'occorrenza della stringa partendo dall'inizio del file, se è negativo (-1, -2, -3, eccetera) l'occorrenza è contata a ritroso partendo dalla fine. Il valore 0 equivale ad annullare la corrispondente stringa_iniziale o stringa_finale.
numero m
Specifica che la ricerca è insensibile alle maiuscole/minuscole (valore 1) o che viceversa le maiuscole e le corrispondenti minuscole sono considerate lettere distinte (valore 0). L'insensibilità alle maiuscole/minuscole delle lettere accentate è basata sulla codifica impostata con la chiave _AnsiC [¶8.10].
numero e
Specifica che la stringa deve essere eliminata insieme con la parte tagliata (valore 1) o che deve essere mantenuta (valore 0).
Vediamo due esempi nei quali, usando come stringa il simbolo che rappresenta la sequenza di ritorno a capo, vengono eliminate parte delle righe di un file. Il primo esempio mostra come eliminare le prime sette e le ultime dieci righe (è contata come riga anche quella finale, che potrebbe terminare con un carattere di fine file e che può essere vuota):
_StIni=$CR
_nSIni=7,0,1
_StFin=$CR
_nSFin=-10,0,1
Con i seguenti comandi si conservano le prime cento righe, cioè si eliminano le righe dalla numero 101 in poi:
_StFin=$CR
_nSFin=101,0,1

4.4.2. Taglio con intervallo di byte

Viene elaborato un intervallo del file origine che inizia con un dato byte iniziale e ha lunghezza pari a un dato numero di byte. In una tabella attiva si usa la chiave _tByte come segue:
_tByte = ByteIniziale [, NumeroByte]
I valori a destra del segno di uguale sono soggetti alle condizioni indicate di seguito.
ByteIniziale
Numero diverso da 0 che indica la posizione del primo byte dell'intervallo. Se il numero è positivo (1, 2, 3, eccetera) la posizione è contata dall'inizio del file, se è negativo (-1, -2, -3, eccetera) la posizione è contata a ritroso partendo dalla fine (-1 per l'ultimo byte, -2 per il penultimo e così via). Il numero indicato non deve superare la grandezza del file.
NumeroByte
Numero facoltativo che specifica la lunghezza in byte dell'intervallo. Se il numero è omesso o se vale 0, l'intervallo viene esteso fino alla fine del file. Il numero viene opportunamente ridotto se esso è tale da eccedere la grandezza del file.

4.4.3. Osservazioni sulla funzione di taglio

Se le informazioni per il taglio sono presenti in più di una tabella, vengono accettate quelle presenti nella prima di esse seguendo l'ordine di caricamento (le informazioni per il taglio nelle tabelle successive sono ignorate). In particolare, non è consentito inserire in una tabella la stringa iniziale e in una diversa tabella la stringa finale.

Se una stessa tabella contiene informazioni valide per entrambi i metodi di taglio, prevale la specificazione per il metodo dell'intervallo di byte.

Attenzione! Queste chia vi vanno usate con la massima circospezione: se esse sono presenti in una qualunque tabella attiva, il programma applicha il taglio a tutti i file elaborati. Perciò, per motivi di prudenza, la funzione di taglio è disattivata ad ogni avvio e occorre attivarla intenzionalmente: premere Shift+F5 o Alt+P per cambiarne lo stato oppure avviare il programma con l'opzione /+ [¶10]. Parimenti, le chiavi relative alla funzione di taglio non sono ammesse nel file di inizializzazione (come, per lo stesso motivo, nel programma PULISCI per MS-DOS ne veniva sconsigliato l'uso nella tabella PULISCI.TAB).

4.5. Editor per apertura di file e tabelle

Prima di avviare l'elaborazione è possibile utilizzare un editor per modificare manualmente un file o una tabella. Al momento del primo avvio, il programma WinPulisci esegue una ricerca per identificare la presenza nel sistema di alcuni editor di uso comune e ne adotta uno in modo automatico. Per modificare la scelta premere Shift+F9 e utilizzare i comandi descritti di seguito. Di seguito sono elencati gli editor predefiniti. I nomi in grassetto sono quelli che nella schermata di assegnazione di cui sopra compaiono via via premendo Tab.
pspad
PSPad, freeware, portable, menù in italiano.
Ho preparato questo pacchetto già configurato e con poche istruzioni elementari in italiano. Basta decomprimere l'archivio e spostare l'intera sottocartella pspad in C:\Programmi, non occorre altro.
notepad++
Notepad++, freeware, menù in italiano.
balabolka
Balabolka, Eccellente programma gratuito con funzioni sia di editor sia di TTS.
textpad
TextPad, shareware, italiano (anche il manuale).
biblos
Biblos, shareware, italiano, con funzioni specifiche per non vedenti.
winword
WinWord, il programma di videoscrittura di Microsoft Office.
write
WordPad, il programma di videoscrittura incorporato in Windows.
notepad
Il Blocco note di Windows.
L'impostazione dell'editor può essere effettuata anche con l'opzione /E [¶10] e la chiave KEditor del file di inizializzazione [¶11].

Osservazioni. La specificazione dell'editor richiede il parametro %f, che rappresenta il nome del file da aprire, e che va posto nella posizione prevista dalla sintassi dell'editor. Se assente, il parametro %F viene automaticamente aggiunto al termine della specificazione. Si possono indicare anche eventuali opzioni.

PercorsoFileEseguibile [opzioni] %f [opzioni]
Se il percorso del file eseguibile contiene spazi, esso deve essere delimitato da virgolette
"C:\Percorso con spazi\Nome editor.exe" [opzioni] %f [opzioni]
L'estensione .exe può essere omessa perché è adottata implicitamente. Le altre estensioni consentite sono .bat, .vbs, .cmd (per usare altre estensioni occorre appoggiarsi a un file batch).

4.6. Parametri di riga

Il programma prevede quattro parametri di riga: due per la funzione di reimpaginazione [¶4.3], uno relativo alle direttive di riga [¶8.5] e uno relativo alle corrispondenze speciali [¶8.13].
Lunghezza di riga (reimpaginazione)
Numero che indica la massima lunghezza consentita per le righe del testo.
Può variare fra 10 e 9999, valore predefinito 80.
Lunghezza parola a fine riga (reimpaginazione)
Numero che indica la lunghezza massima di una parola da mandare a capo se presente a fine riga.
Può variare fra 0 e 5, valore predefinito 0.
Limitazione sostituzione riga (direttive di riga)
Numero che indica la lunghezza massima di una riga che è consentito sostituire.
Può variare fra 1 e 9999. Per impostazione predefinita coincide con il parametro Lunghezza di riga di cui sopra.
Limitazione testo jolly (corrispondenze speciali)
Numero che indica la lunghezza massima del testo rappresentato dal jolly.
Può variare fra 1 e 9999. Per impostazione predefinita coincide con il parametro Lunghezza di riga di cui sopra.
I quattro parametri possono essere impostati premendo Shift+F3 o Alt+K nella finestra principale, con l'opzione /n [¶10] o con la chiave KParLin del file di inizializzazione [¶11]. I primi due si possono assegnare anche quando si preme Shift+F6 o Alt+R nella finestra principale per attivare la reimpaginazione.

4.7. Parametri di funzionamento

Sono parametri che determinano il funzionamento del programma riguardo ad aspetti che non si impostano con le tabelle di sostituzione. Essi possono assumere i valori e No, ad eccezione di Conserva che può assumere un valore numerico variabile da 0 a 3. La condizione di questi parametri è mostrata nella riga di stato e può essere modificata premendo i tasti opportuni (v. il prospetto in [¶3.1]).

Ad ognuno di questi parametri è abbinata un'opzione, da specificare al prompt dei comandi per fargli assumere, in avvio di programma, la condizione desiderata. Per i particolari v. [¶10]. Con l'eccezione di Reimpagina e Taglia, lo stato dei parametri è memorizzato nel file di inizializzazione [¶11].

Auto
Condizione predefinita: No.
Si modifica con F5 o Alt+A (dal prompt con l'opzione /A).
Normalmente la sequenza di ritorno a capo nei file di testo è costituita dalla coppia di caratteri CR+LF (codici ASCII 13 e 10) ma alcuni file non rispettano questa regola. Se il parametro Auto è posto a , il programma individua automaticamente tale sequenza, altrimenti l'intercettazione non ha luogo e viene usata la sequenza standard.
Conserva
Condizione predefinita: 1.
si modifica con F7 o Alt+C (dal prompt con l'opzione /C seguita da un numero fra 0 e 3).
Gli spazi che si trovano all'inizio o alla fine delle righe in un file di testo possono essere conservati o eliminati agendo sul parametro Conserva. Sono possibili quattro condizioni, che corrispondono alle quattro situazioni seguenti:
  • valore 0: non sono conservati né gli spazi iniziali né quelli finali.
  • valore 1: sono conservati gli spazi iniziali ma non quelli finali.
  • valore 2: sono conservati gli spazi finali ma non quelli iniziali.
  • valore 3: sono conservati sia gli spazi iniziali sia quelli finali.
Le condizioni 0 e 1 sono quelle di uso più frequente. La conservazione degli spazi all'inizio delle righe (condizioni 1 e 3) permette, ad esempio, di mantenere le tabulazioni esistenti. La necessità di conservare gli spazi finali si presenta solo in casi molto particolari.
PrKey
Condizione predefinita: .
Si modifica con Shift+F7 o Alt+Y (dal prompt con l'opzione /Y).
Se lo stato è (protezione attiva), le quattro chiavi critiche possono essere impostate solo con il file di inizializzazione mentre i relativi comandi eventualmente presenti nelle tabelle sono ignorati [¶7.2.1].
PrDir
Condizione predefinita: .
Si modifica con Shift+F8 o Alt+Z (dal prompt con l'opzione /Z).
Se lo stato è (protezione attiva), non è possibile né adottare una cartella critica come cartella destinazione [¶3.2] né accedere dalla finestra di esplorazione [¶4.2] alla cartella di Windows e alla cartella dei programmi.
Suoni
Condizione predefinita: .
Si modifica con F6 o Alt+S (dal prompt con l'opzione /S).
Sono previste varie segnalazioni acustiche che possono essere escluse ponendo a No lo stato di questo parametro. Anche l'opzione /Q ha influenza sull'emissione di suoni.
Log
Condizione predefinita: .
Si modifica con Shift+F2 o Alt+L (dal prompt con l'opzione /L).
Attiva o esclude la scrittura dei resoconti su file [¶9].
Reimpagina
Condizione predefinita: No.
si modifica con Shift+F6 o Alt+R, dal prompt con l'opzione /R [¶10].
Se questo parametro è posto a , al termine del procedimento di sostituzione viene svolta la reimpaginazione, cioè il testo viene riscritto con righe di lunghezza massima prestabilita. Se necessario, due righe consecutive vengono riunite. Non vengono riunite le righe separate da una riga vuota (cioè da due ritorni a capo consecutivi) e quelle che terminano o iniziano con particolari caratteri, impostati nel file di inizializzazione rispettivamente con le chiavi _FRiga e _IRiga. Nella reimpaginazione sono utilizzati i parametri di riga descritti in [¶4.6].
Taglia
Condizione predefinita: No.
si modifica con Shift+F5 o Alt+P, dal prompt con l'opzione /+ [¶10].
Se questo parametro è posto a , prima che abbia inizio il procedimento di sostituzione viene attivata la funzione di taglio, qualora opportunamente prevista in qualche tabella, come spiegato in [¶4.4].

4.8. Tabella extra

Nella finestra principale, alla pressione di F4 viene aperta con l'editor una nuova tabella chiamata extra, utile per definire corrispondenze al volo o per effettuare prove. Se vengono inseriti almeno una corrispondenza valida oppure un blocco ARRAY/ENDARRAY, la tabella viene automaticamente attivata e un file con nome del tipo extra0.tab, extra1.tab, ... extra9999.tab viene temporaneamente memorizzato nella cartella delle tabelle (verificare la finestra di scelta delle tabelle, F3). La descrizione provvisoria, che andrà opportunamente adattata, contiene l'orario di creazione del file.

Nella sezione [CONFIG] compaiono le impostazioni attualmente vigenti che, essendo riportate solo a titolo di promemoria, sono espresse in forma di commento (con la marcatura ## a inizio riga).

Al termine della sessione il programma chiede se si vuole mantenere la tabella extra. Nel corso della sessione si può chiudere e memorizzare stabilmente la tabella extra premendo Shift+F4 oppure Alt+M, cosicché è possibile aprire una nuova tabella extra premendo F4.

4.9. Aggiunta di testo iniziale e finale

È possibile predisporre blocchi di testo da aggiungere all'inizio o alla fine dei file da elaborare. L'aggiunta viene effettuata al termine di tutte le operazioni, dopo le sostituzioni e dopo l'eventuale reimpaginazione.

I blocchi di testo da aggiungere vanno predisposti mediante le tabelle di aggiunta testo come spiegato in [¶7.8].

4.10. Elaborazione multipla

Il programma WinPulisci consente di svolgere un'elaborazione multipla, trattando più file specificati con un unico comando. Basta indicare come origine (al prompt dei comandi o nel campo File origine della finestra principale: È prevista la possibilità di includere i file che si trovano nelle sottocartelle specificando il livello di sottocartella cui si vuole estendere la ricerca. Tale profondità viene determinata con l'opzione /M o con la chiave KMaxScanLv del file di inizializzazione. Il valore predefinito è 1. Il valore 0 indica che viene esaminata solo la cartella specificata senza le sue eventuali sottocartelle. Se si vuole estendere la ricerca a tutte le sottocartelle, basta indicare un valore elevato ad esempio 999.

Se vengono trovati file che corrispondono alla specificazione indicata, il programma chiede il consenso per procedere con l'elaborazione.

Elaborazione multipla immediata
Se si risponde premendo S, l'elaborazione ha inizio e prosegue automaticamente fino all'esaurimento dei file. I file risultanti vengono posti tutti in una nuova sottocartella che viene generata appositamente nella cartella destinazione corrente e che ha nome multi, multi1, multi2, eccetera. In questa sottocartella viene riprodotta la struttura di sottocartelle dei file originali. Dato che la sottocartella è sempre nuova, non può verificarsi il caso che ci siano file omonimi preesistenti.
Se la verifica del file destinazione è attivata con eliminazione in caso di identità rispetto al file origine, può accadere che una o più sottocartelle non compaiano nella struttura riprodotta (opzione /V e chiave KVerif del file di inizializzazione).
Elaborazione multipla differita
Se la risposta alla richiesta di consenso è N, rimane ugualmente la possibilità di svolgere l'elaborazione multipla in modo differito. Essa ha luogo con l'appoggio di un file batch di nome WPul-bat.bat che viene generato appositamente e che viene posto nella cartella di lavoro. Basta chiudere il programma e, dopo aver selezionato il file stesso, avviarne l'esecuzione. Il file batch adotta le impostazioni correnti che erano in vigore nel momento in cui è stato generato, comprese quelle desunte dalla riga di comando. Vengono anche utilizzate le tabelle che risultavano selezionate in quel momento.
In questo caso la sottocartella che ospita i file elaborati ha nome fisso multi, sempre nella cartella destinazione corrente. Se esiste già tale sottocartella, è necessario spostarla o rinominarla manualmente.
Considerare che l'elaborazione multipla immediata, che è molto più efficiente, è decisamente da preferire rispetto a quella differita.

La reimpaginazione, se specificata nel contesto di un'elaborazione multipla (tanto immediata quanto differita), viene eseguita senza alcuna richiesta di consenso.

Per la specificazione che avvia l'elaborazione multipla, se immessa dal prompt dei comandi, valgono le condizioni indicate di seguito.

Il file batch abbinato all'elaborazione multipla differita si avvale di un file temporaneo che ospita alcuni dati riguardanti l'elaborazione svolta. Viene inoltre utilizzata l'opzione /G, valida unicamente in questo contesto, i cui parametri sono impostati dal programma in modo opportuno per prevenire errori accidentali.

4.11. Data/ora del file destinazione

Normalmente il file destinazione assume l'orario (timestamp) del momento in cui è terminata l'elaborazione (che chiamiamo orario attuale). Mediante la chiave _TSAdj (file di inizializzazione o tabelle) oppure con l'opzione /J si può impostare un orario diverso. Si possono utilizzare due criteri distinti.
Aggiustamento relativo
Si assegna un unico numero x:
_TSAdj = x
Se x vale -1 si ha la situazione predefinita (orario attuale). Eccettuato tale valore, x indica uno scostamento in secondi (offset) che determina l'orario del file destinazione in base alla regola seguente:
  • Se x è maggiore o uguale di 0 l'orario è posteriore di x secondi rispetto all'orario del file originale
  • Se x è negativo (e diverso da -1), l'orario è anteriore all'istante attuale di un numero di secondi pari al modulo di x.
Ad esempio, se il numero vale 0, il file destinazione ha lo stesso orario del file origine, mentre se vale 1800 l'orario viene incrementato di 30 minuti.
Nota. Se lo scostamento rispetto all'orario attuale comporta una data anteriore al 1/1/1980, il dato è ignorato e viene adottata l'impostazione predefinita.
Aggiustamento assoluto
Si esprime una data indicando sei numeri separati da virgole nel modo seguente:
_TSAdj = anno,mese,giorno,ore,minuti,secondi
Occorre indicare una data valida. Ad esempio 2017,2,29, viene rifiutata perché l'anno 2017 non è bisestile.
Naturalmente, se si utilizza l'aggiustamento assoluto durante un'elaborazione multipla, risulta che tutti i file ottenuti hanno lo stesso orario.
Entrambi i criteri si applicano nello stesso modo all'opzione /J. Ad esempio, sono valide entrambe le opzioni /J-1800 e /J2016,3,30,12,0,0.

Torna al sommario.

5. Il modo batch

L'elaborazione viene svolta direttamente (modo batch) quando il nome del file è indicato al prompt dei comandi come primo parametro, a meno che non si specifichi l'opzione /F che forza l'ingresso nel modo interattivo.

Il nome di file indicato al prompt, se non include un percorso assoluto, viene dapprima considerato relativo alla cartella corrente e solo in seconda battuta alla cartella origine. Ad esempio, il seguente comando cerca il file testo.txt prima nella cartella D:\Lavoro\ e, solo se non lo trova in tale posizione, nella cartella origine:

D:\Lavoro>WPulisci.exe testo.txt
Se il primo parametro è un nome di cartella oppure se contiene caratteri jolly, viene avviata l'elaborazione multipla [¶4.10].

Si può indicare facoltativamente come secondo parametro il nome del file destinazione, che può anche essere il nome di una cartella esistente.

Se si avvia l'elaborazione in modo batch, si possono immettere al prompt dei comandi le idonee opzioni per far conoscere al programma i dati necessari: in questo caso, di solito conviene servirsi di file batch opportunamente predisposti che corrispondano alle specifiche esigenze (a titolo di esempio v. i file batch nella cartella Demo\ [¶13.1]). Per la descrizione completa delle opzioni disponibili v. [¶10].

L'opzione più importante è /T mediante la quale si scelgono le tabelle da caricare. Si possono specificare più tabelle come nell'esempio seguente:

WPulisci.exe testo.txt d:\cartella\ /t tab1 tab2 tab3 tab4
Tutte le tabelle devono avere la stessa estensione, normalmente .tab, che non è necessario indicare sulla linea di comando. Ad esempio, il comando precedente equivale a:
WPulisci.exe testo.txt d:\cartella\ /t tab1.tab tab2.tab tab3.tab tab4.tab
Si può modificare l'estensione valida per le tabelle avviando il programma con l'opzione /X. Ad esempio, per assegnare l'estensione .mia si può usare il comando:
WPulisci.exe /x.mia
Lo stato delle tabelle memorizzato nel file di inizializzazione viene ignorato durante l'esecuzione batch, dove le tabelle attive sono unicamente quelle che vengono specificate con l'opzione /T.

Un'altra opzione utile nel funzionamento in modo batch è /Q che determina il controllo sulla cancellazione del file e la comparsa dei messaggi a video. Sono previsti 6 livelli selezionabili con i numeri da 0 (predefinito) a 5. Nel modo interattivo il livello è posto automaticamente al valore 0.

Osservazione. Quando si specifica un nome di file sulla riga di comando, invece di indicare come secondo parametro un nome di cartella, è possibile usare l'opzione /D seguita dal nome della cartella stessa. Si noti però che in tal caso, se si forza con /F l'ingresso nel modo interattivo, la cartella indicata assume in seguito il ruolo di cartella destinazione predefinita perché il dato viene memorizzato nel file di inizializzazione.

Torna al sommario.

6. Funzioni di aiuto

Nel normale funzionamento interattivo si può premere il tasto F1 che fornisce alcune istruzioni sulle azioni da compiere e sui tasti utilizzabili. Alcuni suggerimenti essenziali sono indicati nell'ultima riga in basso dello schermo.

La finestra principale mostra anche le informazioni riepilogative sulle tabelle, presentate secondo lo schema seguente:

Tabelle attive 5/53, PRE-TXT, taglio=primo_cr.tab
Corrispondenze 4   (J2  S1  R1  E1)
 Auto NO|Conserva 1|PrDir SI|PrKey SI|Suoni SI|Log SI|Reimpag NO|Taglia NO|Ins
Il significato delle informazioni è esplicitato di seguito. Infine è mostrata una riga con lo stato dei parametri di funzionamento [¶4.7. La visualizzazione di questa riga e dei dati riepilogativi delle tabelle può essere esclusa o ripristinata con Alt+Q.

Sono previste segnalazioni acustiche differenziate per varie circostanze: qualora esse arrechino disturbo, possono essere escluse con F6 o anche con l'opzione /S al prompt dei comandi.

Dal prompt dei comandi si può ottenere la sintassi del programma con l'elenco completo delle opzioni disponibili eseguendo il comando: WPulisci /H. La stessa finestra di aiuto può essere aperta dalla finestra principale premendo Ctrl+F1.

Torna al sommario.

7. Le tabelle di sostituzione

Le tabelle di sostituzione sono ordinari file di testo con estensione .tab, estensione che può essere modificata con la chiave KExtTab del file di inizializzazione o con l'opzione /X dal prompt dei comandi. Le regole per la loro redazione sono descritte in questo capitolo.

Le tabelle sono collocate tutte insieme in una cartella che, per impostazione predefinita, è la sottocartella tab della cartella di lavoro. È possibile utilizzare una diversa cartella assegnandone il percorso con la chiave KTabDir del file di inizializzazione o con l'opzione /P al prompt dei comandi.

Per il significato del termine carattere v. [¶7.16].

7.1. Struttura delle tabelle

Ogni tabella può essere composta da varie sezioni, ognuna delle quali inizia con un'etichetta identificativa. Queste etichette devono trovarsi all'inizio di una riga e il corpo della rispettiva sezione inizia con la riga successiva. Le sezioni possibili sono elencate qui di seguito (le principali sono le prime due). Le etichette non devono essere necessariamente in caratteri maiuscoli.
Etichetta [CONFIG]
Sezione di configurazione (detta anche sezione simboli) per l'assegnazione dei simboli.
Etichetta [CORR]
Sezione per definire le corrispondenze o coppie di stringhe. Può comparire più volte nella stessa tabella. Questa sezione può inoltre ospitare uno o più blocchi ARRAY/ENDARRAY per definire e utilizzare array semplici o associati [¶7.11].
Etichetta [VAR]
Sezione per definire le variabili dell'utente [¶7.9].
Etichette [PRE-TXT] e [POST-TXT]
Sezioni utilizzabili solo nelle tabelle di aggiunta testo, particolari tabelle per l'aggiunta di un blocco di testo all'inizio o alla fine del file [¶7.8].
Etichetta [END]
Quando il programma trova questa etichetta ignora tutta la parte del file da quella riga in avanti.
La prima riga di ciascuna tabella è un'intestazione che deve iniziare con l'etichetta identificativa di apertura [WinPulisci] (essa serve per assicurare la validità della tabella). Tutta la parte di file compresa fra tale etichetta e la prima etichetta di una sezione è un testo libero che può essere utile per commentare e ricordare il contenuto. Il programma utilizza la parte iniziale di questo testo, fino a circa 1500 byte, nella finestra di scelta delle tabelle quale descrizione delle stesse.

Facciamo sempre riferimento alle varie sezioni indicandole con le rispettive etichette.

La sezione [CONFIG] deve essere posta sempre per prima. Se presente, la sezione [VAR] deve trovarsi dopo la sezione [CONFIG] ma prima delle altre sezioni. Infine la presenza di una sezione [CORR] comporta che le sezioni [PRE-TXT] e [POST-TXT] vengono ignorate.

Nota. Per mantenere la compatibilità con PULISCI per MS-DOS, il programma WinPulisci accetta le etichette [PULISCI], [SIMBOLI], [CORRISPONDENZE], [FINE] [¶14.A].

7.2. Sezione [CONFIG]

La sezione [CONFIG] non è indispensabile perché tutti i simboli convenzionali hanno un valore predefinito. Se si desidera assegnare in una tabella qualche valore diverso, si raccomanda di impiegare lo stesso simbolo in tutte le tabelle attive durante l'elaborazione [¶11.4]. Normalmente, per i comandi che lo consentono, basta utilizzare il file di inizializzazione WPulisci.ini [¶11] per impostare stabilmente i valori desiderati, che prendono il posto di quelli predefiniti, e omettere, nella maggior parte dei casi, la sezione [CONFIG] in tutte le tabelle.

Ovviamente, volendo modificare qualche simbolo, è necessario scegliere simboli che non diano adito ad equivoci [¶7.15]. Tenere anche nella dovuta considerazione la protezione delle chiavi critiche [¶7.2.1].

Ogni riga della sezione [CONFIG] consta di un comando della forma:

chiave = valore  ##commento facoltativo
Segue un esempio di sezione [CONFIG] (i valori che vi compaiono sono quelli predefiniti al momento della prima installazione).
[CONFIG]
_AnsiC = 1   ##trattamento maiuscole/minuscole: 0=OEM, 1=ANSI, 2=auto
_Delim =()   ##separatore delle stringhe
_Acapo =$CR  ##Simbolo per la sequenza di ritorno a capo
_CarJol=@    ##Carattere jolly
_CtrlK =^0   ##marcatore caratteri di controllo; con 0 codici nella forma ^00 ... ^31
_BlIni =/..  ##Inizio di un blocco di testo
_BlFin =../  ##Fine di un blocco di testo
_TSAdj=-1   ##aggiustamento orario del file destinazione
_Codici=0,7-13,26-27
_FRiga =.!?;:
_IRiga =; -*/#[_:@^07^09
Ci sono inoltre le chiavi _StIni, _StFin, _nSIni, _nSFin, _tByte (informazioni relative alla funzione di taglio) e le chiavi _Jolly0, _Jolly1, ..., _Jolly999 (definizione degli insiemi preimpostati per costruire l'insieme di caratteri da assegnare al jolly).

In ciascuna riga della sezione [CONFIG], la parte che inizia con la marcatura ## fino a fine riga viene ignorata. La parte a sinistra del segno di uguale è la chiave, mentre a destra è posto il corrispondente valore. Gli spazi che circondano il valore (alla sua sinistra dopo il segno di uguale e alla sua destra prima dell'eventuale commento) sono ignorati.

Nel prossimo prospetto il valore a destra del segno di uguale è quello predefinito dal programma. Le chiavi sono insensibili alle maiuscole/minuscole mentre i valori vanno espressi con l'esatta grafia riguardo alle lettere maiuscole o minuscole. L'ordine delle righe non è rilevante, ad eccezione delle chiavi _CarJol e _CtrlK che vanno messe all'inizio, prima delle righe che prevedono la possibilità di includere i corrispondenti simboli (ad esempio, i delimitatori di inizio e fine blocco o gli insiemi di caratteri preimpostati per il jolly). Salvo diversa indicazione, le chiavi sono accettate anche nel file di inizializzazione.

_AnsiC=1
Specifica la codifica per il trattamento delle lettere accentate maiuscole/minuscole nelle corrispondenze (v. [¶8.10] e opzione /U).
Valori ammessi: 0=OEM (MS-DOS), 1=ANSI (Windows, predefinito), 2=scelta automatica.
_Delim=()
Separatore delle stringhe di cui è composta ogni corrispondenza [¶7.3]. Deve avere da due a cinque caratteri (quelli eccedenti vengono ignorati), deve contenere almeno un carattere non alfanumerico e deve essere diverso dal simbolo della sequenza di ritorno a capo. V. ulteriori limitazioni in [¶7.15].
Nota. Tenere presente che è possibile definire separatori con validità locale [¶7.3.1].
_Acapo=$CR
Definisce il simbolo che rappresenta la sequenza di ritorno a capo [¶7.4]. Deve avere da due a cinque caratteri (quelli eccedenti vengono ignorati), deve contenere almeno un carattere non alfanumerico e deve essere diverso dal separatore di cui sopra. V. ulteriori limitazioni in [¶7.15].
_CarJol=@
Simbolo jolly (un singolo carattere) [¶7.6]: non deve essere alfanumerico e deve essere diverso dal marcatore dei caratteri di controllo. V. ulteriori limitazioni in [¶7.15].
Nota. Tenere presente che è possibile definire caratteri jolly con validità locale [¶7.3.1].
_CtrlK=^0
Marcatore dei caratteri di controllo (primo carattere) [¶7.4]: non deve essere alfanumerico e deve essere diverso dal simbolo jolly. Il secondo carattere 0 specifica l'adozione della codifica con codici ASCII a due cifre (impostazione predefinita) [¶7.4].
_BlIni=/..
Etichetta di inizio blocco: questa stringa e l'analoga definita con _BlFin costituiscono insieme i cosiddetti delimitatori di blocco di testo. Tali delimitatori sono usati in combinazione con le direttive * e + [¶8.4]. Nel valore è ammessa la presenza di caratteri di controllo (codice ASCII minore di 32) e del ritorno a capo, da specificare con gli appositi simboli [¶7.4].
Nota. Le etichette di inizio e fine blocco devono essere una diversa dall'altra.
_BlFin=../
Etichetta di fine blocco, v. _BlIni.
_Codici=0,7-13,26-27
Codici dei caratteri di controllo ammessi [¶7.5].
_FRiga=.!?;:
Insieme con _IRiga, questa chiave è abbinata alla funzione di reimpaginazione [¶4.3]. Le due stringhe definite con questi comandi servono per impedire la ricongiunzione di due righe consecutive durante la reimpaginazione. Precisamente:
  • una riga che termina con uno dei caratteri specificati da _FRiga non viene ricongiunta con la riga successiva;
  • una riga che inizia con uno dei caratteri specificati da _IRiga non viene ricongiunta con la riga precedente.
In ciascuna delle due stringhe si possono indicare caratteri di controllo (codice ASCII da 0 a 31) nella forma appropriata [¶7.4], ma non sono ammessi i caratteri con codice ASCII 10 e 13 e il simbolo per la sequenza di ritorno a capo. La reimpaginazione è controllata dal parametro Reimpagina e dai parametri lunghezza riga e Lunghezza parola a fine riga [¶4.6].
_IRiga=; -*/#[_:@^07^09
V. sopra _FRiga.
_TSAdj=-1
Determina l'orario del file destinazione. Per impostazione predefinita (valore -1) l'orario è quello attuale [ 4.11].
_StIni, _StFin, _nSIni, _nSFin.
Queste chiavi riguardano il taglio delimitato da stringhe [¶4.4.1]. Non sono ammesse nel file di inizializzazione.
_tByte>
Riguarda il taglio di un intervallo espresso in byte [¶4.4.2]. Questa chiave prevale sulle chiavi per il taglio delimitato da stringhe, se presenti nella stessa tabella. Non è ammessa nel file di inizializzazione.
_Jolly0=
Definisce l'insieme preimpostato numero 0 da usare con le direttive J per costruire l'insieme abbinato al jolly. In modo analogo si usano le chiavi _Jolly1, ..., _Jolly999. Sono ammessi i caratteri di controllo nella forma appropriata ma non va usato il simbolo per la sequenza di ritorno a capo perché esso, se presente, verrebbe acquisito letteralmente).
Per gli insiemi preimpostati standard v. la tabella in [¶8.7]).

7.2.1. Protezione delle chiavi critiche

Le quattro chiavi _Delim, _Acapo, _CarJol e _CtrlK descritte in [¶7.2] sono considerate critiche e perciò i rispettivi valori, che sono definiti nel file di inizializzazione con le stesse chiavi, non vengono normalmente acquisiti quando sono presenti nelle tabelle. Questa restrizione, detta protezione delle chiavi critiche, può essere esclusa utilizzando Shift+F7, Alt+Y, lopzione /Y0 oppure la chiave _KProtKey=0 nel file di inizializzazione.

Rimane comunque la possibilità di definire liberamente un separatore e un carattere jolly con validità locale, cioè ristretta a una singola corrispondenza [¶7.3.1].

7.3. Sezione [CORR] (definizione delle corrispondenze)

Nella sezione corrispondenze ogni riga contiene una coppia di stringhe o sequenze di caratteri come nell'esempio seguente:
1'()l'()
Il separatore (), definito nella sezione di configurazione con il comando _Delim, indica al programma il margine destro delle sequenze di caratteri: la prima è quella da cercare nel testo, la seconda è quella destinata a prendere il posto della prima. Gli spazi vuoti presenti nelle due stringhe sono significativi.

È ammesso che la seconda stringa sia vuota (in tal modo si cancellano nel file tutte le occorrenze della prima stringa), mentre non ha senso che sia vuota la prima stringa. Quindi la seguente corrispondenza è valida:

ABC()()
Invece la seguente riga non è valida e non definisce una corrispondenza (cfr. però i simboli con validità locale [¶7.3.1]):
()ABC()
In ogni caso si pretende che la riga che contiene una corrispondenza contenga due separatori, che indicano il margine destro rispettivamente della prima e della seconda stringa. Una riga come la seguente non definisce una corrispondenza ed è ignorata, dato che manca il separatore a destra della seconda stringa:
ABC()XYZ
A destra del secondo separatore si possono aggiungere facoltativamente una o più direttive che condizionano il modo in cui viene svolta l'operazione di sostituzione. Ad esempio:
prova()test()I
La direttiva I rende la ricerca della prima stringa insensibile alle maiuscole/minuscole [¶8.3].
Dopo le eventuali direttive è possibile aggiungere una stringa di caratteri a piacere racchiusa tra virgolette che viene presa in considerazione se nella corrispondenza è presente il jolly [¶8.7].
In conclusione, la struttura completa di una corrispondenza è la seguente (le parentesi quadre racchiudono termini facoltativi e non vanno digitate):
stringa1()stringa2() [direttive] ["caratteri per il jolly" | ##commento]
Notare che il commento non è ammesso quando è presente la stringa "caratteri per il jolly".

La sezione [CORR] può ospitare anche uno o più blocchi ARRAY/ENDARRAY. Per la trattazione di questo argomento v. [¶7.11].

7.3.1. Separatore e carattere jolly con validità locale

Il separatore e il carattere jolly possono essere modificati attribuendo loro valori che hanno validità locale, cioè ristretta a una singola corrispondenza. Ciò può essere utile se si presenta la necessità di inserire nella corrispondenza tali simboli con valenza letterale.

La definizione di questi due simboli locali si effettua anteponendo alla corrispondenza, nella stessa riga, una o due particolari sequenze, composte ciascuna di due parti, come spiegato di seguito. È possibile usare due sequenze consecutive, una per il separatore locale e una per il jolly locale.

Prima parte Il separatore ordinario.
Nota. Ricordare che, tranne nella definizione dei simboli locali, le corrispondenze che iniziano con il separatore non sono valide).
Seconda parte (immediatamente a destra del separatore)
È costituita da due caratteri non alfanumerici con codice ASCII compreso fra 33 e 127. In base al primo dei due caratteri possono verificarsi due situazioni.
  1. Il primo carattere è @: in questo caso viene adottato come carattere jolly locale il secondo carattere della coppia.
  2. Il primo carattere non è @: in questo caso il separatore locale è la stringa formata con entrambi i caratteri.
La parte rimanente della stringa, a destra delle sequenze suddette, costituisce la corrispondenza vera e propria, nella quale naturalmente vanno utilizzati i simboli locali, coerentemente con la definizione appena indicata. Ad esempio, supponendo di voler utilizzare localmente il separatore // e il carattere jolly #, la corrispondenza assume la forma generale seguente:
()//()@#stringa1//stringa2// [direttive] ["caratteri per il jolly" | ##commento]
Se compaiono due sequenze che definiscono lo stesso simbolo locale, la seconda è considerata parte della corrispondenza.

La validità dei simboli locali è ristretta esclusivamente alla corrispondenza in cui essi sono definiti. I caratteri assegnati ai simboli locali vanno scelti opportunamente in base al contenuto delle stringhe che fanno parte della corrispondenza. Non ci sono restrizioni sul numero di corrispondenze che utilizzano simboli locali ed essi possono variare passando da una corrispondenza all'altra.

Esempi. La prossima corrispondenza permette di sostituire la stringa () con la stringa [] senza modificare il separatore globale nel file di inizializzazione:

()++()++[]++
La prossima corrispondenza usa localmente un punto interrogativo come carattere jolly e consente di includere il carattere @ fra i caratteri da attribuire al jolly, trasformando casa, c@sa, c@s@ in Casa, indipendentemente dai caratteri maiuscoli o minuscoli:
()@?c?s?()Casa() i p1 "@Aa"
Nella stessa corrispondenza si può contemporaneamente modificare anche il separatore:
()@?()++c?s?++Casa++ i p1 "@Aa"
Le prossime corrispondenze non definiscono simboli locali e non sono valide (al posto dei puntini immaginare caratteri a piacere):
()@x...()...()      ##il carattere x a destra di @ è alfabetico
()+0...+0...+0      ##la stringa +0 non è valida come separatore locale perché il carattere 0 è una cifra
(){}...()...()      ##è definito il separatore locale {} ma la corrispondenza utilizza quello ordinario ()
La prossima corrispondenza definisce correttamente il separatore locale //:
()//()++...//...//
Tuttavia l'effetto potrebbe essere diverso da quello atteso. Infatti sono presenti due sequenze per la definizione del separatore locale e solo la prima di esse è accettata per tale funzione. La seconda sequenza ()++ rientra nella prima stringa della corrispondenza che è ()++....

7.4. Rappresentazione dei caratteri di controllo

Le tabelle, che sono ordinari file di testo, non possono contenere certi caratteri e l'unico modo di indicarli è quello di utilizzare un opportuno simbolo che li rappresenti. Ciò riguarda sia le stringhe facenti parte delle corrispondenze sia gli insiemi di caratteri relativi al jolly, alle etichette di inizio e fine blocco, eccetera.
Sequenza di ritorno a capo
Costituita normalmente da una coppia di caratteri con codici ASCII 13 e 10, essa è rappresentata nel programma WinPulisci dal simbolo $CR.
Caratteri di controllo
Sono i caratteri con codice ASCII minore di 32, vengono indicati con il marcatore ^ (accento circonflesso) seguito dal rispettivo codice ASCII a due cifre, vale a dire ^00 ^01 ... ^31. Se lo si vuole indicare testualmente come carattere, il marcatore stesso deve essere raddoppiato. Ad esempio, per indicare la stringa formata da tre caratteri ^12 (e non il carattere Form Feed che ha codice ASCII 12) si dovrà usare la forma ^^12
Si possono adottare simboli diversi definendoli con le apposite chiavi nella sezione [CONFIG] del file di inizializzazione o delle tabelle: la sequenza di ritorno a capo $CR si modifica con la chiave _Acapo, il marcatore ^ con la chiave _CtrlK (v. [¶11] e [¶7.2]).

Nota bene. La codifica dei caratteri di controllo è cambiata rispetto alla versione di PULISCI per MS-DOS. Le vecchie tabelle rimangono tuttavia compatibili secondo quanto precisato in [¶14.A].

7.5. Convalida del file origine

Esiste l'esigenza di evitare l'intervento accidentale su file che non sono di puro testo. Perciò, prima di partire con l'elaborazione, il programma effettua una verifica sui primi 2048 byte del file origine e dichiara che esso non è di testo se riscontra la presenza di caratteri indesiderati.

Normalmente non sono accettati i caratteri con codice ASCII minore di 32, eccezion fatta per 0, 7, 8, 9, 10, 12, 13 e 26. È però possibile abilitare qualunque carattere usando la chiave _Codici nella sezione [CONFIG] del file di inizializzazione o delle tabelle. In tale comando i codici vanno separati uno dall'altro con una virgola. Oltre ai codici singoli sono ammessi anche intervalli numerici (due numeri separati da un trattino) come nell'esempio seguente:

_Codici=1,3,7-13,24-28
La scrittura in forma compatta 7-13 indica tutti i numeri interi da 7 a 13. Quindi il comando precedente equivale a:
_Codici=1,3,7,8,9,10,11,12,13,24,25,26,27,28
La chiave _Codici viene letta nel file di inizializzazione all'avvio del programma. Durante l'elaborazione è possibile modificare questo insieme attivando una tabella che includa la stessa chiave nella sezione [CONFIG].

Si tenga presente che i file aventi una delle estensioni EXE, COM, DLL, OCX, PIF vengono sempre rifiutati, indipendentemente dal loro contenuto.

7.6. Il carattere jolly

In ciascuna stringa si può includere il carattere jolly @, che chiameremo semplicemente jolly. Esso è modificabile con la chiave _CarJol nel file di inizializzazione. Il jolly di WinPulisci viene riconosciuto al più quattro volte in ogni stringa. Notare che nelle due stringhe di una corrispondenza non è richiesto che esso occupi posizioni identiche.

Una corrispondenza contenente il jolly equivale ad una serie di tante corrispondenze, ottenute assegnando successivamente al jolly tutti i caratteri appartenenti ad un insieme che deve essere assegnato opportunamente. L'utilità del jolly sta nel fatto che esso permette di definire con un unico comando un gruppo anche molto numeroso di corrispondenze affini tra loro. Esistono due modi per definire l'insieme di caratteri per il jolly.

  1. Scrivere esplicitamente l'elenco dei caratteri desiderati racchiuso tra virgolette a destra del secondo separatore e dopo le eventuali direttive [¶7.3].
  2. Usare le direttive J [¶8.7] per specificare uno o più degli insiemi predisposti mediante le chiavi _Jolly0, _Jolly1, ... _Jolly999 nella sezione [CONFIG] del file di inizializzazione o delle tabelle.
In tutti questi insiemi di caratteri si possono indicare anche i caratteri di controllo, mediante la rappresentazione descritta in [¶7.4]. Inoltre in una stessa corrispondenza è consentito specificare simultaneamente un insieme esplicito e un numero a piacere di direttive J0, J1 ... J999.

Nei prossimi esempi, che illustrano astrattamente le possibilità di sostituzione mediante jolly, sono usate anche le direttive 0 1 ... 9 che costituiscono la forma abbreviata rispettivamente di J0 J1 ... J9.

a@bc()xy@() J3
a@bc()xy@() J20 J400 "aeiou"
@a@bc()xy@z@()05 J97
@a@bc()xy@z()J0J5
@a@bc()xyz()05
Nelle due stringhe il jolly può comparire una volta (jolly semplice) oppure più volte (fino a quattro, jolly multiplo), ma nella seconda stringa esso deve comparire un numero di volte non superiore al numero di occorrenze nella prima stringa (per le occorrenze eccedenti, il carattere jolly è trattato come un carattere ordinario). In particolare il jolly può essere del tutto assente nella seconda stringa e una siffatta sostituzione può servire per cancellare certi caratteri. Per i particolari sul jolly multiplo e sulla direttiva @ v. [¶8.8].

Se il jolly è assente nella prima stringa, la corrispondenza è trattata in modo ordinario e l'insieme dei caratteri da abbinare al jolly viene ignorato.

Alcuni casi in cui il jolly è trattato come un carattere ordinario:

7.7. Corrispondenza prompt e array prompt

Si può assegnare una cosiddetta corrispondenza prompt come parametro sulla riga di comando all'avvio di WinPulisci, a destra dell'opzione /! [¶10], con le stesse regole per la redazione delle tabelle viste in questo capitolo. Essa può essere impiegata da sola o in combinazione con una o più tabelle attivate con l'opzione /T e in quest'ultimo caso viene applicata all'inizio, prima di tutte le corrispondenze presenti nelle tabelle.
La corrispondenza prompt è pensata soprattutto per il modo batch [¶5]. Tuttavia può essere specificata nell'ambito di una sessione interattiva e in tal caso per essa valgono le seguenti regole: La corrispondenza prompt è copiata negli appunti di Windows, anche se non più presente fra le corrispondenze attive, in modo da poter essere facilmente inserita quando si apre una qualunque tabella con l'editor.

Si deve avere l'avvertenza di mettere l'opzione /! per ultima perché tutta la parte di comando alla sua destra è considerata definizione della corrispondenza. Ad esempio, la seguente riga di comando non è sensata (Le due opzioni sarebbero ignorate e invece verrebbero attivate la direttiva R e le direttive per l'insieme jolly 1, 2 e 8):

D:\>WPulisci testo.txt elaborato.txt /c1 /!abc()xyz() /r128 /l
Se si usa l'opzione /! senza una stringa alla sua destra, il programma adotta implicitamente la corrispondenza <@>()()!, cioè interpreta il comando come se l'operatore avesse digitato quanto segue:
/!^<@^>()()!
Nota. Nel precedente esempio è stato usato il carattere di escape ^, necessario al prompt dei comandi di Windows per evitare che i caratteri < e > vengano interpretati come comandi di reindirizzamento. Lo stesso vale per i caratteri | (pipe) e & che al prompt vanno immessi come ^| e ^&.

In condizioni opportune, la corrispondenza prompt consente di definire da riga di comando un blocco ARRAY/ENDARRAY, chiamato per brevità array prompt, a cui si applicaquanto detto per la corrispondenza prompt. Per ulteriori particolari v. [¶7.14].

7.8. Tabelle di aggiunta testo

Sono particolari tabelle nelle quali si possono impostare blocchi di testo da aggiungere all'inizio o alla fine del file in elaborazione. In luogo delle consuete sezioni [CONFIG] e [CORR] deve essere presente una delle sezioni [PRE-TXT] oppure [POST-TXT], per identificare un blocco da aggiungere rispettivamente all'inizio oppure alla fine del file (una possibilità esclude l'altra). Ad esempio:
[PRE-TXT]
Testo da aggiungere
all'inizio del file.
Sono^09ammessi^09caratteri^09di^09controllo.
I ritorni a capo sono rispettati, salvo il caso in cui
la riga termina con \
il carattere di continuazione "\".
[END]
Il testo viene acquisito fedelmente, rispettando i ritorni a capo, fatte salve le circostanze indicate di seguito.
  1. Se una riga termina con il carattere \ (controbarra), detto carattere di continuazione, essa viene congiunta con la riga successiva, come se il ritorno a capo non esistesse. In particolare, se la controbarra è posta alla fine del testo viene omesso il ritorno a capo finale dell'intero blocco.
  2. Se si vuole terminare una riga con una controbarra occorre raddoppiarla in \\ (il raddoppiamento riguarda solo la controbarra al termine delle righe).
  3. Si possono utilizzare caratteri di controllo ^00, ^01, ... ^31.
  4. L'etichetta conclusiva [END] è facoltativa ed è prevista solo per ragioni di chiarezza.
In una tabella di aggiunta testo l'etichetta identificativa di apertura è obbligatoriamente [WinPulisci]. Come nelle normali tabelle, fra l'etichetta di apertura e l'inizio di una delle due sezioni ammesse si può inserire un commento facoltativo.

7.9. Definizione e uso delle variabili utente

L'utilizzatore di WinPulisci ha la facoltà di definire variabili in numero a piacere, che possono essere utili nelle corrispondenze o nelle tabelle di aggiunta testo, ad esempio per indicare valori ripetuti o di rappresentazione problematica.

Le variabili si definiscono nella sezione [VAR] del file di inizializzazione o delle tabelle con una delle seguenti sintassi (una variabile per riga):

$nome$=stringa
$nome$<lista codici decimali
$nome$>lista codici esadecimali
Ciascuna sintassi è composta da due parti separate da uno dei segni = (uguale), < (minore) o > (maggiore).

La parte di sinistra è il nome della variabile, che deve iniziare e terminare con il carattere $ (dollaro). I caratteri intermedi possono essere alfabetici, cifre o il carattere _ (sottolineato). Ogni altro carattere, compreso lo spazio, rende nulla la definizione. Inoltre la stringa $CR$ è riservata e non può essere usata come nome di variabile [¶7.15]. Le lettere maiuscole e minuscole sono considerati caratteri distinti (ad esempio, $a$ e $A$ sono variabili diverse).

Ogni nome di variabile può comparire una sola volta, contando le occorrenze presenti nel file di inizializzazione e nelle tabelle attive. Se un nome di variabile è ripetuto, viene considerata solo l'occorrenza che compare per prima.

La parte di destra è il valore, cioè il testo associato alla variabile. Il testo può essere specificato in tre modi.

Un'ordinaria stringa di testo
Fra il nome della variabile e la stringa si pone il segno di uguale. Nella stringa sono ammessi:
  • caratteri ordinari;
  • caratteri di controllo, mediante la rappresentazione descritta in [¶7.4].
  • altre variabili utente già definite in righe precedenti o in tabelle già caricate.
  • le variabili predefinite di WinPulisci e tutte le variabili di ambiente di Windows.
Per mantenere gli spazi agli estremi della stringa, che verrebbero eliminati, o per utilizzare il carattere virgolette nel valore, aggiungere le virgolette agli estremi come nel seguente esempio:
$a$ = " Lettera "A" "
Si eviti di includere il jolly nella stringa perché ciò potrebbe portare a effetti imprevisti e di difficile interpretazione.
Una lista di codici decimali
Fra il nome della variabile e la lista si pone il carattere < (minore). Gli elementi della lista sono numeri compresi fra 0 e 255 separati uno dall'altro con una virgola. Ad esempio:
$dec$<0,13,138,154,255
Una lista di codici esadecimali a due cifre
Fra il nome della variabile e la lista si pone il carattere > (maggiore). Gli elementi della lista sono valori esadecimali compresi fra 00 e FF separati uno dall'altro con una virgola. Ad esempio:
$BOM$>EF, BB, BF
Le variabili utente possono essere incluse nelle due stringhe di qualunque corrispondenza e nel testo delle tabelle di aggiunta testo, indipendentemente dalla tabella attiva in cui sono definite. Esse sono ammesse anche nell'insieme esplicito di caratteri abbinato al jolly, purché siano definite nella stessa tabella, in una tabella già caricata o nel file di inizializzazione. Ad esempio, si supponga di aver assegnato alla variabile $C$ la stringa con le consonanti maiuscole:
$C$=BCDFGHJKLMNPQRSTVWXYZ
Allora si può definire la seguente corrispondenza, che sostituisce 1 con I quando compreso fra due consonanti maiuscole:
@1@()@I@() "$C$"
Nota. Se la variabile $C$ dell'ultimo esempio viene definita in una tabella caricata successivamente, i caratteri che compongono il nome sono interpretati letteralmente.

Il prossimo esempio mostra il listato di una tabella nella quale la variabile $Tre$ è definita incapsulando in essa la variabile $x$ definita nella riga precedente.

[WinPulisci]
[VAR]
$x$=^13^10
$Tre$=$x$$x$$x$

[CORR]
. @().$Tre$@()1
Le variabili utente coinvolte in un insieme di tabelle attive sono elencate nel resoconto delle tabelle attive Tab-List.log, dove sono riportate anche le variabili riservate non utilizzabili ed eventuali variabili utilizzate ma non definite. Notare che eventuali variabili predefinite o variabili di ambiente sono citate con il loro nome, dato che l'attualizzazione avviene al momento dell'elaborazione.

7.10. Impiego delle variabili predefinite e delle variabili di ambiente

Le variabili predefinite e le variabili di ambiente di Windows sono usate nella forma %variabile% (con carattere iniziale e finale %, segno di percentuale). Le informazioni in esse contenute possono essere inserite nelle corrispondenze e nelle tabelle di aggiunta testo. Il prossimo esempio mostra come preparare una tabella per produrre un'intestazione contenente gli estremi del file originale.
[WinPulisci]
[VAR]
$giorno$=%WP_TDStr% %WP_TDMY%
$ore$=%WP_THr%.%WP_TMin%
$file$=%WP_Orig%
$dim$=%WP_OSize%

[PRE-TXT]
Questo file è stato elaborato $giorno$ alle $ore$ a partire dal file $file$ di $dim$.^13^10
[END]
È importante notare che le variabili predefinite e le variabili di ambiente non possono essere usate direttamente ma solo previo inserimento nel valore di qualche variabile utente.

Anche le variabili predefinite e le variabili di ambiente vanno indicate con l'esatta grafia riguardo ai caratteri maiuscoli/minuscoli.

I nomi delle variabili predefinite sono tutti della forma %WP_...% (v. l'elenco in [¶7.17]).

7.11. Array associati e array semplici

Un array è un elenco di valori che consente di espandere una corrispondenza in tante corrispondenze quanti sono gli elementi che compongono l'elenco. Per definire un array si utilizza la seguente sintassi (un array per riga):
$nome$=elemento1,elemento2,elemento3,...
A Sinistra del segno di uguale va posto il nome dell'array, che deve iniziare e terminare con il carattere $ (dollaro). Gli elementi dell'array sono stringhe che si scrivono a destra del segno di uguale con una virgola di separazione tra l'uno e l'altro.

Le definizioni degli array devono trovarsi nella sezione [CORR] di una tabella entro un blocco ARRAY/ENDARRAY. Inoltre ogni blocco ARRAY/ENDARRAY deve contenere almeno una corrispondenza nella quale compaiono i nomi degli array definiti in quel blocco.

La struttura di un blocco è illustrata nel seguente esempio, dove sono definiti due array con tre elementi ciascuno.

ARRAY
$x$=a,b,c
$y$=p,q,r
$x$...$y$()$y$...$x$() [direttive]
ENDARRAY
La corrispondenza presente nel blocco viene espansa in tre istanze della stessa (tante quant'è il numero massimo di elementi degli array). Le espansioni sono ottenute mettendo nelle stringhe della corrispondenza al posto dei simboli $x$ e $y$ gli elementi che occupano posizioni uguali nei due elenchi, andando da sinistra a destra. Per questo gli array $x$ e $y$ sono detti associati (fra gli array che si trovano in blocchi diversi non esiste alcuna associazione).

Il blocco dell'esempio precedente equivale in tutto e per tutto alle tre corrispondenze seguenti:

a...p()p...a() [direttive]
b...q()q...b() [direttive]
c...r()r...c() [direttive]
Se in un blocco è definito un unico array, esso è detto semplice perché cessa la possibilità di compiere le associazioni con gli elementi di altri array. Ciascuna corrispondenza del blocco, che in questo caso contiene un solo nome di array, viene espansa in un numero di corrispondenze pari al numero di elementi dell'array, con i vari elementi al posto del nome dell'array. Perciò la funzione svolta da un array semplice può essere considerata un ampliamento di quella del jolly.

Per particolari sulla composizione degli array v. [¶7.12]. Per esempi più concreti v. le tabelle animali.tab, FormattaOrario.tab, NumeriRomani.tab [¶13].

7.12. Regole di composizione degli array

Il nome di un array deve iniziare e terminare con il carattere $ (dollaro). I caratteri intermedi possono essere alfabetici, cifre o il carattere _ (sottolineato). Ogni altro carattere, compreso lo spazio, rende nulla la definizione. Inoltre la stringa $CR$ è riservata e non può essere usata come nome di array [¶7.15]. Le lettere maiuscole e minuscole sono considerate caratteri distinti (ad esempio, $x$ e $X$ definiscono array diversi.

Ogni tabella può contenere un numero arbitrario di blocchi ARRAY/ENDARRAY e ogni blocco può ospitare un numero arbitrario di array. Gli array definiti in uno stesso blocco devono avere nomi diversi tra loro.

Gli elementi degli array possono essere racchiusi tra virgolette, ma le virgolette non fanno parte dell'elemento che esse racchiudono. Nel prossimo array gli elementi sono tre (le virgole presenti entro le virgolette sono considerati caratteri facenti parte del secondo elemento p,q,r e non virgole di separazione fra gli elementi):

$x$=a,"p,q,r",c
Gli spazi che circondano la virgola di separazione sono ignorati, mentre quelli interni alle virgolette sono mantenuti. Osservare i prossimi quattro array.
$x$=a,b,c
$y$ = a, b, c
$z$ = "a", b, "c"
$w$ = " a ",b,c
Gli array $x$, $y$ e $z$ sono tra loro equivalenti (elementi ordinatamente uguali). Invece nell'array $w$ il primo elemento differisce dal primo elemento degli altri perché la lettera a è preceduta e seguita da uno spazio evidenziato con le virgolette.

Le virgolette possono essere usate solo come delimitatori degli elementi e non come caratteri facenti parte degli elementi. Nel prossimo array il primo elemento è considerato non valido e viene acquisito come una stringa vuota.

$x$=""a",b,c
Nelle corrispondenze del blocco, i nomi degli array possono comparire in qualunque posizione della prima stringa, della seconda stringa o di entrambe, possono essere ripetuti a piacere e possono anche essere omessi. Tuttavia, se nessuno degli array è citato in almeno una delle due stringhe della corrispondenza, non viene generata alcuna nuova istanza, cioè la corrispondenza è trattata in modo ordinario.

È consentito che due o più array associati abbiano un numero di elementi diverso tra loro. In questo caso nelle posizioni che non trovano un valore abbinato si considera implicitamente che ci sia una stringa vuota. In ogni caso, le corrispondenze espanse che dovessero risultare non ammissibili verrebbero scartate. Ad esempio, si supponga che il blocco contenga le righe seguenti:

$x$=a,b
$y$=a,p,q,r
$x$()$y$()
L'espansione produce l'unica corrispondenza valida b()p(). Le rimanenti vengono scartate perché le due stringhe della corrispondenza sono uguali oppure perché la prima stringa è vuota.

Le istruzioni di inizio e fine blocco vanno scritte esattamente, ad esempio, END ARRAY non è valida e non chiude il blocco. Tuttavia non è obbligatorio usare caratteri maiuscoli, ad esempio si possono usare Array e EndArray.

È consentito che solo l'ultimo dei blocchi presenti sia privo dell'istruzione di chiusura ENDARRAY e in tal caso esso si estende fino alla fine della tabella o fino all'etichetta [END]. Ad esempio, in una situazione come la seguente tutta la parte di tabella fra le due istruzioni ARRAY verrebbe ignorata (comprese eventuali corrispondenze ordinarie):

ARRAY
...
ARRAY
...
ENDARRAY

7.13. Ambito delle variabili e ambito degli array

L'ambito degli array è locale, cioè le sostituzioni avvengono solo nelle corrispondenze che si trovano entro il blocco in cui sono definiti gli array stessi.

Invece l'ambito delle variabili utente [¶7.9] è globale, cioè esse vengono applicate in qualunque contesto in cui sono utilizzate.

Se una variabile utente ha lo stesso nome di un array, nelle sostituzioni del blocco prevale l'array e la variabile è momentaneamente accantonata. Tale variabile continua ad esistere al di fuori di quel blocco e in particolare in altri eventuali blocchi nei quali il suo nome non è impegnato nella definizione di un array.

Entro uno stesso blocco si può definire una sola volta un array con un dato nome (in caso di ripetizione viene considerata l'occorrenza che compare per prima), ma lo stesso nome di array può essere utilizzato in blocchi diversi.

7.14. Blocco ARRAY/ENDARRAY definito da prompt

È possibile assegnare da prompt un blocco ARRAY/ENDARRAY utilizzando la corrispondenza prompt [¶7.7] e opportune variabili di ambiente. Per brevità, facciamo riferimento a questo blocco con il termine array prompt.

L'assegnazione degli array appartenenti al blocco viene compiuta mediante variabili con nome del tipo WPul-$nome$. I comandi dell'esempio seguente, digitati al prompt o inclusi in un file batch, definiscono gli array associati $x$ e $y$ che operano come in un blocco incluso in una tabella.

set WPul-$x$=pulcino,cavallo,leone,gatto
set WPul-$y$=pigola,nitrisce,ruggisce,miagola
WPulisci.exe ... /!$x$()Il $x$ $y$.()i
Se si eseguono i suddetti comandi e si avvia il programma in modo interattivo, dopo aver premuto F4 per aprire una tabella extra, in essa viene inserito il seguente blocco (che viene copiato negli appunti di Windows in luogo della corrispondenza prompt):
ARRAY
$x$=pulcino,cavallo,leone,gatto
$y$=pigola,nitrisce,ruggisce,miagola
$x$()Il $x$ $y$.()i
ENDARRAY

7.15. Limitazioni nella ridefinizione dei simboli

In certi casi i simboli del separatore, del jolly, del marcatore dei caratteri di controllo e della sequenza di ritorno a capo possono entrare in conflitto con le stringhe facenti parte delle corrispondenze o delle tabelle di aggiunta testo. Ad esempio, potrebbe presentarsi l'esigenza di utilizzare questi simboli con valenza letterale oppure potrebbe verificarsi il caso in cui l'accostamento dei simboli tra loro o con il testo circostante provoca situazioni ambigue.

Si può ovviare in parte all'inconveniente adottando separatori e jolly con validità locale [¶7.3.1]. In ogni caso il problema impone alcune limitazioni e impegna l'utilizzatore a compiere la scelta dei simboli più appropriati da adottare nei casi specifici (sezione CONFIG [¶7.2] e [¶11]). Generalmente un buon criterio è di evitare del tutto i caratteri alfanumerici.

Un caso particolare riguarda la presenza nei simboli del carattere $ in relazione ai nomi delle variabili o degli array. Con le impostazioni predefinite, la stringa $CR$ viene rifiutata come nome di variabile o di array perché sarebbero interpretate erroneamente corrispondenze nelle quali la sequenza di ritorno a capo è ripetuta. Ad esempio:

$CR$CR$CR()$CR$CR()
Il programma WinPulisci analizza i simboli ed esclude le variabili fonte di possibili conflitti. Tali nomi non possono essere utilizzati e, se ugualmente presenti, vengono interpretati letteralmente (cioè senza essere sostituiti con i valori specificati nella definizione). Se si riscontra che qualche variabile o array ha un comportamento inatteso, per prima cosa controllare la lista delle variabili non utilizzabili nel resoconto delle tabelle attive Tab-List.log.

Seguono alcuni esempi astratti, senza pretesa di esaurire l'intera casistica.

7.16. Significato del termine carattere

Nel contesto del programma WinPulisci il termine carattere va inteso come carattere a un singolo byte, indipendentemente dalla codifica interna che viene applicata dal sistema operativo. Eventuali caratteri Unicode devono essere specificati mediante i byte che li compongono. Per definire tali caratteri si possono utilizzare variabili utente specificando la stringa con codici decimali o esadecimali [¶7.9]. Ad esempio, il BOM (Byte Order Mark) di un file UTF8 può essere assegnato alla variabile $BOM$ con una delle sintassi indicate di seguito.
$BOM$<239, 187, 191
$BOM$>EF, BB, BF

7.17. Elenco delle variabili predefinite

Le variabili predefinite sono attualizzate all'avvio dell'elaborazione di ciascun file e sono riportate nel file resoconto insieme con i rispettivi valori (in caso di elaborazione multipla i valori sono quelli relativi all'ultimo file trattato). Segue la descrizione delle variabili previste.
%WP_TDMY%
Data in formato esteso.
%WP_TDStr%
Giorno della settimana in parola.
%WP_TMStr%
Mese in parola.
%WP_TYear%
Anno, quattro cifre.
%WP_TMon%
Mese in numero.
%WP_TDay%
Giorno del mese in numero.
%WP_THr%
Ore.
%WP_TMin%
Minuti.
%WP_TSec%
Secondi.
%WP_Logo%
Logo del programma WinPulisci.
%WP_CMD%
Riga di comando della sessione attuale.
%WP_WkPath%
Cartella di lavoro.
%WP_PrgPath%
Cartella di installazione.
%WP_Orig%
Percorso completo del file origine.
%WP_Dest%
Percorso completo del file destinazione.
%WP_OrigN%
File origine senza percorso.
%WP_DestN%
File destinazione senza percorso.
%WP_OByte%
Grandezza del file origine (byte, solo numero).
%WP_OSize%
Grandezza del file origine (con unità).
%WP_OTime%
Data e ora del file origine.
%WP_OrigP%
Cartella origine corrente.
%WP_DestP%
Cartella destinazione corrente.
%WP_TabP%
Cartella delle tabelle.

Torna al sommario.

8. Direttive per la sostituzione

Le direttive sono indicazioni facoltative che vanno poste nella sezione corrispondenze delle tabelle, a destra dei comandi che definiscono le coppie di stringhe. Ogni direttiva è costituita da un carattere secondo lo schema riassunto nel prospetto che segue.
Direttiva ?
Rende interattiva la sostituzione delle coppie cui è applicata.
Direttiva I
Individua le stringhe indipendentemente dalla grafia delle lettere in maiuscolo o in minuscolo.
Direttiva *
Sospende la sostituzione nei blocchi compresi fra gli appositi delimitatori.
Direttiva +
Impedisce la sostituzione al di fuori dei blocchi di cui sopra.
Direttiva R
Sostituisce per intero una riga che contiene la prima stringa.
Direttive U, L, M
Modificano intere righe rendendole maiuscole, minuscole o con parole a iniziale maiuscola.
Direttive J0 J1 ... J999
Selezionano gli insiemi preimpostati per il Jolly (anche 0 ... 9, abbreviazioni per J0 ... J9).
Direttiva @
Imposta la regola per associare i caratteri in caso di jolly multiplo.
Direttiva >
Trasforma caratteri minuscoli in maiuscoli.
Direttiva <
Trasforma caratteri maiuscoli in minuscoli.
Direttiva !
Contrassegna la corrispondenza come speciale [¶8.13].
Direttiva X
Esclude le limitazioni di lunghezza nelle corrispondenze speciali e nelle direttive R, U, L, M.
Direttiva W
Accetta la corrispondenza solo se è abilitata la modalità Word Star [¶12].
Direttiva =
In modalità Word Star [¶12], impedisce l'interpretazione dei caratteri.
Direttive P1 P2 ... P6
Indicano la posizione della stringa entro una parola.
Direttiva T
Elabora la corrispondenza con il metodo di traslitterazione.
Direttiva E
Tratta la corrispondenza come espressione regolare.
Direttiva N
Seguita da un numero n compreso fra 0 e 99999, itera la corrispondenza per n volte consecutive.
Le direttive, che sono descritte più avanti in modo particolareggiato, sono soggette alle regole generali indicate di seguito.

8.1. Direttiva ?

Se una corrispondenza comprende la direttiva ?, il programma sospende l'elaborazione ogni volta che incontra nel testo la stringa da sostituire e chiede il consenso prima di procedere. In righe distinte, vengono mostrati un frammento del testo originale in prossimità della stringa in questione, la posizione iniziale della stringa nel file originale e le due stringhe della corrispondenza. Alla richiesta di consenso si può rispondere premendo: Se si vuole ripristinare l'interattività annullata dalla pressione di uno dei tasti T, M, A o Esc, in un'elaborazione successiva della stessa sessione occorre fare in modo che le corrispondenze vengano acquisite nuovamente: si può premere F3 e poi due volte la barra spaziatrice su una qualunque tabella, azione che non altera l'insieme delle tabelle selezionate ma che obbliga il programma a rileggerle perché è avvenuto un cambiamento.

Esempio:

gosub()GOSUB()?I
La direttiva ? è ammessa anche in presenza del jolly [¶8.7]. Ad esempio:
. @().$CR@()? "ABCDEFG"
Notare che se si annulla l'interattività mentre il jolly assume un dato carattere, l'interattività viene annullata, nella specifica corrispondenza, anche per i caratteri rimanenti. Perciò, se si preferisce operare in modo più selettivo, occorre espandere il jolly utilizzando un numero adeguato di corrispondenze ordinarie oppure utilizzare un array semplice. Così, in luogo della corrispondenza di sopra, si può utilizzare il blocco seguente:
ARRAY
$x$=A,B,C,D,E,F,G
. $x$().$CR$x$()?
ENDARRAY
In modo batch, se il livello di verbosità dei messaggi è impostato a 2 o ad un valore maggiore (opzione /Q), l'interattività viene annullata ed il programma si comporta come se la direttiva ? non fosse specificata.

8.2. Direttive P1 P2 ... P6

Servono per indicare la posizione in cui deve trovarsi entro una parola la stringa da sostituire. Precisamente, a seconda della direttiva, la stringa:
P1 deve coincidere esattamente con una parola
P2 deve trovarsi a fine parola
P3 deve trovarsi a inizio parola
P4 deve trovarsi in centro parola, cioè né all'inizio né alla fine
P5 non deve trovarsi a fine parola
P6 non deve trovarsi a inizio parola.
Ogni corrispondenza può contenere una sola fra le direttive P1 P2 ... P6.
Se nella stessa corrispondenza sono presenti una fra le direttive E, T, ! oppure una direttiva di riga, le direttive P1 P2 ... P6 sono ignorate.

8.3. Direttiva I

La presenza di questa direttiva consente di sostituire una stringa indipendentemente dalla grafia dei caratteri alfabetici maiuscoli e minuscoli. Va applicata con cognizione di causa, dopo aver valutato attentamente gli effetti che potrebbe provocare. Ad esempio, la seguente corrispondenza è ragionevole:
gosub()GOSUB()I
Con questa sostituzione, applicata a un file sorgente Basic, si trasforma in caratteri maiuscoli ogni occorrenza dell'istruzione gosub, comunque scritta (gosub, Gosub, GoSub). Si osservino però le corrispondenze seguenti:
and()AND()I
 and () AND ()I
and()AND()p1i
La prima va evitata perché, mancando gli spazi iniziale e finale, con essa si avrebbe la trasformazione di standard in stANDard, di comando in comANDo, di andando in ANDANDo, di Sandra in SANDra, eccetera.

Si noti che, se si usa la direttiva I, la prima stringa può essere scritta indifferentemente con caratteri maiuscoli o minuscoli. Invece nella seconda stringa le maiuscole e minuscole sono significative.

Per il trattamento delle lettere accentate nelle corrispondenze v. [¶8.10].

8.4. Direttive * e +

Permettono di restringere la sostituzione a una porzione del file. Ad esempio, volendo eliminare tutti i ritorni a capo, e desiderabile che la loro cancellazione non avvenga in un brano in versi o nel listato di un programma. Occorre inoltre aggiungere, in posizioni appropriate del file origine, due etichette di inizio e di fine blocco che permettano al programma di individuare univocamente la zona del file entro cui applicare o impedire, a seconda dei casi, la sostituzione.

Le stringhe di inizio e di fine blocco adottate per impostazione predefinita sono:

Questi valori predefiniti, che sono stati adottati per assicurare la compatibilità delle vecchie tabelle di PULISCI per MS-DOS, sono modificabili con le chiavi _BlIni e _BlFin nella sezione [CONFIG] del file di inizializzazione o delle tabelle. Ad esempio:
_BlIni=|++
_BlFin=++|
È possibile estendere l'applicazione della direttiva * o della direttiva + a tutte le corrispondenze contenute in una sezione (notare che in una tabella possono esserci varie sezioni [CORR]). Questo effetto si ottiene mettendo il carattere * oppure il carattere + a destra dell'etichetta [CORR] all'inizio della sezione. Per interrompere l'applicazione estesa della direttiva, basta iniziare una nuova sezione con l'etichetta [CORR].

La direttiva + è annullata se è simultaneamente presente la *: però la direttiva +, indicata in una corrispondenza, prevale sulla direttiva * applicata a un'intera sezione [CORR].

Normalmente non ha senso che la prima stringa di una corrispondenza contenga una delle etichette di inizio o fine blocco. Infatti le etichette sono escluse dai blocchi che esse delimitano e pertanto la stringa non verrebbe trovata nel testo originale. La corrispondenza può avere eventualmente effetto solo se durante l'elaborazione il testo è stato modificato con l'aggiunta di queste etichette da parte di altre corrispondenze.

Contrariamente a quanto avveniva nella versione MS-DOS, i blocchi delimitati dalle etichette di inizio e fine blocco sono isolati uno dall'altro: ciascuno viene caricato in memoria, elaborato in modo indipendente e accodato al file destinazione mantenendo al loro posto le etichette. Una conseguenza è che ora non è più necessario mettere le etichette di inizio e fine blocco all'inizio di una riga. Se un'etichetta si trova in centro riga, entrambe le porzioni in cui la riga è spezzata dall'etichetta sono trattate come intere righe.

Normalmente le etichette vanno poste nel file origine seguendo l'ordine naturale (un'etichetta di apertura seguita da un'etichetta di chiusura). Tuttavia il programma accetta le etichette anche se esse si succedono violando tale ordine. Ad esempio, se si utilizzano due o più etichette di inizio blocco alle quali non corrisponde un'etichetta di fine blocco, le corrispondenze che contengono la direttiva * sono applicate a tutta la parte del blocco che segue la prima etichetta.

Le etichette possono essere utilizzate anche come un artificio per poter elaborare file la cui grandezza supera le limitazioni descritte in [¶15.3]. Ad esempio, basta identificare nel file origine una stringa appropriata e assegnarla come etichetta di inizio blocco, senza utilizzare alcuna etichetta di fine blocco. In tal modo si induce il programma a caricare in memoria blocchi più piccoli, consentendo praticamente di elaborare file di qualunque grandezza.

8.5. Direttive di riga

Le direttive R, U, L, M agiscono sulle intere righe del file origine che contengono la prima stringa, purché la riga stessa abbia un numero di caratteri non eccedente il valore consentito, normalmente 80 (v. l'apposito parametro Limitazione sostituzione riga [¶4.6]). Questa limitazione sulla lunghezza della riga può essere esclusa aggiungendo la direttiva X.

il termine riga indica una porzione di testo delimitata da ritorni a capo, dove il ritorno a capo che termina la riga viene incluso in essa.

La prima stringa non può contenere il simbolo di ritorno a capo $CR.

Salvo diversa indicazione, nel resto di questo paragrafo si fa riferimento a righe che rispettano la limitazione di lunghezza di cui sopra.

Direttiva R
L'intera riga che contiene la prima stringa viene sostituita con la seconda stringa. Ad esempio, con la corrispondenza
Indice analitico()()R
si cancellano per intero tutte le righe che contengono la stringa Indice analitico.
Il contenuto della seconda stringa è libero. Ad esempio, la corrispondenza seguente ha l'effetto di svuotare ma di non eliminare le righe contenenti la stringa indicata:
Indice analitico()$CR()R
Direttive U, L, M
Queste tre direttive sono affini tra loro e agiscono sulle righe che contengono la prima stringa, mentre la seconda stringa va lasciata vuota. Precisamente:
  • direttiva U: rende maiuscola l'intera riga.
  • direttiva L: rende minuscola l'intera riga.
  • direttiva M: in tutte le parole della riga l'iniziale è resa maiuscola e i rimanenti caratteri sono resi minuscoli.
Il comportamento è diverso se la seconda stringa è non vuota. In questo caso il contenuto della prima stringa è irrilevante e la direttiva specificata viene applicata a tutte le righe. Ad esempio, con la seguente corrispondenza le parole vengono scritte con la sola iniziale maiuscola:
*()x()M
Se ad una direttiva di riga si aggiunge la direttiva X, la restrizione sul numero di caratteri viene esclusa. Ad esempio, la prossima corrispondenza rende maiuscole le intere righe che contengono la parola Capitolo indipendentemente dalla loro lunghezza:
Capitolo()() U X
Le corrispondenze che includono le direttive di riga ammettono la sostituzione insensibile alle maiuscole/minuscole (direttiva I) e la presenza del jolly.

Queste corrispondenze vanno preparate con particolare attenzione, avendo cura che la prima stringa contenga una parola o frase che sia specificamente mirata all'effetto desiderato. Inoltre si sconsiglia decisamente di impiegarle con i file che non sono di puro testo. Tenere ben presente che nessuna direttiva di riga ha effetto nei due casi seguenti:

  1. (se non è usata la direttiva X) quando una riga, pur contenendo la stringa da sostituire, ha lunghezza maggiore del parametro Limitazione sostituzione riga.
  2. quando la prima stringa della corrispondenza contiene un ritorno a capo. Più precisamente vengono ignorate le sostituzioni del tipo seguente (al posto dei puntini immaginare caratteri a piacere):
    ...$CR...()...()R
    ...$CR...()()U
    

8.6. Direttiva X

La direttiva X può essere usata solo insieme con le direttive di riga R, U, L, M [¶8.5] e con la direttiva ! [¶8.13], in tutti gli altri casi è ignorata.

Essa esclude le restrizioni cui è soggetto il testo, la cui lunghezza non dovrebbe normalmente superare il valore dell'appropriato parametro (limitazione sostituzione riga e limitazione testo jolly, a seconda dei casi). Vedere i parametri di riga descritti in [¶4.6].

8.7. Direttive J e insiemi preimpostati per il jolly

Se la prima stringa di una corrispondenza contiene il jolly, occorre abbinare a quest'ultimo i caratteri che esso deve rappresentare in quella corrispondenza [¶7.6]. Per effettuare l'assegnazione sono previste due possibilità.
Specificare un insieme esplicito di caratteri
Dopo il secondo separatore scrivere l'elenco dei caratteri desiderati racchiuso tra virgolette. Esso deve comparire a destra di tutte le eventuali direttive. Si possono omettere le virgolette finali se l'elenco termina con un carattere diverso da Spazio. Sono ammessi i caratteri di controllo nella forma appropriata mentre il simbolo per la sequenza di ritorno a capo, se presente, viene acquisito letteralmente).
Nota. Per compatibilità con la versione MS-DOS, è consentito specificare l'insieme esplicito iniziando l'elenco dei caratteri con una parentesi graffa { in luogo delle virgolette.
Usare le direttive J
Queste direttive sono costituite dalla lettera J seguita immediatamente da un numero compreso fra 0 e 999. Ogni numero rappresenta un insieme di caratteri che si può preimpostare nella sezione [CONFIG] del file di inizializzazione o delle tabelle con una delle chiavi Jolly0 ... _Jolly999. Ogni corrispondenza può ospitare direttive J in numero a piacere.
L'insieme abbinato al jolly per quella corrispondenza è ottenuto riunendo tutti gli insiemi preimpostati aventi i numeri indicati nelle direttive J presenti e aggiungendo quelli dell'elenco esplicito tra virgolette. Notare che sono considerati una volta sola eventuali caratteri ripetuti e quindi non ha importanza se ci sono delle sovrapposizioni fra gli insiemi (tuttavia in certi casi potrebbe essere significativo l'ordine in cui sono disposti i caratteri).

Nell'insieme di caratteri esplicito è possibile includere variabili utente opportunamente definite.

Gli insiemi preimpostati che hanno numero da 0 a 9 possono essere specificati omettendo la lettera J, vale a dire che in luogo di J0 ... J9 si può scrivere rispettivamente 0 ... 9. Inoltre J01 e J001 sono sinonimi di J1 (similmente per gli altri insiemi).

Si consiglia di riservare al file di inizializzazione un certo intervallo di numeri per gli insiemi preimpostati per il jolly, in modo che essi servano a indicare gli insiemi di caratteri di uso più frequente, e di impiegare sempre nelle tabelle numeri al di fuori di quell'intervallo. Nel file di inizializzazione della distribuzione originale sono definiti gli insiemi preimpostati standard descritti nel prossimo prospetto.
0 caratteri di controllo (codice da 0 a 31)
1 caratteri alfabetici maiuscoli A-Z
2 caratteri alfabetici minuscoli a-z
3 caratteri numerici 0-9
4 caratteri non alfanumerici con codice da 32 a 127
5 lettere accentate italiane secondo la tabella 850 (MS-DOS)
6 tutti i caratteri con codice da 128 a 255
7 lettere accentate italiane secondo la tabella ANSI (Windows)
La seguente corrispondenza, che presuppone l'adozione degli insiemi preimpostati standard, inserisce un ritorno a capo dopo ogni punto seguito da uno spazio e poi da una lettera maiuscola (direttiva J1) o da un carattere numerico (direttiva J3):

. @().$CR@()J1J3
Ciascuna delle due prossime corrispondenze equivale alla precedente (i caratteri numerici tra virgolette nella seconda sono considerati come semplici caratteri ed equivalgono alla direttiva J3 dell'esempio precedente):
. @().$CR@()13
. @().$CR@() 1 "0123456789"
Normalmente la prima stringa di una corrispondenza non dovrebbe essere una porzione della seconda. In particolare questo vale se si utilizza il jolly e se i caratteri eccedenti che si trovano nella seconda stringa fanno parte anche dell'insieme di caratteri attribuiti al jolly. Ad esempio, considerare la seguente corrispondenza:
@()c@() "ac"
Nel secondo giro di sostituzioni, quando il jolly assume il carattere c, vengono sostituite anche le c aggiunte nel primo giro e ciò produrrebbe un effetto moltiplicativo. Ad esempio, la parola casa si trasformerebbe in ccccascca.

Nei seguenti comandi il carattere jolly è trattato come un carattere ordinario:

. @().$CR@()*     ##direttiva J o insieme esplicito mancanti
. ().$CR@()1      ##la prima stringa non contiene il jolly.
@abc()@ABC()3T    ##è usata la direttiva T
@abc()@ABC()3E    ##è usata la direttiva E
Se in una corrispondenza contenente il jolly è specificata la direttiva I, i caratteri dell'insieme associato al jolly sono assunti esattamente. In altre parole, l'insensibilità alle maiuscole/minuscole vale solo per i caratteri effettivamente presenti nella prima stringa della corrispondenza e non per quelli rappresentati dal jolly.

8.8. Jolly multiplo e direttiva @

Nella prima stringa il jolly può comparire più volte, fino a un massimo di quattro. In questo caso si parla di jolly multiplo e si intende che ciascun jolly varia indipendentemente nell'insieme di caratteri prestabilito. Nella seconda stringa il jolly deve comparire un numero di volte non superiore a quello della prima stringa (per le occorrenze eccedenti il jolly viene trattato come un carattere ordinario).

In presenza di jolly multiplo l'elaborazione può diventare molto lenta. Ad esempio, se il jolly è presente tre volte e l'insieme è costituito da tutti i caratteri maiuscoli e minuscoli e dalle cifre da 0 a 9 (62 caratteri) la corrispondenza equivale a 62^3=238328 corrispondenze ordinarie.

Normalmente l'associazione fra i caratteri jolly segue l'ordine in cui essi compaiono nelle due stringhe andando da sinistra verso destra: il primo jolly della prima stringa è messo in corrispondenza con il primo jolly della seconda stringa, il secondo con il secondo e così via. In altri termini, l'associazione segue lo schema indicato nella prossima tabella fino al numero di caratteri jolly presenti.
Associazione fra caratteri jolly in caso di jolly multiplo
STRINGA 1 STRINGA 2
Jolly 1 Jolly 1
Jolly 2 Jolly 2
Jolly 3 Jolly 3
Jolly 4 Jolly 4
Se la prima stringa contiene un numero n1 di caratteri jolly maggiore del numero n2 di jolly presenti nella seconda stringa, l'associazione di cui sopra sussiste solo per i primi n2 caratteri jolly, mentre i jolly in eccesso della prima stringa non sono abbinati a nulla. È ammesso anche che n2 sia uguale a 0, cioè che il jolly non compaia affatto nella seconda stringa.

I prossimi esempi utilizzano un jolly doppio per correggere alcuni errori tipici di un programma OCR, dove è frequente lo scambio fra 1, l e I (ipotizzando l'impiego degli insiemi preimpostati standard):

@1@()@I@()1    ##sostituisce 1 con I se compreso fra maiuscole
@l@()@I@()1    ##sostituisce l con I se compreso fra maiuscole
@I@()@l@()2    ##sostituisce I con l se compreso fra minuscole
@1@()@l@()2    ##sostituisce 1 con l se compreso fra minuscole
@I@()@1@()3    ##sostituisce I con 1 se compreso fra numeri
@l@()@1@()3    ##sostituisce l con 1 se compreso fra numeri
La normale associazione descritta più sopra può essere modificata utilizzando una permutazione che si definisce con la direttiva @ seguita da un opportuno numero. Tale numero deve essere composto in base alle regole indicate di seguito.
  1. Le cifre rientrano nell'intervallo che va da 1 a n1, il numero di occorrenze del jolly nella prima stringa.
  2. Il numero di cifre non supera n2, il numero di occorrenze del jolly nella seconda stringa.
  3. Le cifre devono essere una diversa dall'altra.
La prima cifra indica il numero del jolly della prima stringa che viene associato al primo jolly della seconda stringa, la seconda cifra indica il numero del jolly della prima stringa che viene associato al secondo jolly della seconda stringa e così via. La prossima tabella mostra un esempio di associazione in caso di jolly triplo.
Associazione fra caratteri jolly in presenza della direttiva @231
STRINGA 1 STRINGA 2
Jolly 2 Jolly 1
Jolly 3 Jolly 2
Jolly 1 Jolly 3
Se la seconda stringa ha un numero di jolly minore della prima, la colonna di destra della tabella precedente va letta mettendo uno spazio vuoto al posto dei jolly in eccesso, sopprimendo pertanto le relative righe. Ad esempio, se la seconda stringa ha un solo jolly, significa che il terzo e il primo jolly della prima stringa non hanno un corrispondente, cosicché la tabella si riduce alla sola prima riga e la direttiva viene interpretata come @2. Durante l'elaborazione, in caso di riscontro, i caratteri che il primo e terzo jolly vanno via via assumendo potranno solo essere cancellati.

Normalmente la direttiva @ è ignorata quando essa è priva del numero che definisce la permutazione (in tal caso è adottata l'associazione secondo l'ordine naturale). Fa eccezione solo il caso in cui la prima stringa contiene due jolly e la seconda stringa ne contiene uno (ciò per mantenere la compatibilità con la versione di PULISCI per MS-DOS). In questo caso la direttiva costituita dal solo carattere @ equivale implicitamente alla direttiva @2, come nell'esempio seguente:

c@n@()cen@()?2@
Con questa corrispondenza le stringhe ccna e cona sono trasformate in cena, ccne e cone in cene, ccno e cono in ceno, eccetera. Se non fosse presente la direttiva @ l'effetto sarebbe diverso perché, ad esempio, ccna diventerebbe cenc, cona diventerebbe ceno e così via. Nell'esempio si è messa anche la direttiva ? per attivare la richiesta di conferma alla sostituzione (ad esempio, non è ragionevole sostituire vicino con viceno).

Nota. In caso di violazione delle regole indicate più sopra, il numero che definisce la permutazione viene troncato al primo errore e le eventuali cifre mancanti vengono completate dal programma in modo naturale. Ad esempio, se la prima stringa contiene un jolly triplo, la direttiva @341 viene troncata a partire da 4 e completata come @312.

8.8.1. Criticità del jolly multiplo

Le corrispondenze che utilizzano il jolly multiplo vanno studiate con particolare attenzione cercando di prevederne l'effetto. Ad esempio, la seguente corrispondenza è utile perché sostituisce 1 con I se compreso fra maiuscole:
@1@()@I@() J1
In generale ogni corrispondenza dovrebbe sempre prevedere il cambiamento di qualche carattere esplicito. Ad esempio, la seguente corrispondenza, pur essendo formalmente ammissibile [¶8.18], non ha senso perché non produce alcun effetto e per di più provoca un carico rilevante di elaborazione:
@o@()@o@() J1J2J3
A volte è significativo l'ordine in cui sono disposti i caratteri nell'insieme abbinato al jolly. Ad esempio la seguente corrispondenza lascia invariate le parole rosso e prosciutto:
@o@()@o@() @21 "rs"
Ciò accade perché avviene un doppio scambio di r con s. Si provi però a modificare l'insieme abbinato al jolly nel modo seguente:
@o@()@o@() @21 "sr"
Si noterà che rosso diventa sorso e prosciutto diventa psorciutto. Infatti, in questo caso, i quattro cicli sostituiscono ai due jolly rispettivamente le coppie di valori (s,s), (s,r), (r,s) e (r,r) e solo nel terzo ciclo avviene lo scambio.

Notare che con la seguente corrispondenza EReg lo scambio avviene sempre una sola volta (v. [¶8.15] e anche la tabella 1-I_EReg.tab [¶13]):

\c([rs])o([rs])()\02o\01() E

8.9. Direttive > e <

Queste due direttive hanno effetto se la corrispondenza cui sono applicate contiene il jolly, in caso contrario vengono ignorate. Esse operano l'una in modo inverso dell'altra: la > trasforma caratteri minuscoli in maiuscoli, la < trasforma caratteri maiuscoli in minuscoli. I caratteri sui quali esse agiscono sono solo gli eventuali caratteri alfabetici associati al jolly. Ad esempio, le seguenti sostituzioni trasformano caratteri maiuscoli in minuscoli:
@()@()1<
@()@()< "AEIOU"
Nel primo caso sono resi minuscoli tutti i caratteri maiuscoli (insieme 1 predefinito), nel secondo caso sono rese minuscole solo le vocali. L'effetto del secondo esempio si ottiene anche con la seguente corrispondenza dopo aver preimpostato l'insieme numero 100 con il comando _Jolly100=AEIOU
@()@()J100<
Per il trattamento delle lettere accentate nelle corrispondenze v. [¶8.10].

8.10. Trattamento delle lettere accentate nelle corrispondenze

I caratteri, in particolare le lettere accentate, possono assumere un diverso significato a seconda della codifica impiegata nel file. Nell'ambito del programma WinPulisci il loro riconoscimento è significativo in presenza delle direttive I [¶8.3], < e > [¶8.9]. In tutti gli altri casi il contenuto di questo paragrafo è irrilevante.

Sono possibili tre condizioni, identificate da un valore compreso fra 0 e 2 come precisato di seguito.

Il valore suddetto può essere impostato con l'opzione /U oppure con la chiave _AnsiC nella sezione [CONFIG] del file di inizializzazione o delle tabelle.

Osservazioni.

8.11. Direttiva T (traslitterazione)

Se è presente questa direttiva, la sostituzione viene eseguita con un metodo chiamato traslitterazione. Ogni occorrenza di ciascun carattere nella prima stringa viene sostituita con il carattere della seconda stringa che occupa la stessa posizione, stabilendo cioè una correlazione biunivoca fra le due stringhe della corrispondenza. Perciò le due stringhe devono avere necessariamente la stessa lunghezza.

Il seguente esempio, che in realtà non ha molto senso, serve per chiarire il concetto.

pqrs()1234()T
Con la precedente corrispondenza le quattro lettere p, q, r, s vengono sostituite rispettivamente con le cifre 1, 2, 3, 4, cioè si ottiene lo stesso effetto delle quattro corrispondenze seguenti:
p()1()
q()2()
r()3()
s()4()
Altro esempio. Le due corrispondenze seguenti effettuano le stesse sostituzioni ma la prima viene eseguita con velocità molto maggiore della seconda:
ABCDEFGHIJKLMNOPQRSTUVWXYZ()abcdefghijklmnopqrstuvwxyz()T
@()@()1<
La sostituzione mediante traslitterazione è velocissima. Per contro, in particolare con stringhe di una certa lunghezza, occorre molta attenzione nel redigere la corrispondenza, dovendo rispettare rigorosamente la posizione dei caratteri.

La direttiva T è soggetta alle seguenti restrizioni:

8.12. Direttive W e =

Se è presente una di queste due direttive, la corrispondenza viene applicata solo se il programma WinPulisci funziona in modalità Word Star [¶12] (opzione /W) ed è ignorata altrimenti
Direttiva W
Impedisce che una sostituzione venga eseguita nel funzionamento ordinario (non Word Star). lo scopo è quello di assicurare una certa protezione ai file che non sono documenti Word Star.
Direttiva =
In modalità Word Star impone al programma di non interpretare le stringhe della sostituzione, utilizzandole cioè esattamente come sono scritte nella tabella. Nel prossimo esempio si suppone che WinPulisci stia funzionando in modalità Word Star (si deve supporre che la lettera accentata sia scritta con la codifica della tabella 850):
à()a`()
Il programma interpreta la a accentata facendola precedere da un carattere con codice 27 e seguire da un carattere con codice 28, come prescritto dai documenti Word Star 4. Se però si vuole che la stringa venga sostituita senza subire alcuna interpretazione, deve essere scritta così:
à()a`()=

8.13. Corrispondenza speciale, direttiva !

Una corrispondenza è detta speciale se la prima stringa contiene il jolly e se è dotata della direttiva ! (punto esclamativo).

Come risulta dall'esposizione fin qui fatta, normalmente il programma WinPulisci interpreta il jolly come un carattere singolo, che può assumere certi valori opportunamente prestabiliti. Nelle corrispondenze speciali il jolly @ rappresenta invece una porzione di riga che è formata dai caratteri compresi fra due date stringhe o delimitatori. Questo testo abbinato al jolly verifica le due condizioni seguenti:

Facciamo alcuni esempi.
<@>()()!
Vengono cancellate tutte le stringhe fra i caratteri < e > (delimitatori compresi). Questa operazione può risultare utile per migliorare la leggibilità di un testo in formato HTML, dove le sequenze di controllo o tag sono stringhe di questo tipo (la sostituzione non ha luogo quando un tag inizia in una riga e termina in un'altra).
<@>(){@}()!
Vengono intercettate le stesse sequenze del primo esempio. In questo caso, però, esse non vengono cancellate, ma i loro delimitatori vengono sostituiti rispettivamente con { e }. Si noti, ad esempio, che non tutti i caratteri < vengono sostituiti con { (volendo far ciò basterebbe servirsi di una corrispondenza ordinaria). Ad esempio <<...> viene sostituito con <{...}. Ugualmente non ha luogo alcuna sostituzione se i due delimitatori si trovano su righe diverse o se fra essi sono interposti caratteri in numero maggiore del parametro Limitazione testo jolly.
<@>(){@}()!12
Simile all'esempio precedente, con la differenza che qui vengono accettate solo le stringhe alfabetiche, cioè quelle composte con i caratteri appartenenti agli insiemi preimpostati standard 1 e 2.
[@]()[@]()!> "abcdefghij"
Vengono rese maiuscole le stringhe racchiuse fra parentesi quadre e composte da caratteri compresi fra a e j.
##@$CR()$CR()!
In ogni riga viene cancellata la parte che inizia con ##, se esistente, conservando il ritorno a capo che la termina.
Se la porzione della prima stringa a destra del jolly è vuota, cioè se il jolly è l'ultimo carattere della prima stringa, il programma assume implicitamente che il delimitatore destro sia un ritorno a capo. Perciò la corrispondenza dell'ultimo esempio equivale alla seguente:
##@()$CR()!
Riassumiamo alcune caratteristiche delle corrispondenze speciali. Attenzione. La direttiva ! va usata con cognizione di causa: essa muta radicalmente il significato del jolly e può produrre alterazioni di entità imprevista nei file elaborati. Prestare particolare attenzione quando si utilizzano corrispondenze speciali in concomitanza con corrispondenze che contengono il jolly ordinario.

8.14. Iterazione di una corrispondenza. Direttiva N

Se viene specificata la direttiva N seguita immediatamente da un numero n, la corrispondenza viene iterata, cioè ripetuta, per un numero massimo n di volte fino a quando la corrispondenza non genera più sostituzioni. Ad esempio, la seguente corrispondenza permette di ridurre le righe vuote consecutive a un'unica riga vuota (tre ritorni a capo consecutivi vengono sostituiti con due ritorni a capo per 20 volte):
$CR$CR$CR()$CR$CR()n20
Lo stesso effetto si otterrebbe replicando la corrispondenza priva della direttiva N per venti volte consecutive. Tuttavia l'uso della direttiva N rende il processo più efficiente perché, se a un certo punto la corrispondenza non provoca più sostituzioni, il programma la abbandona anche se non ha svolto il numero di iterazioni specificato.

Se la seconda stringa ha lunghezza minore della prima, il numero n non è particolarmente critico, dato che necessariamente dopo un certo numero di cicli le sostituzioni possibili si esauriscono. Ad esempio, salvo casi speciali con ritorni a capo consecutivi molto numerosi, la precedente corrispondenza produce le stesse sostituzioni e impiega lo stesso tempo della seguente:

$CR$CR$CR()$CR$CR()n9999
Osservazioni.
  1. Il massimo valore consentito per n è 99999.
  2. Si consiglia di non usare la direttiva N nelle corrispondenze che comportano un aumento di lunghezza della stringa o, comunque, di limitare in questi casi il numero n allo stretto indispensabile. Infatti l'iterazione potrebbe provocare l'arresto anomalo del programma per esaurimento della memoria. Osservare il seguente esempio (che è un caso limite):
    a()...a...a...()N10
    
    L'intera prima stringa compare due volte come porzione della seconda stringa: dopo 10 passi di sostituzione, come richiesto con la direttiva N10, il frammento di un solo carattere diventerebbe una stringa di oltre mille caratteri (moltiplicazione per 2^10) e ciò porterebbe rapidamente alla saturazione della memoria. Una corrispondenza come questa viene rifiutata a priori dal programma, ma potrebbero presentarsi altre situazioni critiche imprevedibili.
  3. È ammessa la direttiva N0 che equivale a disattivare la corrispondenza che la contiene. Questo è un modo per mantenere nella tabella qualche corrispondenza che può servire da traccia o da promemoria nel corso di prove.
  4. La direttiva N1 è inutile: chiede di applicare la corrispondenza una volta, che è la condizione normale.

8.15. Espressioni regolari. Direttiva E

Questo paragrafo e il prossimo richiedono una conoscenza di base delle espressioni regolari (regex).

WinPulisci prevede un limitato uso delle espressioni regolari. Una corrispondenza viene elaborata con la tecnica delle espressioni regolari allorché in essa è specificata la direttiva E. Per distinguerle da quelle ordinarie, indichiamo le corrispondenze di questo tipo come corrispondenze EReg.

Le regole per comporre le due stringhe della corrispondenza sono diverse da quelle delle corrispondenze ordinarie di WinPulisci [¶8.16]. Ad esempio, l'effetto della seguente corrispondenza ordinaria

. @().$CR@()1
può essere ottenuto anche con una corrispondenza EReg:
\c\. ([A-Z])().\r\n\01() E
Alcune osservazioni.
  1. Nelle corrispondenze EReg tutte le direttive sono ignorate, ad eccezione di N, *, + [¶8.4]. In particolare, le corrispondenze EReg non possono essere rese interattive (direttiva ?). Esse sono invece compatibili con la funzione di taglio [¶4.4].
  2. Se qualche corrispondenza usata durante l'elaborazione è di tipo EReg, il parametro Auto [¶4.7 viene disattivato e viene adottato il ritorno a capo ordinario di Windows, formato dalla coppia di caratteri ASCII 13 e 10.
  3. Anche nelle corrispondenze EReg è ammesso l'uso di variabili utente, che vengono attualizzate durante l'acquisizione delle tabelle.
  4. Molte corrispondenze previste da WinPulisci possono essere tradotte in forma di corrispondenze EReg. Fanno eccezione le corrispondenze contenenti le direttive < e > come nel seguente esempio:
    . @(). @()> 2
    
    Notare comunque che le corrispondenze EReg possono diventare molto lente su file grandi [¶15.1].
  5. Le corrispondenze EReg possono essere in numero arbitrario ed esse possono coesistere in una stessa tabella con le corrispondenze ordinarie. Notare però che, benché l'uso misto sia consentito, potrebbero verificarsi situazioni di difficile interpretazione in caso di concomitanza con corrispondenze che contengono le direttive di riga o la direttiva ! oppure con la reimpaginazione.

8.16. Uso delle espressioni regolari nelle corrispondenze EReg

Le corrispondenze EReg si impostano nelle tabelle con la seguente sintassi:
mask()repl() E [*|+] [N...]
Come nelle corrispondenze ordinarie, le due stringhe vengono delimitate con il separatore ().

Il programma cerca nel file il testo che combacia con l'espressione regolare specificata nella prima stringa mask e ogni occorrenza trovata viene sostituita con repl.

mask è un modello di ricerca (search pattern) che può contenere caratteri veri (interpretati letteralmente) e metacaratteri (jolly per formare l'espressione regolare) e repl può contenere solo caratteri veri e tag del tipo \## (controbarra seguita da due cifre decimali). Ogni tag corrisponde a un sottomodello contenuto nella stringa mask (v. il significato delle parentesi tonde più avanti). Ogni tag da \01 a \99 viene sostituito con il valore effettivamente individuato in corrispondenza di quel tag. Il tag \00 corrisponde all'intero testo trovato.

Dato che è possibile trovare in un testo più stringhe che combaciano, vengono individuate per prime le ricorrenze che iniziano nella posizione più a sinistra e viene scelta la più lunga di esse. Usare lo speciale operatore \s per forzare l'adozione della stringa trovata più breve (v. più avanti).

Gli operatori ^ e $ individuano rispettivamente l'inizio e la fine delle righe del testo (delimitate dalla sequenza standard di ritorno a capo, ASCII 13 e 10) oppure l'inizio e la fine del file.

Per impostazione predefinita, la ricerca di mask è svolta in modo insensibile alle maiuscole.

Caratteri consentiti

L'espressione specificata in mask può contenere una combinazione di caratteri di testo ordinari e dei metacaratteri descritti nel seguente prospetto.
. (punto)
Individua qualunque carattere ad eccezione della fine di riga.
^ (accento circonflesso o «caret»)
Individua la posizione di inizio riga, cioè la precedente coppia di caratteri ASCII 13 e 10 che delimitano la riga (questi caratteri non vengono sostituiti con repl). Vedere anche [^] più avanti per l'uso in una classe di caratteri.
$ (dollaro)
Individua laposizione di fine riga, che può essere il successivo delimitatore di riga o la fine del file (i caratteri ASCII 13/10 che costituiscono il delimitatore della riga non vengono sostituiti con repl).
| (pipe)
Specifica un'alternativa (l'operatore OR) grazie a cui si può avere il riscontro di una o dell'altra espressione ai lati dell'operatore. La precedenza è da sinistra a destra, secondo quanto incontrato nell'espressione.
? (punto interrogativo)
Specifica che è ammesso il riscontro con zero occorrenze o con una occorrenza del sottomodello precedente. Non si può usare con un tag.
+ (più)
Specifica che è ammesso il riscontro con una o più occorrenze del sottomodello precedente. Non si può usare con un tag.
* (asterisco)
Specifica che è ammesso il riscontro con un numero arbitrario (zero o più) di occorrenze del sottomodello precedente. Non si può usare con un tag. Ad esempio, per indicare una stringa qualunque di caratteri si usa .*.

Classi di caratteri

[ ] (parentesi quadre)
Identificano una classe di caratteri definita dall'utilizzatore. Ognuno dei caratteri specificati consente un riscontro. Ad esempio [abc] trova riscontro in a, in b oppure in c. Solo tre metacaratteri speciali sono riconosciuti nella definizione di una classe di caratteri: l'accento circonflesso (^) per i caratteri complementari, il trattino (-) per un intervallo di caratteri e la controbarra (\) in una delle seguenti sequenze di escape:
\\  \-  \]  \e  \f  \n  \q  \r  \t  \v  \x##
Ogni altro uso della controbarra entro la definizione di una classe produce un'operazione non definita che va evitata.
[-] (trattino o meno)
Il trattino identifica un intervallo di caratteri da cercare. Per esempio, [a-f] individua a, b, c, d, e o f.
I caratteri dell'intervallo devono essere disposti nell'ordine naturale: ad esempio, [f-a] non trova alcun riscontro.
Gli elenchi di caratteri e uno o più intervalli di caratteri possono essere mescolati nella definizione di una stessa classe. L'inizio e la fine di un intervallo possono essere specificati con un carattere ordinario oppure con una delle sequenze di escape che iniziano con \ viste sopra.
In una classe sono ammessi intervalli multipli. Ad esempio [a-d2-5] individua a, b, c, d, 2, 3, 4 o 5.
Quando il trattino è preceduto da \ è trattato come un carattere ordinario. Ad esempio [a\-c] è un elenco, non un intervallo, e individua a, - o c perché \- è una sequenza di escape.
[^] (accento circonflesso)
Quando l'accento circonflesso compare come primo elemento nella definizione di una classe, esso identifica una classe complementare di caratteri, nel senso che nessuno dei caratteri specificati troverà riscontro. Ad esempio [^abc] individua qualunque carattere ad eccezione di a, b o c.
Si può specificare un intervallo anche nella classe complementare. Ad esempio [^a-z] individua tutti i caratteri ad eccezione di quelli compresi fra a e z>.
Un accento circonflesso posto in posizione diversa dalla prima è trattato come un carattere ordinario.

Etichette e sottomodelli

( ) (parentesi tonde)
Le parentesi si usano per individuare un tag, o sottomodello, entro il modello di ricerca completo, e per tenere in memoria il testo individuato. Questo testo può essere recuperato nell'operazione di sostituzione, più avanti in mask oppure nella seconda stringa repl, e messo al posto delle etichette \01 ... \99, seguendo l'ordine da sinistra a destra delle parentesi di apertura.
Le parentesi possono essere usate anche per forzare la precedenza di valutazione con l'operatore di alternativa. Ad esempio (Inizio)|(Fine)File troverebbe sia InizioFile sia FineFile ma, senza le parentesi, Inizio|FineFile troverebbe soltanto InizioineFile e IniziFineFile.

Nota. Le parentesi non vanno usate con ?, + e * perché qualche ripetizione potrebbe rendere ambiguo il valore identificato. Per individuare espressioni ripetute usare parentesi seguite da \01*.

Carattere di escape

Il carattere \ (controbarra) è l'operatore di escape. Esso va anteposto ai caratteri \, -, ] quando occorre precisare che essi vanno trattati come caratteri ordinari. Inoltre la controbarra seguita da alcune lettere fa loro assumere un significato speciale, come descritto di seguito.
\b (bordo di parola)
Identifica l'inizio o la fine di una parola, ove con parola si intende una sequenza di uno o più caratteri che includono caratteri alfabetici (A-Z o a-z), cifre (0-9) o il carattere _ (sottolineato). Ad esempio abc_123 è considerata una singola parola, mentre abc-123 contiene due parole.
\c (ricerca sensibile alle maiuscole)
Senza l'operatore \c il comportamento predefinito è di ignorare la differenza fra maiuscole e minuscole. A differenza di altre implementazioni delle espressioni regolari, l'insensibilità alle maiuscole è riconosciuta in tutte le operazioni, anche in un intervallo di caratteri come [6-Z. L'operatore \c può trovarsi in qualunque posizione entro mask.
\e
ESC, ordinario carattere di Escape, ASCII 27.
\f
FF, carattere formfeed, ASCII 12.
\n
LF, carattere linefeed o newline, ASCII 10.
\q
Doppie virgolette, ASCII 34: è previsto per facilitare l'inclusione in una stringa. Ad esempio: \qHello\q.
\r
CR, carattere carriage-return, ASCII 13.
\s
Shortest match character (carattere per l'identificazione più breve).
In presenza di \s in mask, viene restituita la stringa individuata più breve, in luogo della più lunga (come per impostazione predefinita). Per esempio, cercando abc.*abc in abcdabcabc, con l'impostazione predefinita si ottiene l'intera stringa mentre con la specificazione di \s si trova abcdabc. Questa opzione può provocare un leggero rallentamento dell'esecuzione.
Il contrassegno \s deve trovarsi all'inizio di mask.
\t
TAB, carattere di tabulazione orizzontale, ASCII 9.
\v
VT, carattere di tabulazione verticale, ASCII 11.
\x##
Codifica per carattere esadecimale: a destra di \x indicare un codice ASCII mediante due cifre esadecimali. Per esempio \xFF indica il carattere esadecimale FF, corrispondente al codice ASCII decimale 255.
\##
Numero di un tag (sottomodello): è valorizzato con i caratteri che corrispondono al tag numero ##, dove ## è un numero decimale da 01 a 99. I tag sono numerati implicitamente da 1 a 99, in base alla posizione della parentesi di apertura, andando da sinistra verso destra. Ad esempio (.*)w\01 troverebbe abcwabc ma anche 456w456.
I tag non possono essere referenziati in anticipo, cioè se si fa riferimento a un tag non ancora definito, si presume un mancato riscontro.
Le espressioni regolari in WinPulisci vengono elaborate secondo l'implementazione del compilatore PowerBasic. Le spiegazioni in questo paragrafo sono la traduzione di quelle fornite per l'istruzione REGREPL, dove mask$ e repl$ corrispondono rispettivamente a mask e repl nella sintassi indicata più sopra (gli altri elementi sono gestiti internamente da WinPulisci).

Non vengono eseguiti controlli sulla sintassi delle espressioni regolari usate. In caso di errori non si ha alcuna sostituzione e non compaiono segnalazioni nel resoconto. La correttezza e l'effetto di un'espressione regolare possono essere verificati on-line nel PowerBASIC Regular Expression Online Tester.

Torna al sommario.

8.17. Abolizione della direttiva C

Nel programma WinPulisci è stata abolita la direttiva C che era prevista nella versione per MS-DOS. Per mantenere la compatibilità con le vecchie tabelle è tuttavia consentito che essa venga specificata, ma la sua presenza è indifferente e non comporta conseguenze di alcun genere (v. alcuni particolari tecnici nel [¶15.1]).

8.18. Corrispondenze ignorate

Una corrispondenza può essere scartata dal programma perché non ricorrono le condizioni per la sua applicazione. Qui si fa riferimento soltanto a corrispondenze che, per quanto ignorate, sono espresse con una sintassi valida [¶7.3]. La finestra principale mostra il numero delle corrispondenze ignorate, il cui elenco è riportato nel file Tab-List.log [¶9].

Di seguito sono riassunti i casi principali nei quali una corrispondenza può risultare ignorata. In questi esempi, al posto dei puntini immaginare caratteri a piacere.

123()pqrs()T
Traslitterazione con stringhe di lunghezza diversa (direttiva T).
...$CR...()...()R
Direttiva R con prima stringa contenente il simbolo di ritorno a capo (analogamente per le altre direttive di riga).
pqr()...()!
Corrispondenza speciale con prima stringa priva di jolly (direttiva !).
...()...()N0
Corrispondenza esplicitamente disattivata per effetto del numero 0 di iterazioni specificato con la direttiva N.
pqr()pqr()
Le due stringhe sono identiche: ciò è ammesso in presenza della direttiva I, delle direttive di riga oppure se uno dei caratteri è il jolly.
xyz()...()>
È specificata la direttiva > ma la prima stringa non contiene il jolly (analogamente con la direttiva <).
a()...a...a...()N10
L'intera prima stringa compare due volte come porzione della seconda stringa e le 10 iterazioni porterebbero alla saturazione della memoria.
...()...()W
Essendo specificata la direttiva W, la corrispondenza viene ignorata se il programma è avviato senza l'opzione /W (analogamente con la direttiva =).

9. Resoconti

Il programma WinPulisci fornisce due resoconti su file. La scrittura dei resoconti, che normalmente è attivata, può essere alternativamente inibita o riattivata premendo Shift+F2 o Alt+L nella finestra principale (vedere anche l'opzione /L e il file di inizializzazione, come spiegato di seguito). I due resoconti possono essere consultati utilizzando gli appositi link presenti nelle finestre di aiuto contestuale del modo interattivo.

9.1. Resoconto dellelaborazione

Questo è il resoconto più importante e contiene un rapporto particolareggiato su ogni elaborazione svolta. Lo si può aprire dalla finestra principale premendo Shift+F11.

Tra le altre informazioni, esso elenca il numero di sostituzioni effettuate singolarmente per ogni corrispondenza ed aggiunge a destra alcuni marcatori che ne richiamano le caratteristiche:

Normalmente sono escluse dall'elenco le corrispondenze per le quali il numero di sostituzioni eseguite è uguale a 0. Fa eccezione il caso in cui la corrispondenza è dotata della direttiva ? se durante l'elaborazione è stata sospesa l'interattività [¶8.1].

Il tempo per le sostituzioni, riportato nel resoconto per i singoli file, è il tempo netto richiesto dalle sostituzioni: esso viene calcolato ignorando il tempo impiegato per la reimpaginazione e le eventuali pause occorse durante la richiesta di consenso (direttiva ?).

In caso di elaborazione multipla immediata, al termine delle informazioni relative ai singoli file, viene riportato un riepilogo del tipo seguente, dove il tempo totale indica il tempo complessivo impiegato per l'intera elaborazione di tutti i file:

File elaborati 160, identici all'originale 0, numero di errori 0
Tempo totale: 15.61 secondi
Viene inoltre riportato l'elenco delle variabili predefinite, attualizzate all'avvio dell'elaborazione (in caso di elaborazione multipla con i valori relativi all'ultimo file trattato).

Per impostazione predefinita il file con il resoconto dell'elaborazione si chiama WPulisci.log ed è collocato nella cartella di lavoro. Il suo nome può essere modificato con l'opzione /L dal prompt dei comandi [¶10] o con la chiave KLogFile del file di inizializzazione [¶11].

Se già esiste, il file resoconto non viene cancellato e i nuovi risultati vengono aggiunti all'inizio, cosicché essi risultano scritti in ordine cronologico inverso. Il file resoconto conserva normalmente un numero massimo di 99 registrazioni (quelle eccedenti, che hanno data anteriore, vengono eliminate). Il numero massimo consentito di registrazioni può essere modificato con l'opzione /L o con la chiave KLogN del file di inizializzazione. Ad esempio, se si vuole che vengano mantenute solo le informazioni sull'ultima elaborazione svolta, includere la riga seguente nella sezione [CONFIG] del file di inizializzazione:

KLogN = 1
Il resoconto inizia con l'etichetta [WinPulisci - Resoconto elaborazione] che ne permette l'identificazione: se un file preesistente non contiene questa etichetta, il resoconto non viene registrato.

9.2. Resoconto delle tabelle attive

Il resoconto delle tabelle attive, che può essere aperto dalla finestra principale premendo Shift+F12, contiene le seguenti informazioni: Il file viene generato ogni volta che interviene una variazione nella scelta delle tabelle attive (tasto F3) oppure all'avvio del programma se c'è qualche tabella precaricata dal file di inizializzazione o con l'opzione /T.

Il file resoconto delle tabelle attive è collocato nella cartella di lavoro con nome prefissato Tab-List.log. La sua generazione può essere abilitata o esclusa solo contestualmente alla scrittura del resoconto dell'elaborazione. Più precisamente, la scrittura del resoconto delle tabelle risulta attiva nel momento in cui per il resoconto dell'elaborazione è previsto un numero di registrazioni diverso da 0.

Torna al sommario.

10. Assegnazione di parametri dal prompt dei comandi

Il programma WinPulisci può essere avviato dal prompt dei comandi di Windows con particolari opzioni utili per impostare alcuni valori di funzionamento. Questi e altri valori possono essere assegnati anche modificando il file di inizializzazione WPulisci.ini, ma le impostazioni da riga di comando prevalgono su quelle corrispondenti che si trovano nel file di inizializzazione. Una terza possibilità è di includere tutte le opzioni desiderate nella variabile di ambiente WPulisci, con la stessa sintassi valida al prompt dei comandi: in questo caso i valori immessi hanno priorità che è intermedia fra quella degli altri due casi.

È possibile indicare eventuali opzioni nelle proprietà del collegamento sul desktop. Ad esempio, se si vuole che WinPulisci sia sempre avviato con la funzione di reimpaginazione già attiva, basta scrivere nel campo Destinazione:

"%homedrive%\Programmi\WPulisci\WPulisci.exe" /r
Le opzioni disponibili sono descritte qui di seguito. Nell'elenco esse sono indicate in grassetto, mentre la parte a destra di ciascuna indica i suoi eventuali parametri. I parametri fra parentesi quadre sono facoltativi. Per i riferimenti ai comandi citati v. [¶3.1], per i riferimenti al file di inizializzazione v. [¶11].
Sintassi e consultazione documenti
Sintassi: WPulisci.exe ?
Se la riga di comando contiene un punto interrogativo ?, compare una finestra di aiuto con la sintassi e le opzioni disponibili. Nella stessa finestra sono presenti anche i link alla documentazione, come avviene quando si preme F1 dalla finestra principale. La stessa finestra di aiuto può essere aperta dalla finestra principale premendo Ctrl+F1.
Funzione Auto
Sintassi: WPulisci.exe /A[0]
Questa opzione attiva il riconoscimento automatico della stringa di ritorno a capo nei file da elaborare. Se l'opzione è seguita da 0, la funzione viene disattivata.
V. il parametro Auto [¶4.7], nonché i comandi F5 e Alt+A e la chiave KAutoCRLF del file di inizializzazione.
Parametro Conserva
Sintassi: WPulisci.exe /Cn
Imposta i> il parametro Conserva al valore n, che può variare fra 0 e 3 (predefinito 1). Esso determina il modo di cancellare o mantenere gli spazi a inizio e fine riga come illustrato in [¶4.7].
V. i comandi F7 e Alt+C e la chiave KLineSpc del file di inizializzazione.
Cartella destinazione predefinita
Sintassi: WPulisci.exe /Dpercorso
Il percorso indicato, che deve essere già esistente, ssvolge il ruolo di cartella destinazione predefinita, in sostituzione di quella preimpostata durante la prima installazione [¶2.1].
Se il programma è avviato in modo batch, tale cartella è adottata anche come cartella destinazione corrente, purché tale ruolo non sia determinato specificando esplicitamente un percorso valido come secondo parametro. In quest'ultimo caso l'opzione /D non è utilizzata.
Se il programma è avviato in modo interattivo, l'opzione /D potrebbe impostare la cartella destinazione predefinita e lasciare invariata quella corrente. Ciò può accadere se nella sessione precedente è stato specificato un file destinazione la cui posizione è rimasta memorizzata nel file di inizializzazione.
V. le chiavi KDefDestDir, KDestDir e KDest del file di inizializzazione.
Assegnazione di un editor
Sintassi: WPulisci.exe /Estringa
Specificazione di un editor a piacere, in sostituzione di quello che il programma adotta automaticamente durante la prima esecuzione. La stringa deve includere il percorso del file eseguibile (racchiuso fra virgolette se contiene spazi) ed eventuali opzioni. Qui non è possibile includere opzioni che comprendono il carattere «/».
V. il comando Shift+F9 e la chiave KEditor del file di inizializzazione, oltre a [¶4.5].
Modo interattivo
Sintassi: WPulisci.exe /F
Forza l'attivazione del modo interattivo nel caso in cui, avendo specificato il file origine al prompt dei comandi, il programma verrebbe normalmente avviato in modo batch [¶5]. Questa opzione impedisce di avviare l'elaborazione multipla dal prompt dei comandi, cioè non consente di indicare come primo parametro il nome di una cartella o una specificazione con caratteri jolly.
Elaborazione multipla differita
Sintassi: WPulisci.exe /G
I parametri di questa opzione non vengono documentati perché servono unicamente per il controllo di coerenza del file batch abbinato all'elaborazione multipla differita [¶4.10]. L'opzione richiede obbligatoriamente che vengano specificati sulla riga di comando sia il file origine sia il file destinazione con le seguenti restrizioni:
  • il primo parametro deve essere un percorso completo (cioè non relativo alla cartella origine);
  • il secondo parametro non deve essere un nome di cartella, cioè non deve terminare con \.
Contrariamente al comportamento consueto, in presenza dell'opzione /G la destinazione specificata come secondo parametro è considerata relativa alla sottocartella multi\ della cartella destinazione. Per questo nel percorso non è possibile includere la lettera di unità. Se i controlli hanno esito positivo, è abilitata la creazione delle sottocartelle mancanti nella cartella destinazione.
L'opzione /G non ha una controparte nel file di inizializzazione.
Opzioni da inserire al volo
Sintassi: WPulisci.exe /I
Prima della normale esecuzione, tanto interattiva quanto batch, viene proposto l'inserimento di ulteriori opzioni. Ad esempio, se inclusa nelle proprietà del collegamento che avvia il programma, questa opzione permetterebbe all'utilizzatore di aggiungere o di modificare di volta in volta i parametri desiderati.
Aggiustamento orario del file destinazione
Sintassi 1: WPulisci.exe /Jn
Sintassi 2: WPulisci.exe /Janno,mese,giorno,ore,minuti,secondi
Il parametro può essere costituito da un singolo numero oppure da sei numeri separati da virgole che indicano data e ora [¶4.11]. Per impostazione predefinita (valore -1) il file destinazione assume l'orario attuale. V. la chiave _TSAdj del file di inizializzazione e delle tabelle.
Codici di controllo ammessi
Sintassi: WPulisci.exe /Klista
La lista è costituita da un elenco di numeri da 0 a 31 che indicano i codici ASCII dei caratteri di controllo ammessi nel file origine [¶7.5]. V. la chiave _Codici nella sezione [CONFIG] del file di inizializzazione o delle tabelle [¶7.2].
File resoconto
Sintassi: /L[0]|[n][,percorso]
Controlla la scrittura dei resoconti su file. Se si indica /L0 la scrittura di entrambi i resoconti è disabilitata. In caso contrario si possono immettere due parametri separati da virgola come indicato di seguito.
  • un numero n>0 che determina il numero di registrazioni che vengono conservate nel resoconto dell'elaborazione durante le varie operazioni. La presenza di questo numero diverso da 0 comporta anche la scrittura del resoconto delle tabelle.
  • Il percorso del file per il resoconto dell'elaborazione: se il percorso specificato non include il nome della cartella, il file resoconto viene collocato nella cartella di lavoro. Invece, se si indica solo un nome di cartella, il file assume il nome WPulisci.log nella cartella specificata.
L'impostazione predefinita è /L99,WPulisci.log.
L'opzione /L senza parametri attiva la scrittura dei resoconti con i valori predefiniti o, eventualmente, con quelli specificati nel file di inizializzazione (chiavi KLogFile e KLogN).
V. anche Shift+F2 e Alt+L nella finestra principale.
Profondità del percorso per elaborazione multipla
Sintassi: /Mn
Il numero n indica la profondità cui si estende la scansione delle sottocartelle in un'elaborazione multipla [¶4.10]. Il valore predefinito è 1
V. la chiave KMaxScanLv del file di inizializzazione.
Parametri di riga
Sintassi: /N[l][,[p][,[r][,s]]]
l e p rappresentano rispettivamente la lunghezza di riga e la lunghezza parola a fine riga (reimpaginazione), r indica la Limitazione sostituzione riga (direttive di riga), s indica il parametro limitazione testo jolly (corrispondenze speciali).
V. i tasti Shift+F3 o Alt+K, [¶4.6] e la chiave KParLin del file di inizializzazione.
Cartella origine predefinita
Sintassi: WPulisci.exe /Opercorso
Il percorso indicato, che deve essere già esistente, ssvolge il ruolo di cartella origine predefinita, in sostituzione di quella preimpostata durante la prima installazione [¶2.1].
Se il programma è avviato in modo batch, tale cartella è adottata anche come cartella origine corrente, purché tale ruolo non sia determinato specificando esplicitamente un percorso valido come primo parametro. In quest'ultimo caso l'opzione /O non è utilizzata.
Se il programma è avviato in modo interattivo, l'opzione /O potrebbe impostare la cartella origine predefinita e lasciare invariata quella corrente. Ciò può accadere se nella sessione precedente è stato specificato un file origine la cui posizione è rimasta memorizzata nel file di inizializzazione.
V. le chiavi KDefOrigDir, KOrigDir e KOrig del file di inizializzazione.
Cartella delle tabelle
Sintassi: WPulisci.exe /Ppercorso
In questa cartella vanno collocate tutte le tabelle. Al momento della prima installazione essa è la sottocartella tab della cartella di lavoro [¶2.1].
V. la chiave KTabDir del file di inizializzazione.
Nota. La lettera P è dovuta al fatto che nella versione per MS-DOS le tabelle erano poste nella stessa cartella del programma.
Livello di verbosità dei messaggi
Sintassi: /Qn
Determina la quantità di messaggi a schermo nel corso dell'elaborazione. Il parametro n può variare da 0 a 5 con il significato illustrato nel seguente prospetto (a valori minori corrispondono informazioni più particolareggiate):
  • 5 = nessun messaggio e la cartella destinazione, se non altrimenti specificata, è la cartella da cui il programma è stato avviato.
  • 4 = nessun messaggio e segnalazioni acustiche disattivate.
  • 3 = compare il contatore con la percentuale di lavoro svolto.
  • 2 = sono abilitati i messaggi di errore.
  • 1 = i risultati sintetici vengono visualizzati al termine dell'elaborazione.
  • 0 = (valore predefinito) sono mostrati tutti i messaggi, compresa la richiesta di consenso prima di cancellare un file.
Questo parametro non può essere impostato con il file di inizializzazione.
Attivazione della reimpaginazione
Sintassi: WPulisci.exe /R
abilita la funzione di reimpaginazione [¶4.3]. Può essere necessario adattare i parametri di riga[¶4.6], eventualmente usando l'opzione /N.
V. i comandi Shift+F6 o Alt+R. Questo parametro non è conservato nel file di inizializzazione.
Segnalazioni acustiche
Sintassi: WPulisci.exe /S0|vol
Il volume, un numero da 0 a 100, esprime in percentuale l'intensità delle segnalazioni acustiche. Il valore 0 implica la soppressione dei suoni.
V. i comandi Alt+S, F6, F11 e F12, nonché le chiavi KVolume e KSound nel file di inizializzazione.
Attivazione tabelle
Sintassi: WPulisci.exe /Tlista
La lista è costituita da uno o più nomi di file tabella senza percorso e separati da spazi. L'estensione dei file tabella, normalmente .tab, è facoltativa perché viene assunta implicitamente. Se un nome di file contiene spazi, esso deve essere racchiuso tra virgolette.
L'opzione /T è particolarmente importante in modo batch [¶5].
Essa è utilizzabile anche se il programma viene avviato in modo interattivo: in tal caso viene annullato lo stato delle tabelle memorizzato nel file di inizializzazione e le tabelle specificate con l'opzione /T risultano attive, come si può verificare nella schermata di scelta delle tabelle.
Trattamento lettere accentate maiuscole/minuscole
Sintassi: WPulisci.exe /U0|1|2
Specifica la codifica per il trattamento delle lettere accentate nelle corrispondenze [¶8.10]. Valori ammessi: 0=OEM (MS-DOS), 1=ANSI (Windows, predefinito), 2=scelta automatica. V. la chiave _AnsiC nella sezione [CONFIG] del file di inizializzazione o delle tabelle.
Verifica origine/destinazione
Sintassi: WPulisci.exe /V0|1|2
Abilita la verifica del file destinazione, che è confrontato con il file origine. Il comportamento è determinato dal valore specificato.
  • Valore 0: la verifica non viene eseguita (condizione predefinita).
  • Valore 1: la verifica viene eseguita e in caso di identità il file destinazione non viene generato.
  • Valore 2: la verifica viene eseguita e il file destinazione viene generato comunque.
Può accadere che il file elaborato risulti diverso dall'originale anche se non sono state eseguite sostituzioni, ad esempio se sono stati eliminati spazi a inizio o fine riga in conformità allo stato del parametro Conserva.
Impostando il parametro a 1 o 2 si ha un leggero rallentamento dell'elaborazione.
V. la chiave KVerif del file di inizializzazione.
Modo Word Star
Sintassi: WPulisci.exe /W
Abilita il trattamento dei file Word Star [¶12]. La condizione non può essere impostata con il file di inizializzazione.
Estensione delle tabelle
Sintassi: WPulisci.exe /X[.]ext
Modifica l'estensione valida per i file tabella sostituendo l'estensione predefinita .tab con quella specificata a destra di /X (se si omette il punto iniziale, esso viene aggiunto implicitamente dal programma).
V.S il modo batch [¶5] e la chiave KExtTab nel file di inizializzazione.
Protezione delle chiavi critiche
Sintassi: WPulisci.exe /Y[0]
Questa opzione attiva la protezione delle chiavi critiche. Se l'opzione è seguita da 0, la protezione viene annullata. Per impostazione predefinita la protezione è attivata.
V. i comandi Shift+F7 e Alt+Y e la chiave KProtDir del file di inizializzazione.
Protezione delle cartelle critiche
Sintassi: WPulisci.exe /Z[0]
Questa opzione attiva la protezione delle cartelle critiche. Se l'opzione è seguita da 0, la protezione viene annullata. Per impostazione predefinita la protezione è attivata.
V. i comandi Shift+F8 e Alt+Z e la chiave KProtDir del file di inizializzazione.
Attivazione del taglio
Sintassi: WPulisci.exe /+
abilita la funzione di taglio [¶4.4].
Questo parametro non è conservato nel file di inizializzazione.
Corridpondenza prompt
Sintassi: WPulisci.exe /!stringa
La stringa indicata definisce la corrispondenza prompt [¶7.7]. L'opzione /! deve comparire nella riga di comando per ultima, a destra di qualunque altra opzione. Se abbinata a opportune variabili di ambiente, la corrispondenza prompt può definire il cosiddetto array prompt [¶7.14]. La corrispondenza prompt oppure l'array prompt sono copiati negli appunti di Windows.
Azzeramento inizializzazione
Sintassi: WPulisci.exe /0[C][T][V]
Esclude, tutta o in parte, la lettura del file di inizializzazione. Precisamente:
  • se usata da sola o con C, ignora la sezione [CONFIG] del file di inizializzazione, utilizzando di conseguenza i valori base predefiniti nel programma oppure quelli immessi nel comando di avvio con altre opzioni. V. anche [¶11.4].
  • usata con T, ignora la sezione [TAB] e perciò, nel modo interattivo, azzera la scelta e l'ordine delle tabelle effettuati in sessioni d'uso precedenti.
  • usata con V, ignora la sezione [VAR] e perciò, nel modo interattivo, elimina le variabili utente preesistenti nel file di inizializzazione.
  • Per ripristinare tutte le impostazioni predefinite si usi l'opzione /0CTV e non si cancelli il file di inizializzazione [¶2.4].
Come sempre, se il programma è avviato in modo interattivo, al termine il nuovo stato viene memorizzato nel file di inizializzazione.

10.1. Codici di errorlevel

Al termine dell'elaborazione in modo batch, WinPulisci restituisce un codice di errorlevel secondo lo schema indicato di seguito.
0
Nessun errore.
1
Errore generico in lettura/scrittura.
100
Il file origine non è convalidato, v. i codici dei caratteri di controllo ammessi [¶7.5].
101
Spazio insufficiente nell'unità destinazione.
102
Cartella destinazione protetta.
103
Specificazione non valida per il file origine.
104
Nome non valido per il file destinazione.
105
Dimensione del file origine troppo grande.
106
Disco non pronto.
107
Errore nella generazione della cartella destinazione.
108
Troppi file temporanei nella cartella destinazione.
200
Incoerenza del file batch nell'elaborazione multipla differita.
252
WinPulisci: installazione irregolare.
253
Nulla da elaborare: byte iniziale ... oltre la fine del file ...
254
Memoria RAM esaurita.
255
Operazione interrotta da tastiera.

Torna al sommario.

11. Il file di inizializzazione

Al termine di ogni sessione interattiva il programma WinPulisci scrive nel file di inizializzazione WPulisci.ini varie informazioni che utilizza nella sessione successiva per ripresentare la situazione in cui si trovava quando è stato terminato. Nelle elaborazioni batch, invece, il file di inizializzazione viene soltanto letto e al termine non subisce modifiche. Trattandosi di un file di testo, esso può anche essere modificato con il Blocco Note di Windows o con altro editor.

La prima riga serve per identificare il file e deve iniziare con la seguente etichetta:

[WinPulisci]
Il file WPulisci.ini è articolato in tre sezioni nelle quali la prima riga è rispettivamente [CONFIG], [VAR] e [TAB].

11.1. Sezione [CONFIG]

Contiene i valori di alcuni parametri di funzionamento. I parametri sono memorizzati con righe del tipo seguente:
chiave = valore ##commento facoltativo
In ciascuna riga, la parte che inizia con la marcatura ## viene ignorata. La parte a sinistra di = è la chiave identificativa del parametro, mentre a destra di = è posto il corrispondente valore. Le chiavi si possono scrivere indifferentemente con lettere maiuscole o minuscole.

Segue un prospetto con la descrizione delle varie chiavi. Esse sono di due tipi, distinguibili dal loro primo carattere:

La parte in grassetto corsivo è la chiave, mentre a destra di =, è riportato il valore predefinito (se previsto). Le righe possono essere disposte anche in ordine diverso da quello indicato. Per le opzioni citate v. [¶10].
KVolume=35
Indica in percentuale il volume delle segnalazioni acustiche ed è un numero compreso fra 1 e 100 (opzione /S).
KSound=1
Determina lo stato del parametro Suoni. Se il valore è 1 le segnalazioni acustiche sono attive, se è 0 sono escluse (opzione /S).
KIns=1
Determina la modalità di inserimento (valore 1) o di sostituzione (valore 0) per i dati immessi da tastiera.
KQView=0
Determina la verbosità delle scritte nella finestra principale. Con il valore 0 sono mostrate tutte le scritte, con il valore 1 vengono omessi il riepilogo delle tabelle e la riga di stato (tasto Alt+Q).
KAutoCRLF=0
Determina lo stato del parametro Auto (riconoscimento automatico della stringa di ritorno a capo). Con il valore 1 la funzione è attiva, con 0 è inattiva [¶4.7 (opzione /A).
KLineSpc=1
Determina lo stato del parametro Conserva (cancellazione degli spazi a inizio e fine riga). Può variare da 0 a 3 [¶4.7 (opzione /C).
KProtKey=1
Determina lo stato del parametro PrKey (protezione delle chiavi critiche). Con il valore 1 la protezione è attiva, con 0 è disattivata [¶7.2.1]. (opzione /Y).
KProtDir=1
Determina lo stato del parametro PrDir (protezione delle cartelle critiche). Con il valore 1 le cartelle sono protette contro la scrittura, con 0 la scrittura è abilitata [¶4.7 (opzione /Z).
KMaxScanLv=1
Indica la profondità cui si estende la scansione delle sottocartelle in un'elaborazione multipla. Deve essere maggiore o uguale di 0 [¶4.10] (opzione /M).
KOrig=
Nome dell'ultimo file origine specificato in una sessione interattiva.
KDest=
Nome dell'ultimo file destinazione specificato in una sessione interattiva.
KDefOrigDir=^\Orig\
Percorso della cartella origine predefinita (opzione /O).
Nota. Ricordare che il carattere ^, se presente in un percorso di file o cartella come primo carattere, viene interpretato da WinPulisci come il percorso della cartella di lavoro.
KDefDestDir=^\Dest\
Percorso della cartella destinazione predefinita (opzione /D).
KOrigDir=^\Orig\
Percorso della cartella origine corrente (può essere diversa dalla cartella origine predefinita).
KDestDir=^\Dest\
Percorso della cartella destinazione corrente (può essere diversa dalla cartella destinazione predefinita).
KTabDir=^\Tab\
Percorso della cartella contenente le tabelle (opzione /P).
KExtTab=.tab
Estensione dei file tabella (opzione /X).
KViewTab=
Ultima tabella visualizzata nella schermata di scelta delle tabelle [¶4.1].
KSrcStr=
Ultima stringa di ricerca nella schermata di scelta delle tabelle (F3).
KEditor=
Specificazione dell'editor per l'apertura di file e tabelle [¶4.5] (opzione /E). Oltre al percorso del file eseguibile (racchiuso fra virgolette se contiene spazi), indicare eventuali opzioni e il simbolo %f (che rappresenta il nome del file da aprire).
KLogFile=^\WPulisci.log
Percorso del file per il resoconto dell'elaborazione [¶9.1] (opzione /L).
KLogN=99
Se si specifica un numero diverso da 0, viene attivata la scrittura dei resoconti [¶9] e inoltre tale numero indica il numero di registrazioni conservate nel resoconto dell'elaborazione. Con il valore 0 entrambi i resoconti sono disattivati. (Opzione /L).
KVerif=0
Se si specifica un numero diverso da 0, viene attivata la verifica del file destinazione per confrontarlo con il file origine: in caso di identità, con il valore 1 il file destinazione non viene generato (opzione /V).
KParLin=80,0,80,80
Parametri di riga [¶4.6] (tasti Shift+F3 o Alt+K, opzione /N).
KBrowDir
Ultima cartella visualizzata nella finestra di esplorazione delle unità disco [¶4.2].
KExtProc=pdf,rtf,doc,log,ini,htm,rar,zip,7z,wav,mp3,ogg,ape,wma,flac,jpg,gif,avi
Specifica l'elenco delle estensioni dei file che si vuole vengano aperti con l'applicazione associata dal sistema al tipo di file. Elencare le estensioni separate da virgole. Non occorre indicare il punto iniziale ed è indifferente usare caratteri maiuscoli o minuscoli. Sono ignorate le estensioni dei file eseguibili (EXE, COM, DLL, eccetera). I file di testo che hanno estensioni non comprese nell'elenco vengono aperti con l'editor impostato.
_AnsiC=1
Specifica la codifica per il trattamento delle lettere accentate maiuscole/minuscole nelle corrispondenze [¶8.10] (opzione /U).
Valori ammessi: 0=OEM (MS-DOS), 1=ANSI (Windows, predefinito), 2=scelta automatica.
_Delim=()
Separatore delle stringhe di cui è composta ogni corrispondenza [¶7.3]. Può essere al massimo di cinque caratteri, quelli eccedenti vengono ignorati.
_Acapo=$CR
Simbolo che rappresenta la sequenza di ritorno a capo [¶7.4]. Può essere al massimo di cinque caratteri, quelli eccedenti vengono ignorati.
_CarJol=@
Simbolo jolly (un singolo carattere) [¶7.6]: non deve essere alfanumerico e deve essere diverso dal marcatore dei caratteri di controllo.
_CtrlK=^0
Marcatore dei caratteri di controllo (primo carattere) [¶7.4]: non deve essere alfanumerico e deve essere diverso dal simbolo jolly. Il secondo carattere 0 specifica l'adozione della codifica con codici ASCII a due cifre (impostazione predefinita) [¶7.4].
_BlIni=/..
Etichetta di inizio blocco [¶7.2].
_BlFin=../
Etichetta di fine blocco [¶7.2].
_Codici=0,7-13,26-27
Codici dei caratteri di controllo ammessi [¶7.5].
_FRiga=.!?;:
Caratteri di fine riga per il controllo della reimpaginazione [¶7.2].
_IRiga=; -*/#[_:@^07^09
Caratteri di inizio riga per il controllo della reimpaginazione [¶7.2].
_TSAdj=-1
Determina l'orario del file destinazione. Per impostazione predefinita viene assegnato l'orario attuale [ 4.11] (opzione /J).
_Jolly0=
Definisce l'insieme preimpostato numero 0 da usare con le direttive J per costruire l'insieme abbinato al jolly. In modo analogo si usano le chiavi _Jolly1, ..., _Jolly999. Per gli insiemi preimpostati standard v. la tabella in [¶8.7]).
La sezione [CONFIG] è ignorata all'avvio se si specifica l'opzione /0.

11.2. Sezione [VAR]

Questa sezione è analoga alla sezione [VAR] delle tabelle. In essa vanno definite le variabili utente di uso generale seguendo le stesse regole illustrate in [¶7.9].

Le definizioni non valide vengono ignorate e, al termine di ogni sessione interattiva, vengono eliminate.

La sezione [VAR] è ignorata se WinPulisci viene avviato con l'opzione /0V.

11.3. Sezione [TAB]

In questa sezione il programma registra, al termine di ciascuna sessione interattiva, le tabelle identificate durante la sessione stessa. Lo scopo è di memorizzare l'ordine delle tabelle e lo stato di attivazione di ciascuna tabella. In ogni riga sono indicate come segue le informazioni che riguardano una tabella:
0,Nome di una tabella.tab
1,Seconda tabella.tab
0,Terza tabella.tab
Se il numero all'inizio è 0 significa che al termine della sessione la tabella non era attiva, se è 1 significa che essa era attiva. Il nome della tabella va indicato senza percorso, dato che le tabelle sono tutte contenute nella cartella delle tabelle.

Non si deve modificare la sezione [TAB] se si apre il file di inizializzazione durante una sessione interattiva (Shift+F10).

La sezione [TAB] è ignorata se WinPulisci viene avviato con l'opzione /0T.

11.4. Chiavi comuni alle tabelle e al file di inizializzazione

Le chiavi della sezione [CONFIG] delle tabelle [¶7.2]) sono comuni al file di inizializzazione, tranne quelle che servono per impostare la funzione di taglio [¶4.4].

Per tutti i comandi della sezione [CONFIG], un'assegnazione rimane in vigore durante l'elaborazione purché il parametro in questione non venga modificato in qualche altra sezione [CONFIG], seguendo l'ordine di caricamento delle tabelle. Perciò è importante che le assegnazioni fatte nel file di inizializzazione e in una o più tabelle siano coerenti tra loro.

Un caso particolare, che fa eccezione, riguarda gli insiemi preimpostati per il jolly. Conviene riservare al file di inizializzazione un certo intervallo di numeri per quelli di uso più frequente e usare le tabelle quando si presenta la necessità di definire insiemi particolari.

Il programma adotta una restrizione per le quattro chiavi _Delim, _Acapo, _CarJol e _CtrlK che vengono acquisite dalle tabelle soltanto se la protezione delle chiavi critiche è disattivata [¶7.2.1]. Le chiavi rimanenti si possono impostare liberamente, ma sempre facendo in modo che nel gruppo di tabelle attive durante un'elaborazione i valori siano tra loro coerenti, pena conseguenze imprevedibili.

Torna al sommario.

12. File di testo Word Star

Il programma WinPulisci consente tuttora di utilizzare la modalità Word Star, che offre alcune facilitazioni per il trattamento di file prodotti con il programma Word Star 4 per MS-DOS.

Come si è detto, in linea di principio WinPulisci è in grado di manipolare qualunque file. Tuttavia la preparazione delle tabelle può risultare abbastanza noiosa quando il file da elaborare è un file prodotto con un word processor, sia perché il testo viene normalmente codificato in modo particolare sia perché al testo vengono aggiunti numerosi caratteri di controllo.

Volendo elaborare file di tipo Word Star, occorre aggiungere l'opzione /W agli altri parametri eventualmente richiesti al prompt dei comandi. Se l'esecuzione avviene in modo interattivo, la circostanza che la modalità Word Star è abilitata viene evidenziata nella finestra principale.

La facilitazione consiste nel fatto che nella preparazione delle tabelle l'utilizzatore non deve preoccuparsi di introdurre codifiche particolari per i caratteri, in quanto il programma converte automaticamente le stringhe secondo le necessità. Quindi, a parte l'aggiunta dell'opzione /W al prompt dei comandi, Per la modalità Word Star vale generalmente quanto detto per il funzionamento ordinario, salvo quanto specificato qui di seguito:

I file risultanti dall'elaborazione in modalità Word Star subiscono alcune modifiche, indipendentemente dal contenuto delle tabelle usate. In particolare vengono alterati alcuni caratteri con codice ASCII maggiore di 160 (normalmente quando precedono uno spazio) e vengono eliminati gli spazi mobili (codice 160). Queste modifiche non sono irreversibili perché i caratteri originali possono essere ripristinati caricando il documento in Word Star e impartendo l'apposito comando di riformattazione.

Al funzionamento in modalità Word Star sono collegate le due direttive W e =, che servono solo in casi particolari [¶8.12].

Torna al sommario.

13. Esempi di applicazione

Come nella versione per MS-DOS, l'applicazione classica di WinPulisci è la correzione automatica degli errori sistematici di riconoscimento che si verificano nei file di testo ricavati con un programma OCR abbinato ad uno scanner. Un'accurata preparazione delle tabelle di conversione, costruite dopo aver classificato gli errori in base al tipo di stampa del documento acquisito o ad altri fattori, consente la correzione dei testi in modo pratico e veloce, anche grazie alla possibilità di definire l'insieme delle corrispondenze in forma modulare.

Con il programma WinPulisci è anche possibile compiere varie manipolazioni dei file di testo, come mostrato negli esempi che seguono. Va però osservato che questo impiego del programma risulta particolarmente conveniente se è sistematico, cioè quando le sostituzioni sono numerose e la loro applicazione riguarda più file. In caso contrario conviene servirsi più semplicemente della funzione di ricerca/sostituzione presente in qualunque editor.

Le tabelle fornite a corredo (sottocartella Tab\) possono servire da spunto per l'utilizzo del programma. Riportiamo di seguito alcuni esempi. Vedere anche la breve descrizione all'inizio di ciascuna tabella e i file batch nella sottocartella Demo\ [¶13.1].

Tabella 0EsempioImpostazioni.tab
È una tabella esemplificativa per illustrare la struttura e alcune caratteristiche generali, senza svolgere alcuna operazione.
Tabella NoSillabazione.tab e file batch NoSillabazione.bat
Consentono di reimpaginare un testo stabilendo un determinato numero di caratteri per riga ed eliminando nel contempo la sillabazione a fine riga in modo che le due porzioni di parola vengano riunite. Si noti che la presenza a fine riga di un doppio trattino non indica la presenza di una sillabazione e quindi la tabella prevede il seguente accorgimento per proteggere questa sequenza affinché rimanga inalterata:
--$CR()--\02()
-$CR()()
... [altre eventuali corrispondenze]
--\02()--$CR()
La prima corrispondenza trasforma la sequenza da proteggere in una sequenza improbabile, poi si mettono le altre corrispondenze desiderate, infine si ripristina la sequenza originale. Questa tecnica di protezione può essere sfruttata in varie circostanze. Cfr. la tabella NoACapo.tab.
Tabelle ANSI2DOS.tab e DOS2ANSI.tab
Convertono le lettere accentate dalla codifica ANSI di Windows alla codifica 850 di MS-DOS e viceversa. La nuova direttiva T,, impiegata in queste tabelle, utilizza un metodo efficiente e preciso chiamato traslitterazione [¶8.11].
Tabelle Entity2ANSI.tab e ANSI2Entity.tab
Trasformano le entity (&agrave;, &eacute;, &ograve;, eccetera) di un file HTML nei corrispondenti caratteri ANSI (à, é, ò, eccetera) e viceversa.
Tabelle max2min.tab e min2max.tab
Trasformano le lettere maiuscole in minuscole e viceversa, comprese le lettere accentate secondo la codifica ANSI [¶8.10].
Tabelle Accenti2Apo.tab, Accenti2ApoInverso.tab, Apo2Accenti.tab
Convertono le lettere accentate in lettere apostrofate o viceversa (Ad esempio in certi messaggi di posta elettronica le vocali accentate sono rese come apostrofate). Ciò vale anche per file di testo che vengono condivisi fra sistemi operativi diversi, dove le difficoltà legate alle differenti codifiche dei caratteri inducono ad adottare l'uso delle lettere apostrofate. In quest'ultimo caso potrebbe essere utile attivare l'individuazione automatica della sequenza di ritorno a capo a causa del diverso trattamento che ne fanno i vari sistemi.
Tabella AggiungiInfoFile.tab
Questa è una tabella di aggiunta testo nella quale sono definite alcune variabili utente. Sono anche utilizzate le variabili predefinite di WinPulisci.
Tabelle UTF8ToANSI.tab e AggiungiBOMUtf8.tab
Sono utilizzate variabili utente per definire caratteri Unicode a più byte [¶7.16].
Tabelle 1-I_EReg.tab e 1-I.tab
La tabella 1-I_EReg.tab utilizza la seguente espressione regolare per sostituire 1 con I quando preceduto da spazio o lettera maiuscola e seguito da lettera maiuscola:
\c([ A-Z])1([A-Z])()\01I\02() E
L'effetto di questa corrispondenza EReg è analogo a quello ottenibile con le due seguenti corrispondenze ordinarie (tabella 1-i.tab), dove la stringa delle consonanti maiuscole è assegnata alla variabile $M$ definita nella sezione [VAR]:
@1@()@I@() "$M$"
 1@() I@() "$M$"
Il procedimento di sostituzione è diverso. L'espressione regolare esegue la sostituzione in un unico ciclo. Con la seconda tabella vengono applicate all'intero file tante sostituzioni quante sono le possibili assegnazioni dei caratteri al jolly.
In termini di velocità di elaborazione, se applicate a file piccoli le due tabelle sono sostanzialmente equivalenti, mentre la tabella che usa le corrispondenze ordinarie è molto più efficiente al crescere della grandezza del file.
Tabella SoloBodyHtml.tab
Si utilizza il taglio delimitato da stringhe [¶4.4.1] per eliminare tutta la parte iniziale di un file HTML che precede la sezione BODY. Prima di avviare l'elaborazione, attivare la funzione di taglio con Shift+F5 o Alt+P oppure includere da prompt l'opzione /+.
Tabella html2txt.tab
Estrazione del testo da un file HTML. In un file HTML, elimina l'intestazione (funzione di taglio) e la maggior parte dei tag. Alcune corrispondenze utilizzano la direttiva E (espressione regolare). Conviene attivare anche la tabella entity2ansi.tab per trasformare le entity HTML in normali caratteri ANSI.
Tabella TagliaIntervallo.tab
Applicazione della funzione di taglio con il metodo dell'intervallo di byte. Vengono caricati i primi 1000 byte e i caratteri di controllo sono trasformati secondo la codifica di WinPulisci. Se non si attiva la funzione di taglio (tasto Alt+P oppure opzione "/+") l'elaborazione viene svolta sull'intero file origine. In ogni caso, in particolare se il file origine è binario, il file risultante è di puro testo e risulta pertanto semplificata la ricognizione dei caratteri di controllo.
Tabella SoloTesto.tab
Può servire, ad esempio, per estrarre da un file binario la parte di testo (messaggi di errore, eccetera). Come misura di sicurezza, il programma WinPulisci rifiuta l'elaborazione dei file con certe estensioni (.exe, .com, .dll, .ocx, .pif). Perciò, volendo intervenire su un file di questo tipo, si deve operare su di una copia che abbia estensione diversa dalle suddette.
Tabelle animali.tab, FormattaOrario.tab, NumeriRomani.tab
Esempi di impiego di array associati [¶7.11]. Nella sezione [CORR] di una tabella si definisce un blocco analogo al seguente, dove gli elementi degli array $x$ e $y$ sono separati da virgole:
ARRAY
$x$=pulcino,cavallo,leone,gatto
$y$=pigola,nitrisce,ruggisce,miagola
$x$()Il $x$ $y$()i
ENDARRAY
Con questa definizione le parole pulcino, cavallo, eccetera vengono trasformate rispettivamente in Il pulcino pigola, Il cavallo nitrisce, eccetera. Vedere in [¶7.14] come assegnare array da prompt.
Osservazione. È possibile effettuare l'elaborazione di più file senza far ricorso all'elaborazione multipla descritta in [¶4.10]. Basta Utilizzare il comando FOR del prompt dei comandi come mostrato negli esempi che seguono (osservare che il terzo di essi deve essere incluso in un file batch preparato manualmente).
for %a in (testo.txt a:lettera.txt) do wpulisci.exe %a d:\dest\ /l /tsost.tab
for %a in (*.txt a:\*.htm) do wpulisci.exe %a d:\dest\ /c1/q3/s/l /tsost.tab
for %%a in (%1 %2 %3) do wpulisci.exe %%a d:\dest /q3/s/l /tsost.tab

13.1. File batch dimostrativi

I file batch dimostrativi si appoggiano allo script ausiliario WPulisci.vbs, lo stesso che viene posto sul desktop quando si installa WinPulisci in un'unità removibile [¶2.3]. . Il modo più semplice di utilizzare il programma da riga di comando consiste nel collocare uno o più file batch, insieme con lo script ausiliario, in una cartella che sia presente nel path di sistema. Si raccomanda di non utilizzare per questo scopo le cartelle di sistema come C:\WINDOWS\system32 o simili ma di creare all'occorrenza un'apposita cartella, ad esempio C:\BAT, e di aggiungerla al path.

Lo script ausiliario fa sì che, sotto certe condizioni, il programma possa essere avviato anche se la cartella di installazione è cambiata in uno dei modi specificati di seguito.

  1. In ambiente Windows XP, installazione nella cartella dei programmi.
    Se la cartella di installazione è C:\Programmi\NomeCartella, compreso il caso predefinito C:\Programmi\WinPulisci, è consentito spostare l'intera cartella NomeCartella nella radice di qualunque unità, ad esempio D:\NomeCartella, G:\NomeCartella, eccetera.
  2. In una versione qualunque di Windows, installazione al di fuori della cartella dei programmi.
    Se la cartella di installazione è ospitata nell'unità X: con nome \PercorsoQualsiasi, è consentito spostare la cartella in un'altra unità mantenendone il percorso, ad esempio L:\PercorsoQualsiasi. Un caso particolare di questa situazione riguarda l'installazione in un'unità removibile, la cui lettera di unità potrebbe cambiare per vari motivi nel corso di successivi riavvii del calcolatore.
Nei casi descritti, l'avvio del programma può avvenire anche mediante lo script WPulisci.vbs posto direttamente sul desktop o mediante un collegamento a una copia dello script stesso posta in una cartella prefissata dall'utilizzatore (scegliere quest'ultima alternativa per poter aggiungere qualche opzione in avvio di programma).

I file batch nella sottocartella demo\ utilizzano le Command extension dell'interprete dei comandi cmd.exe, che sono normalmente abilitate in Windows XP e versioni successive (v. in particolare il parametro modificato %~dp0 che specifica il percorso completo della cartella di avvio del file batch). Le estensioni dei comandi sono abilitate se i valori REG_DWORD seguenti nel Registro di sistema sono impostati su 0x1 (Le impostazioni specifiche dell'utente hanno la precedenza su quelle a livello di sistema):

 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
Per poter utilizzare i file batch quando le estensioni sono disabilitate, occorre avviare una sessione del prompt dei comandi con l'opzione /X (o equivalentemente /E:ON).

In ogni caso, tenere presente quanto precisato in [¶2.4] in merito alla regolarità dell'installazione di WinPulisci.

13.2. Le tabelle FoxTab

Le tabelle preesistenti rimangono in gran parte compatibili con l'attuale versione [¶14.A]. In particolare, nella distribuzione di WinPulisci è incluso l'archivio compresso foxtab.rar, una raccolta di tabelle realizzate da Abramo Volpato all'epoca di una delle prime versioni del programma PULISCI. Il pacchetto è quello originale per MS-DOS, senza alcun adattamento, che comunque è funzionalmente compatibile con WinPulisci. L'autore lo ha gentilmente messo a disposizione di chi voglia servirsene e ne consente l'uso e la modifica secondo quanto specificato nella documentazione informativa costituita dal file 0foxtab.txt.

Malgrado i sistemi OCR siano oggi potenti e raffinati, queste tabelle meritano ancora di essere considerate perché contengono spunti interessanti per la correzione degli errori sistematici che avvengono durante il riconoscimento dei testi.

Desidero ancora ringraziare Abramo per la sua attiva collaborazione al miglioramento del programma PULISCI per MS-DOS, al quale egli contribuì con un collaudo assiduo e meticoloso e con utili ed intelligenti rilievi.

Torna al sommario.

14. Variazioni rispetto a PULISCI per MS-DOS

Il programma WinPulisci per Windows costituisce il naturale sviluppo del programma PULISCI per MS-DOS. L'interfaccia è sempre in modalità testo, ma si tratta di un programma completamente rifatto. In particolare, il motore interno che esegue i vari tipi di sostituzione è più efficiente, versatile e preciso. Malgrado sussistano varie analogie con la versione MS-DOS, le prestazioni sono migliorate e sono disponibili numerose nuove funzioni. Le tabelle preesistenti rimangono in gran parte utilizzabili (v. le precisazioni in [¶14.A]).

Per possibili problemi o malfunzionamenti v. [¶15.3].

I cambiamenti introdotti sono riassunti nel prospetto che segue.

Differenze di sistema
  • Archivio di setup adatto aWindows.
  • Funzionamento del programma a 32 e a 64 bit.
  • Nomi di file lunghi.
  • Si può installare il programma in qualunque unità. Nel caso di unità removibile l'icona sul desktop consiste di uno script che non è influenzato dal possibile cambiamento della lettera di unità.
  • Trattamento file e tabelle con editor esterno a scelta. Editor riconosciuti automaticamente: PSPad, Notepad++, TextPad, WinWord, Blocco note, WordPad, Biblos. Non è più fornito un editor dedicato.
  • Suoni emessi mediante scheda audio con possibilità di cambiare volume.
  • Abolite tutte le variabili di ambiente della versione MS-DOS e introdotta la nuova variabile WPULISCI per ospitare opzioni a piacere con sintassi come da prompt.
  • Elaborazione svolta quasi interamente in memoria.
  • Eliminati gli errori di sostituzione, dipendenti dal frazionamento in spezzoni, che potevano verificarsi in caso di sostituzioni concatenate [¶15.1].
Funzioni di aiuto
  • Le varie finestre dispongono di un aiuto contestuale particolareggiato che si richiama premendo F1 e che elenca i tasti e le loro funzioni. Il testo è visualizzato mediante browser Internet.
  • Nell'aiuto contestuale sono inclusi collegamenti ipertestuali per consultare il manuale, la licenza, i resoconti e per verificare la disponibilità di versioni aggiornate.
  • Il manuale, in formato HTML, è dotato di livelli di intestazione e di richiami ipertestuali.
  • Il programma è corredato di tabelle e file batch dimostrativi.
Struttura delle cartelle
La struttura delle cartelle è modificata come spiegato in [¶2.1].
Cartella di installazione predefinita:
c:\programmi\WinPulisci
Normale impostazione della cartella di lavoro:
  • in Windows XP è uguale alla cartella di installazione;
  • in Win7 e versioni successive è la cartella WinPulisci nei documenti dell'utente.
La cartella di lavoro ospita le seguenti sottocartelle:
  • Orig\ e Dest\ sono rispettivamente la cartella origine predefinita e la cartella destinazione predefinita;
  • Tab\ è la cartella predefinita che ospita tutte le tabelle.
È prevista la protezione delle cartelle critiche.
In un nome di file il carattere iniziale «^» è interpretato internamente dal programma come il percorso della cartella di lavoro.
File di inizializzazione
Quando si termina una sessione, il programma memorizza vari parametri di funzionamento nel file di inizializzazione [¶11]. Questo file svolge le funzioni indicate di seguito.
  • Conserva i parametri inseriti o modificati durante le sessioni interattive.
  • Fra le chiavi previste sono incluse anche quelle della sezione [CONFIG] delle tabelle, ad eccezione delle chiavi riguardanti la funzione di taglio.
  • Conserva l'elenco, l'ordine e lo stato di attivazione delle tabelle.
  • Prevede la sezione [VAR] per ospitare la definizione di variabili utente.
  • Al termine di ogni sessione interattiva viene salvata una copia di riserva del file di inizializzazione (WPulisci.sav) per consentire il ripristino dei dati in caso di errore.
Tabelle e direttive
Vedere la compatibilità delle vecchie tabelle [¶14.A].
  • Nuova direttiva T (traslitterazione) per trasformazione efficiente da carattere a carattere.
  • Nuova direttiva E per eseguire la sostituzione con la tecnica delle espressioni regolari (corrispondenze EReg).
  • Nuove direttive di riga U, L, M per trasformare intere righe in maiuscole, minuscole o con parole a iniziale maiuscola.
  • Nuova direttiva N seguita da un numero x per iterare x volte la corrispondenza.
  • Nuova direttiva X, da usare insieme con le direttive di riga e nelle corrispondenze speciali, per escludere le limitazioni sulla lunghezza del testo da sostituire.
  • In ciascuna stringa il carattere jolly può ora comparire fino a quattro volte (invece di due).
  • La direttiva @, utilizzabile in caso di jolly multiplo, è stata potenziata per consentire liberamente l'associazione fra i caratteri jolly della prima e della seconda stringa.
  • È possibile attribuire al separatore delle corrispondenze e al carattere jolly valori che hanno validità locale, cioè ristretta a una singola corrispondenza.
  • Sono abolite le limitazioni per il numero di tabelle e di corrispondenze e per il numero di caratteri nelle corrispondenze.
  • Sono ammesse 65535 corrispondenze contenenti il jolly (invece di 255).
  • Possono essere preimpostati 1000 insiemi per l'abbinamento al jolly (invece di 10) e le assegnazioni alle corrispondenze si effettuano con le nuove direttive J.
  • Le corrispondenze speciali possono essere in numero a piacere e in esse è consentito specificare le direttive <, >, I e l'insieme per il jolly.
  • La descrizione delle tabelle è un testo libero, anche su più righe, costituita dalla parte che precede le sezioni della tabella.
  • Le chiavi della sezione di configurazione si possono ora scrivere indifferentemente con lettere maiuscole o minuscole (nei valori va sempre rispettata l'esatta grafia).
  • La nuova chiave _AnsiC specifica la codifica per il trattamento delle lettere accentate.
  • La nuova chiave _TSAdj determina l'orario del file destinazione.
  • La codifica predefinita dei caratteri di controllo è cambiata (per la compatibilità v. [¶14.A]).
  • Negli insiemi preimpostati per il jolly il carattere con codice 0 si usa ora allo stesso modo degli altri caratteri di controllo.
  • La nozione di corrispondenza extra è stata sostituita con quella di tabella extra, una tabella vuota già preimpostata da elaborare con l'editor (si apre dalla finestra principale premendo F4).
  • La lunghezza massima del separatore e del simbolo di ritorno a capo è stata portata da tre a cinque caratteri.
  • Sono disponibili le tabelle di aggiunta testo, caratterizzate dalla presenza di una fra le sezioni [PRE-TXT] oppure [POST-TXT].
  • L'utente può definire variabili nella sezione [VAR] del file di inizializzazione o delle tabelle e utilizzare tali variabili nelle stringhe delle corrispondenze, negli insiemi espliciti abbinati al jolly e nelle tabelle di aggiunta testo.
  • Nel valore delle variabili utente possono essere inserite le variabili predefinite di WinPulisci e le variabili di ambiente di Windows.
  • Possono essere definiti array associati e array semplici per espandere le corrispondenze usando gli elementi elencati negli array.
Funzione di taglio
La funzione di taglio prevede due criteri per la scelta della parte di file da elaborare.
  1. Parte di file compresa fra una stringa iniziale e una stringa finale.
    Le due stringhe possono essere specificate in modo insensibile alle maiuscole/minuscole. Inoltre per entrambe si può contare l'occorrenza dall'inizio oppure dalla fine del file e si può decidere se conservare o meno le stringhe stesse. Questi cambiamenti sono ottenuti grazie all'ampliamento della sintassi delle chiavi _nSIni e _nSFin [¶4.4.1].
  2. Taglio di un intervallo espresso in byte.
    Si usa la nuova chiave _tByte per specificare il byte iniziale e il numero di byte [¶4.4.2].
Elaborazione multipla
È possibile eseguire elaborazioni multiple, anche su un albero completo di file e specificando la profondità delle sottocartelle da considerare. L'elaborazione multipla può essere immediata oppure differita [¶4.10].
Resoconti
Sono previsti due tipi di resoconto (v. l'opzione /L).
  • resoconto dell'elaborazione:.
    I dati sulle elaborazioni vengono aggiunti all'inizio, risultando così leggibili nell'ordine dal più recente al più vecchio. Un apposito parametro determina la quantità di dati da conservare.
  • Resoconto delle tabelle attive.
    Ospita informazioni particolareggiate sulle tabelle attive e viene sovrascritto ad ogni cambiamento della selezione o, all'occorrenza, in modo batch. Il nome Tab-List.log è prefissato.
Finestra principale
Contiene quattro campi editabili dotati delle seguenti proprietà:
  • è stato aggiunto il campo con la cartella origine corrente;
  • nei campi File origine e File destinazione, dopo l'immissione rimangono scritti solo i nomi di file senza il percorso;
  • nei campi Cartella origine e Cartella destinazione, se i percorsi sono contenuti nella cartella di lavoro essi sono depurati del nome della cartella di lavoro stessa, cioè compare il percorso relativo e non quello assoluto;
  • sono stati eliminati i campi Inizio blocco, Fine blocco, Codici di controllo, File risultati, Parametri riga (le relative impostazioni si trovano ora nel file di inizializzazione).
Per l'elenco dei tasti v. [¶3.1]. Segue l'elenco dei tasti nuovi o modificati.
  • F2 avvia l'elaborazione (come Ctrl+Invio).
  • Shift+F2 o Alt+L attiva/disattiva la scrittura dei resoconti.
  • F3 apre la finestra di scelta delle tabelle.
  • Shift+F3 o Alt+K per l'immissione dei quattro parametri di riga.
  • F4 apre una nuova tabella extra.
  • Shift+F4 chiude e salva l'attuale tabella extra (come Alt+M).
  • Shift+F5 attiva/disattiva la funzione di taglio (come Alt+P).
  • Shift+F6 attiva/disattiva la reimpaginazione (come Alt+R).
  • Shift+F7 o Alt+Y annulla/attiva la protezione delle chiavi critiche.
  • F8 apre la finestra di esplorazione.
  • Shift+F8 o Alt+Z annulla/attiva la protezione delle cartelle critiche.
  • F9 apre il manuale del programma.
  • Shift+F9 scelta editor.
  • f11/F12 cambiano il volume dei suoni.
  • Shift+F10, Shift+F11, Shift+F12 aprono rispettivamente il file di inizializzazione, il resoconto dell'elaborazione e il resoconto delle tabelle attive.
  • Invio nei campi File origine e File destinazione apre il file indicato.
  • Alt+O copia nel campo Origine il file presente nel campo Destinazione, uguagliando i due.
Il parametro Originale è stato abolito.
Finestra di scelta delle tabelle (F3)
È mostrata una videata distinta per ogni tabella (non più un elenco con una voce per riga) [¶4.1]. Sono mantenuti la posizione, l'ordine e lo stato di selezione, oltre alla stringa di ricerca, anche quando queste informazioni sono state fissate in una sessione precedente. Le variazioni dei comandi sono elencate di seguito.
  • F2 o Ctrl+Invio chiude la finestra e avvia il procedimento di sostituzione.
  • F3 per inserire o modificare la stringa di ricerca.
  • F4 riordina l'elenco delle tabelle senza alterarne lo stato.
  • Shift+F4 riordina l'elenco e deseleziona tutte le tabelle attive.
  • Tab/Shift+Tab spostano la visualizzazione sulla tabella attiva successiva/precedente.
  • Home e End portano rispettivamente alla prima e all'ultima tabella.
  • PgUp e PgDn spostano il contatore di dieci posizioni.
  • F9 apre il manuale del programma.
  • f11/F12 cambiano il volume dei suoni.
Finestra esplorazione
Si apre con F8 [¶4.2]. Di seguito sono elencati i cambiamenti e le nuove funzioni.
  • Viene mantenuta la posizione della precedente esplorazione.
  • F1 apre l'aiuto contestuale.
  • F2 apre la cartella origine corrente.
  • F3 apre la cartella origine predefinita.
  • F4 salta al primo file dopo le sottocartelle.
  • F9 apre il manuale del programma.
  • f11/F12 cambiano il volume dei suoni.
  • Spazio accetta e torna alla schermata principale.
  • Invio o F10 aprono il file con il programma predefinito (esclusi file eseguibili e simili).
  • Alt+W avvia l'editor senza parametri.
Riga di comando e opzioni
Se contengono spazi, i nomi di file vanno racchiusi tra virgolette. Viene rispettata la grafia dei caratteri maiuscoli e minuscoli.
Per l'elenco completo delle opzioni premere Ctrl+F1 nella finestra principale oppure avviare il file help.bat nella cartella demo\. Per informazioni particolareggiate v. [¶10]. Qui di seguito sono elencate le opzioni nuove e, accompagnate da un asterisco, quelle che presentano differenze significative rispetto alla versione MS-DOS.
  • /B è stata eliminata.
  • /F forza l'avvio in modo interattivo, sostituisce la vecchia opzione /I).
  • /G usata nel contesto dell'elaborazione multipla differita.
  • /I [*] prima di avviare la normale esecuzione, propone l'inserimento di ulteriori opzioni.
  • /J [*] determina l'orario del file destinazione.
  • /L [*] imposta le proprietà dei resoconti.
  • /M [*] imposta la profondità della scansione per un'elaborazione multipla.
  • /O [*] imposta la cartella origine predefinita.
  • /P [*] imposta la cartella tabelle predefinita.
  • /Q imposta la verbosità dei messaggi, sostituisce la vecchia opzione /M).
  • /S [*] attiva o disattiva i suoni e ne imposta il volume.
  • /T come in precedenza imposta da prompt l'elenco delle tabelle, ma ora i nomi possono essere lunghi e, se contengono spazi, vanno racchiusi tra virgolette.
  • /U specifica la codifica per il trattamento delle lettere accentate.
  • /V consente di non generare il file destinazione se al termine dell'elaborazione esso risulta identico all'originale.
  • /Y attiva o annulla la protezione delle chiavi critiche (parametro PrKey).
  • /Z attiva o annulla la protezione delle cartelle critiche (parametro PrDir).
  • /0 esclude, tutta o in parte, la lettura del file di inizializzazione.
  • /! [*] definisce la corrispondenza prompt (a differenza di quanto avveniva in MS-DOS, essa può essere di qualunque tipo (non solo di tipo speciale, e viene rispettata la grafia in maiuscole o minuscole). Se abbinata a opportune variabili di ambiente, la corrispondenza prompt può definire il cosiddetto array prompt. La corrispondenza prompt oppure l'array prompt sono copiati negli appunti di Windows.

14.A. Compatibilità delle tabelle della versione MS-DOS

Le tabelle preesistenti che funzionavano con la versione MS-DOS rimangono compatibili con WinPulisci, il particolare quelle distribuite insieme con il programma PULISCI, ma naturalmente non vale il viceversa. Si raccomanda di prendere nota delle avvertenze indicate di seguito.
  1. Il programma WinPulisci accetta le vecchie etichette [PULISCI], [SIMBOLI], [CORRISPONDENZE], [FINE] rispettivamente in luogo di [WinPulisci], [CONFIG], [CORR], [END]. In qualche caso, nelle tabelle esemplificative sono utilizzate le etichette vecchio stile allo scopo di dimostrarne la compatibilità.
  2. Funzione di taglio.
    Se una vecchia tabella contiene la chiave _nSFin, qualora in essa sia specificato un unico valore, il programma lo interpreta come se fosse preceduto dal segno meno. Ad esempio _nSFin=3 viene interpretato come se fosse scritto _nSFin=-3. In realtà si è liberi di utilizzare la nuova sintassi completa con i tre valori, secondo la quale tale comando equivale a _nSFin=-3,0,0 (naturalmente, facendo ciò, si rende la tabella incompatibile con PULISCI per MS-DOS). Per tutti i particolari della nuova sintassi v. [¶4.4].
  3. Lettere accentate maiuscole e minuscole.
    Se una vecchia tabella utilizza una delle direttive I, <, >, occorre controllare se le corrispondenze che includono queste direttive contengono lettere accentate perché in ambiente MS-DOS esse erano codificate secondo la tabella OEM. In questo caso nella sezione [CONFIG] della tabella si deve aggiungere la riga _AnsiC=0, in modo da stabilire la corretta trasformazione fra maiuscole e minuscole. Lo stesso effetto si ottiene anche aggiungendo la riga _AnsiC=0 nel file di inizializzazione (che però generalizza la scelta a tutte le tabelle) o avviando il programma con l'opzione /U) [¶8.10].
  4. Protezione delle chiavi critiche comuni al file di inizializzazione e alle tabelle [¶7.2.1].
    Le quattro chiavi _Delim, _Acapo, _CarJol e _CtrlK sono accettate in una tabella soltanto se la protezione delle chiavi critiche è disattivata. Per escludere tale protezione avviare il programma con l'opzione /Y0 oppure indicare il valore 0 nella chiave KProtKey del file di inizializzazione. Ad esempio, una tabella preesistente potrebbe utilizzare la vecchia codifica per i caratteri di controllo (v. l'osservazione successiva).
  5. Marcatore per i caratteri di controllo, chiave _CtrlK [¶7.4].
    Per adottare la nuova codifica dei caratteri di controllo, la definizione del marcatore richiede che esso sia affiancato da 0 come secondo carattere:
    _CtrlK = ^0
    
    Per mantenere la vecchia codifica [¶14.B] basta che nella tabella sia presente la definizione del marcatore al vecchio modo, senza l'aggiunta di un secondo carattere.
    Fare attenzione! Se si attivano contemporaneamente tabelle che utilizzano i due diversi tipi di marcatura si possono produrre conflitti con esito imprevedibile.
  6. Direttiva @ [¶8.8].
    Nella versione per MS-DOS questa direttiva costituiva un commutatore che agiva sulle corrispondenze contenenti due jolly nella prima stringa e un jolly nella seconda stringa. Eventuali caratteri jolly in eccesso presenti nella seconda stringa venivano trattati come caratteri ordinari. La direttiva @ è compatibile con l'uso che ne veniva fatto nelle vecchie tabelle, ma ora essa consente di permutare i jolly in modo più generale.
  7. La direttiva C è stata abolita in quanto non più necessaria [¶8.17]. Tuttavia non occorre preoccuparsi di toglierla, se presente in qualche vecchia tabella, perché essa viene semplicemente ignorata senza alcun inconveniente.
  8. L'insieme esplicito di caratteri per il jolly si scrive ora tra virgolette [¶8.7]. Rimane valida la possibilità di indicare tale insieme facendolo precedere da { (parentesi graffa).
  9. La direttiva R e le corrispondenze speciali sono ora controllate con due nuovi parametri chiamati rispettivamente Limitazione sostituzione riga e limitazione testo jolly [¶4.6]. Per mantenere la compatibilità con la versione MS-DOS, il loro valore predefinito è uguale a quello impostato per il parametro lunghezza di riga relativo alla reimpaginazione.
  10. Continuano ad essere accettate le vecchie direttive 0 1 ... 9,, equivalenti alle attuali J0 J1 ... J9 [¶8.7]).
  11. La direttiva R è compatibile con le direttive * e + e non è più necessario che le eventuali etichette di inizio e fine blocco si trovino a inizio riga.
  12. Non è più utilizzata implicitamente la tabella predefinita PULISCI.TAB perché il file di inizializzazione ne ha assorbito la funzione (in MS-DOS essa veniva automaticamente acquisita all'avvio del programma per definire i simboli di uso comune).

14.B. Vecchia codifica dei caratteri di controllo

Nella versione MS-DOS la codifica dei caratteri di controllo seguiva questa regola: a destra del marcatore si doveva indicare il carattere con codice ASCII ottenuto sommando 64 al codice del carattere che si voleva rappresentare. Ad esempio, per indicare i caratteri con codici 0, 7, 26 e 31 si scriveva rispettivamente ^@, ^G, ^Z e ^_. Nel seguente prospetto sono indicati i simboli per i caratteri di controllo in WinPulisci e in PULISCI per MS-DOS.
Prospetto simboli per caratteri di controllo
Codice WinPulisci PULISCI MS-DOS
0 ^00 ^@
1 ^01 ^A
2 ^02 ^B
3 ^03 ^C
4 ^04 ^D
5 ^05 ^E
6 ^06 ^F
7 ^07 ^G
8 ^08 ^H
9 ^09 ^I
10 ^10 ^J
11 ^11 ^K
12 ^12 ^L
13 ^13 ^M
14 ^14 ^N
15 ^15 ^O
16 ^16 ^P
17 ^17 ^Q
18 ^18 ^R
19 ^19 ^S
20 ^20 ^T
21 ^21 ^U
22 ^22 ^V
23 ^23 ^W
24 ^24 ^X
25 ^25 ^Y
26 ^26 ^Z
27 ^27 ^[
28 ^28 ^\
29 ^29 ^]
30 ^30 ^^
31 ^31 ^_

Torna al sommario.

15. Informazioni tecniche

Lo spazio occupato nel disco in un'unità NTFS dai file contenuti nell'archivio di setup è di circa un Mbyte.

La cartella di installazione può essere collocata in qualunque unità abilitata in scrittura (disco fisso, pen-drive, memoria flash, eccetera) [¶2.2].

WinPulisci è un programma di tipo console, cioè l'inserimento dei dati e la visualizzazione avvengono in modalità testo.
Il programma WinPulisci non deve essere usato in ambiente MS-DOS o Windows98. Per informazioni sulla compatibilità con le versioni di Windows v. il paragrafo 2.2.

Il programma WinPulisci è realizzato con il compilatore PB/CC, PowerBasic Console Compiler.

15.1. Motore delle sostituzioni e velocità di elaborazione

I meccanismi interni di sostituzione in WinPulisci sono diversi da quelli utilizzati in PULISCI per MS-DOS. Fra l'altro, grazie ai cambiamenti introdotti, non si verificano più certi errori di sostituzione che si riscontravano con la versione MS-DOS in caso di sostituzioni concatenate. Per illustrare la causa di tali errori, che dipendevano dal frazionamento in spezzoni, si può ricorrere a un'immagine.

Si consideri il file da elaborare come una riga di byte disposti uno di fianco all'altro, ripetuta tante volte una sotto l'altra quante sono le sostituzioni da eseguire.

Il vecchio procedimento operava con priorità verticale.
Veniva preso un piccolo spezzone a cui si applicavano tutte le sostituzioni, poi si passava a uno spezzone adiacente e così via, cioè si procedeva da sinistra verso destra coprendo simultaneamente tutte le righe. Il frazionamento in spezzoni garantisce un'ottima velocità di elaborazione, anche con i limiti di memoria di MS-DOS, ma presenta una difficoltà intrinseca perché una stringa da sostituire potrebbe cadere a cavallo fra due spezzoni adiacenti. La direttiva C di PULISCI (ora eliminata [¶8.17]) serviva per correggere questo problema ma in alcune situazioni l'accorgimento non forniva una protezione sufficiente.
Il nuovo procedimento opera con priorità orizzontale.
Viene percorsa per intero la prima riga, poi quella sottostante e così via, elaborando le singole sostituzioni una alla volta sull'intero file.
Tuttavia, una volta scartato il frazionamento in spezzoni, non si possono più sostituire le stringhe come in PULISCI per MS-DOS perché il tempo impiegato da quell'algoritmo obbedisce a una legge che, in funzione della grandezza del file, è di tipo quadratico sui file più piccoli e cresce molto rapidamente su quelli più grandi, rendendo l'elaborazione lenta in modo inaccettabile.

I nuovi algoritmi di sostituzione assicurano insieme la precisione delle sostituzioni e un tempo di elaborazione dipendente dalla grandezza del file in modo lineare e, in varie situazioni, sensibilmente più veloce rispetto alla vecchia versione. Chi fosse interessato ad esaminare questa tecnica può trovarne un esempio nel post che ho pubblicato nel forum di PowerBasic con il titolo A time-efficient case insensitive replace function.

Per quanto riguarda le corrispondenze EReg, soprattutto quando si usano i quantificatori *, + e ? l'elaborazione diventa poco efficiente, in termini di velocità, quando la dimensione del file aumenta oltre un certo limite [¶15.3]. Ad esempio, utilizzando un file di un Mbyte, la tabella 1-I_EReg.tab [¶13] impiega un tempo almeno duecento volte maggiore dell'equivalente tabella 1-I.tab che utilizza corrispondenze ordinarie. Normalmente, quindi, le corrispondenze EReg vanno impiegate su file piccoli (alcune centinaia di kbyte) oppure quando una sostituzione risulta difficile o impossibile mediante le corrispondenze ordinarie.

15.2. Informazioni sulla chiave di sblocco

Durante l'installazione il programma WinPulisci scrive all'inizio del file di inizializzazione WPulisci.ini [¶11] una stringa racchiusa tra parentesi quadre che si chiama chiave di sblocco. Essa viene letta all'avvio di ogni sessione e rinnovata al termine della stessa.

La chiave di sblocco è protetta con una cifratura che, pur essendo poco robusta, fa sì che la chiave stessa venga distrutta irreparabilmente in caso di alterazioni accidentali. Per proteggere da evenienze del genere, il programma WinPulisci mantiene nella cartella di lavoro una copia di riserva del file di inizializzazione. La copia di riserva è un file nascosto di nome WPulisci.sav che il programma recupera automaticamente se riscontra un errore nel file di inizializzazione.

A titolo informativo, i dati memorizzati nella chiave di sblocco sono riportati in chiaro nel file di inizializzazione e alla fine delle finestre di aiuto contestuale.

Per generare la chiave di sblocco viene costruito un record di 512 bit con le informazioni specificate di seguito.

I 64 byte ottenuti vengono protetti con cifratura a XOR progressivo da destra a sinistra e il record così ottenuto viene codificato con una trasposizione lineare a 7 bit nell'intervallo 35-162. Alla stringa ottenuta, che ha 74 caratteri, vengono infine aggiunti all'inizio 4 caratteri esadecimali che costituiscono un ulteriore controllo CRC relativo alla codifica a 7 bit.

Durante le elaborazioni batch il file di inizializzazione viene letto ma la chiave di sblocco non viene aggiornata e in particolare non vengono incrementati i relativi tempi di lavoro.

15.3. Limitazioni e problemi

La massima grandezza del file da elaborare deve rimanere entro un limite che si aggira intorno al 30% della memoria RAM disponibile nel momento in cui inizia l'elaborazione. Se il file contiene etichette di inizio e fine blocco, la limitazione si applica ai singoli blocchi definiti dalle etichette invece che all'intero file. Comunque, se la grandezza del file o di un blocco si avvicina a tale limite, potrebbero presentarsi criticità nel tempo di elaborazione o nell'accesso alla memoria, in particolare con la direttiva I.

Per quanto riguarda la funzione di taglio, essa è sempre riferita all'intero file e non viene eseguita se la grandezza del file supera la limitazione di cui sopra (in questo caso il resoconto riporta la dicitura bloccata).

La limitazione di grandezza è molto più stringente se viene utilizzata la direttiva E perché, anche con una grandezza di pochi Mb, l'elaborazione può rallentare in modo molto marcato. Inoltre può accadere che, se un'espressione regolare è particolarmente complessa (ad esempio in presenza di tag referenziati e di quantificatori), talvolta il programma si arresti con il seguente messaggio di errore:

unknown software exception (0xc00000fd) nell'applicazione alla posizione ...
Verosimilmente l'arresto è dovuto a un fenomeno di sovraccarico dello stack e al momento non è nota una soluzione.

Ringrazio fin d'ora quanti vorranno cortesemente segnalarmi ulteriori problemi o malfunzionamenti.

Chiedo scusa per eventuali imprecisioni o errori presenti nella documentazione.

Torna al sommario.



per informazioni sul prelievo e l'installazione del programma WinPulisci v. [¶2].

Torna al sommario.

Università Registrazioni Ciechi File I3LGP Religione Scrivi Inizio


 

Valid HTML 4.01 Transitional