Modificare il testo

b

Le espressioni regolari (re, regexp o altre sigle) sono una cosa bellissima o difficilissima. Io ci arriverò, ma non subito. Anche perché non è detto che serva tutta la loro potenzialità. Come nei post precedenti qui (e commenti) e qui ci sono casi più semplici.

Per esempio se avete dati in un foglio i calcolo (come Excel, non necessariamente quello di M$, sono ottimi quelli FOSS) potete salvarli separando i contenuti delle celle con tab o il carattere predefinito per il CSV, il punto-virgola per la versione italiana.

Con Linux la cosa è immediata:

dtab

e

dpv

Il carattere “è” è fuori dal set ASCII ma se reindirizzate l’output in un file vedrete che c’è.
Ecco se vivessimo in un universo leibniziano (il migliore dei mondi possibili) si userebbe solo Linux e il mio post finirebbe qui. Invece no: entri Windows 🙄

Qui sed non c’è. Vero che potrei anche installarlo, lui e altro, p.es. vedi qui o qui.
Ma ci sono soluzioni più semplici. Il mio amico Beppe ha risolto tutto con un programmino (non tanto -ino in realtà) in Visual Basic ma se volessimo che lo stesso programma (probabilmente uno script) sia disponibile per entrambi gli OS dovremmo ricorrere a altri linguaggi, possibilmente freeware.

Io una soluzione semplice e elegante ce l’ho, da sempre, ecco lo script nella versione più semplice (e comprensibile):

1
2
3
4
5
6
7
8
#!/usr/bin/newlisp

(set 'fname (main-args 2))
(set 'txt (read-file fname))
(if (= txt nil) (begin (println "errore") (exit 2)))
(set 'stxt (replace ";" txt " "))
(println stxt) 
(exit 0)

Naturalmente qualsiasi lispista oltre quota 101 avrebbe a che ridire, sapete la moda (non solo moda) della programmazione funzionale e allora, senza esagerare, ecco:

1
2
3
4
5
6
#!/usr/bin/newlisp

(set 'txt (read-file (main-args 2)))
(if (= txt nil) (begin (println "errore") (exit 2)))
(println (replace ";" txt " "))
(exit 0)

nl

Un lispista finito sposterebbe certamente la parentesi che chiude l’if al findo e unificherebbe le righe restanti (sì, lambda) ma si era detto di fare un passo per volta, no?

Questo script è quasi buono. Notare che basterebbe cambiare il carattere “;” con “\t” o quel che si vuole nella replace per adattarlo agli altri casi. È inotre immediato creare l’eseguibile .exe soluzione normale (quasi d’obbligo) per Windows, in questo caso non hai bisogno di installare newLisp, basta l’eseguibile stand-alone.
Ma –c’è sempre un ma– si era detto (nei post precedenti) che stiamo tentando di ridurre il numero di linguaggi di programmazione usati (cosa che mi sento dire da 30 anni in verità e il loro numero è sempre cresciuto) e allora niente, da rifare con Python, o altro, idee? suggerimenti?.
Prossimamente… forse… :mrgreen:

Posta un commento o usa questo indirizzo per il trackback.

Commenti

Trackback

  • Modificare il testo con Python | Ok, panico su 18 gennaio 2014 alle 11:51

    […] Le espressioni regolari –d’ora in poi RE– non è che sono semplicissime. Vanno prese a piccole dosi, quasi omeopatiche come nel post precedente. […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: