Vim e Linea di Comando per acquisire un elenco di documenti da inserire in atti giudiziari utilizzando le Espressioni Regolari
La situazione di fatto e le premesse di sistema
La situazione di fatto rappresenta un evento molto comune nella pratica forense, ovvero la necessità di riportare in un atto giudiziario, nella sezione DOCUMENTI, un elenco (lungo ad libitum) di documenti formattati con uno schema del tipo DOC xx *.*, ovvero con prefisso DOC seguito da numerazione progressiva a due cifre e con estensione comprendente vari formati, tutti compatibili con il protocollo del PCT: ad esempio .pdf, .tiff, .jpg, .png.
Ad esempio
L'operazione viene effettuata in due passaggi essenziali:
- Il primo passaggio è costituito dalla linea di comando su prompt Windows (in linea di massima equivalente al terminale di Linux e macOS).
- Il secondo passaggio è costituito dall'applicazione di alcuni comandi tra cui una formula di regexp (ovvero Espressione Regolare) utilizzando il gestore di testi GVim. Ho separato la parte finale del secondo passaggio per evidenziare le caratteristiche della formula applicata.
La scelta di Windows deriva dalla diffusione dell'ambiente in ambito di lavoro e dalla necessità di dimostrare l'utilità attuale del tradizione sistema di gestione a linea di comando.
La linea di comando utilizzata può essere convertita, con le dovute modifiche, nelle linee di comando Unix, Linux e, quindi, anche macOS.
Il gestore di testi, ovvero GVim, è quello che sto utilizzando in questo momento ma, ovviamente, la stessa formula si può applicare a qualsiasi gestore abilitato alle Espressioni Regolari.
1. PRIMA PARTE
Il primo passaggio è quello della trasformazione dell'elenco su cartella in un file contenente i nomi grezzi e viene effettuato mediante applicazione di una stringa di comando a linea di testo: dir DOC*.* > elenco.txt
Analizziamo le singole componenti della linea di comando:
dir
è il comando tradizionale, derivato da DOS, che elenco il contenuto della DirectoryDOC
è la parte testuale del comando e serve a filtrare l'elenco da eventuali altri documenti presenti nella stessa cartella (ovviamente se esistono altri documenti che iniziano con le stesse lettere saranno inserite nel filtro e dovranno, poi, essere eliminate a parte)*.*
è la parte con i caratteri jolly e significa: includi tutti gli ulteriori caratteri successivi a quelli specifici già indicati con punto e qualsiasi estensione.>
indica la destinazione del comando, ovvero dove il comando viene inviato, in particolare presupposto che dopo vi sia un nome di documento quale contenitore del filtraggioelenco.txt
è il nome del documento che andrà a raccogliere il risultato del filtraggio.
Procediamo con il primo step:
- Partendo dalla posizione di default utilizzo la linea di comando per spostarmi sulla cartelle contenente i files con il comando
cd Documents
- Effettuo un primo controllo visivo del contenuto della cartella con il semplice comando:
dir
(ovvero la stessa stringa sopra descritta ma senza opzioni) - Verificata la correttezza della cartella applico la formula
dir DOC*.* > elenco.txt
già sopra descritta:
Il sistema non dà alcun esito ma andando a vedere, anche con il tradizionale Blocco Note di Windows, il contenuto della cartella troveremo un nuovo file denominato, appunto, elenco.txt e contenente l'elenco del documenti:
FINE DELLA PRIMA PARTE
Adesso inizia la parte più tecnica (ma anche quella più divertente), ovvero l'utilizzo dell'editor di testo per la rifinitura del risultato.
2. SECONDA PARTE
- Apro elenco.txt in GVim ed ottengo lo stesso risultato già visto con il Blocco Note.
- Conto le prime righe da eliminare (sono 5 in tutto) prima di arrivare alla parte sostanziale:
- Utilizzo il comando
5dd
di Vim (GVim non è altro che Vim in modalità grafica) per eliminarle tutte in un colpo solo. - Utilizzo il comando per attivare il VISUAL BLOCK (ATTENZIONE! Questo comando è Ctrl-v nei sistemi operativi di origine Unix, ovvero Linux e macOS e Ctrl-q in Windows per evitare interferenze con il comando Incolla da Clipboard).
- Salto direttamente al termine dell'elenco con il comando
nj
doven
è il numero di righe successive alla prima. - Evidenzio le colonne data, ora e la colonna di ZERI adiacente a DOC con il comando
3W
(Attenzione:W
maiuscolo per includere tutti caratteri intermedi) - Premo
x
per cancellare la parte evidenziata.
A questo punto abbiamo ottenuto questo risultato:
Siamo quasi arrivati al termine: occorre eliminare tutte le estensioni, ovvero i caratteri .pdf .tiff .png .jpg.
È giunto il momento di applicare la formula di regexp!
Applicazione della formula di regexp
Per completare la procedura di acquisizione utilizzo una formula tratta dalla sintassi delle Espressioni Regolari che andrò, poi, a commentare:
:%s/\.pdf\|\.tiff\|\.png\|\.jpg//g
La formula sembra complessa ma in realtà è una sequenza strettamente logica:
:%s
è l'avvio di ogni operazione di sostituzione iniziando dalla parte superiore- Il primo slash
/
è l'inizio della stringa di ricerca - Tutti i successivi backslash sono codici di escape, ovvero neutralizzano i caratteri che seguono ciascuno di essi. In particolare neutralizzano i punti (che hanno un significato semantico ben preciso nelle Espressioni Regolari) e la pipe, che serve a collegare in OR i vari termini di ricerca.
- Le ultime due slash
//
racchiudono il termine di sostituzione, ovvero il nulla - La lettera
g
finale indica la ricerca globale
In questo modo con un unico comando abbiamo ottenuto questo risultato:
Ovvero un risultato pulito e privo di elementi aggiuntivi, come le estensioni.
Pensate all'enorme risparmio di tempo che questo sistema potrebbe garantire in ipotesi di produzioni documentali numericamente molto consistenti!
Le Espressioni Regolari, se ben utilizzate, offrono, un'infinita potenzialità di ricerca e sostituzione!
Tralascio le ulteriori operazioni che potrebbero essere utilizzate se la destinazione fosse un sorgente LaTeX, ovvero l'inserimento dell'ambiente compactenum
e i prefissi \item
prima di ogni riga (perchè quella è un'altra storia) e mi fermo qui, ringraziando chiunque abbia avuto la pazienza di seguirmi.
Franco Pasut
Commenti
Posta un commento