giovedì 19 luglio 2012

MS-DOS gestione delle substring

In passato per gestire le sottostringe su MS-DOS ero sempre costretto a fare dei voli pindarici con  cicli for usando come delimitatori tutti i caratteri alfabetici e numerici, praticamente un bagno di sangue.

Nel corso degli anni Microsoft ha migliorato questa soluzione, o forse la ho scovata io troppo tardi, ma utilizzando il comando set si possono ottenere degli ottimi risultati.


Ad esempio volendo valorizzare i caratteri 11, 12, 13, 14 e 15 di una data stringa potremmo utilizzare un costrutto del genere:
 C:\>set str=1234567890ABCDEFGHILMNOPQRSTUVZ
 C:\>set str2= %str:~10,5%
 C:\>echo %str2%
ABCDE

Avrebbe funzionato anche se al posto di set str2 ... avessimo usato direttamente il comando echo

Utilizzando questa forma, invece, vedremmo solo gli ultimi 10  caratteri della nostra stringa:
 C:\>echo %str:~-10%
NOPQRSTUVZ

Così toglieremo i primi 10 caratteri, vedendoli dalla 11 in poi
 C:\>echo %str:~10%
ABCDEFGHILMNOPQRSTUVZ

Così saremmo in grado di escludere gli ultimi 21 caratteri
 C:\>echo %str:~0,-21%
1234567890



Naturalmente così potremmo visualizza solo i primi 10 caratteri
  C:\>echo %str:~0,10%
1234567890

Il gioco è chiaro, con tale sistema si riesce a stare dietro hai più grossi "creatoru" di stringhe strane, si possono normalizzare le date e via dicendo.

Sarò buono, di seguito un esempio di normalizzazione della data di sistema:
 C:\>date /t
19/07/2012
 C:\>echo %date:~-4%%date:~3,2%%date:~0,2%
20120719

Altro trucchetto riguardo la tilde, per scriverla il modo più veloce è tenere premuto il atsto ALT e scrivere 126 con il tastierino numerico, nel mio caso con un portatile e la tastiera compatta per evitare di fare lunghi e difficili contorsionismi il copia e incolla è stato fondamentale.