In questa puntata: Macro. Come far fare al computer operazioni noiose e ripetitive con la pressione di pochi pulsanti. Tutto grazie a VI!
Speravate non capitasse mai, ma è successo. La fatidica frase del capo: "Tirami fuori una tabella html da questo log testuale" e di colpo una bella giornata finisce nel baratro e se ne vanno giorni di lavoro solo per riuscire a intabellare un log. Tutto questo succede se non usate VI. Con questo fantastico editor potrete registrare le operazioni da fare su ogni riga e fargliele ripetere all'infinito mentre voi riposate.
Iniziamo, abbiamo il nostro log; in questo caso è il log di un vecchio script che ho creato tanto tempo fa:
Tue Sep 11 11:04:50 2012 - UU Started
Tue Sep 11 11:04:50 2012 - Sync Started
Tue Sep 11 11:07:38 2012 - Fetch Started
Tue Sep 11 11:09:14 2012 - Make Started
Tue Sep 11 11:09:32 2012 - Keyboard Interrupt detected, closing UU
Intabellare una cosa del genere potrebbe risultare molto noiosa, soprattutto quando il log non è lungo solo 5 righe, ma ben 291 (questa è la dimensione attuale del mio log).
Il nostro obiettivo è modificare la prima riga in modo che abbia la struttura che vogliamo per poi far ripetere il tutto a VI. Vediamo come:
Iniziamo posizionandoci sulla prima riga e premiamo:
[q][a]
Questo comando dirà a VI di registrare ciò che accadrà d'ora in poi nel "Registro a", ovviamente VI risponderà prontamente nella barra di stato:
recording
ora iniziamo a modificare il file così:
[i]
<tr><td>
In modo da inserire i tag di riga e dato, ora:
[ESC]
/ [ENTER]
Attenzione: Dopo il "forward slash" c'è uno spazio, effettivamente stiamo proprio cercando uno spazio
Ora premiamo
[n]
Tante volte quante sono necessarie per arrivare allo spazio dopo la fine della colonna cercata, nel mio caso devo premerlo 2 volte, poi diamo:
[x][i]
</td><td>
Con [x] cancelliamo lo spazio per poi entrare in modalità inserimento e chiudere una colonna ed aprirne un'altra, il risultato finora è questo:
<tr><td>Tue Sep 11</td><td>11:04:50 2012 - UU Started
Continuiamo con:
[ESC]
[n]
Per passare allo spazio successivo, nel mio caso questo basta per arrivare dopo l'ora registrata nel log, perciò:
[x][i]
</td><td>
Proseguiamo con:
[ESC]
[n]
Per arrivare allo spazio successivo all'anno, io premerò 3 volte
[x]
Per cancellare i due spazi e il trattino, poi proseguo con:
[i]
</td><td>
poi per finire:
[ESC]
[FINE]
[a]
</td></tr>
[ESC]
[Freccia Giù]
[Inizio]
Con questi comandi: dopo esserci portati alla fine della riga e aver scritto i tag di chiusura html ci portiamo all'inizio della riga successiva; questo è importante per l'esecuzione, così lo script andrà da solo ad operare nella riga successiva.
Possiamo terminare la registrazione con:
[q]
Facciamo un prova richiamando lo script con:
[@][a]
Se la seconda riga si modifica come previsto possiamo eseguire lo script fino alla fine con:
[9][9][9][9][@][a]
In realtà questo comando esegue semplicemente lo script 9999 volte, ma se le righe sono meno, si ferma.
Il risultato sarà:
<tr><td>Tue Sep 11</td><td>11:04:50</td><td>2012</td><td>UU Started</td></tr>
<tr><td>Tue Sep 11</td><td>11:04:50</td><td>2012</td><td>Sync Started</td></tr>
<tr><td>Tue Sep 11</td><td>11:07:38</td><td>2012</td><td>Fetch Started</td></tr>
<tr><td>Tue Sep 11</td><td>11:09:14</td><td>2012</td><td>Make Started</td></tr>
<tr><td>Tue Sep 11</td><td>11:09:32</td><td>2012</td><td>Keyboard Interrupt detected, closing UU</td></tr>
Ora basta inserire i tag:
<html>
<body>
<table border=1>
All'inizio del documento e i tag:
</table>
</body>
</html>
E avrete la vostra tabella in html bella che pronta in soli 5 minuti!
Saluti e al prossimo post!
Penaz.