Quale linguaggio usare

Lasciamo sbocciare cento fiori
毛泽东

Il post di oggi –breve che fa caldo– è una continuazione del precedente. Anche se affronta un argomento leggermente diverso, come scoprirete presto continuando a leggere 8)


Mi sono trovato a dover traslitterare (mi hanno detto che si dice così) in minuscolo il contenuto di un file, lungo e pieno di parole astruse. A farlo a mano ci sarebbe stato un grosso rischio di inserire errori, e poi è poco elegante.

Siccome stavo facendo altre cose con newLISP la decisione spontanea, immediata è stata di usarlo. Ed ecco cosa ne è uscito (tolower.nl)

#!/usr/bin/newlisp

;; converte il file in minuscolo

(set 'argv (main-args))
(set 'narg (length argv))
 
; il primo indice dei parametri è pex + 1
(if (find "newlisp" (argv 0))
	(set 'pex 1)
	(set 'pex 0)
)

; file da convertire
(if (> narg pex)
	(set 'sorgente (argv (++ pex)))
	(begin
		(println "nessun file")
		(exit)
	)
)

(if (not (file? sorgente))
	(begin
		(println "manca il file " sorgente)
		(exit)
	)
)

(set 'text (read-file sorgente))
(set 'text (lower-case text))

(set 'bak (join (list sorgente "bak") "."))
(if (file? bak)
	(delete-file bak))
(rename-file sorgente bak)  
(write-file sorgente text)

(exit)

Sono una quarantina di righe ma quella fondamentale è (set 'text (lower-case text)). Proviamolo su un file di prova (prova), otteniamo

OK! perfetto 😀 O no?

Sì funziona ma c’è un fatto: “quando hai un buon martello tutto sembra un chiodo“. Forse si poteva fare con mezzi più semplici, con tools resi disponibili dal Sistema Operativo. Sì se fosse stato su Linux, nell’ambiente in cui mi trovavo (quello che spesso mostra una schermata blu con scritte bianche che ti dicono di prenderti una pausa mentre riavvii) no.

Tornato a casa non ho resistito, dovevo farlo 8)

La prima idea è stata di usare AWK, per ragioni storiche: tutte le volte che ne proponevo l’uso mi dicevano di no; adesso posso e allora (lc-awk.sh)

#!/bin/sh
cat $1 | awk '{print tolower($0)}'

testandolo si ha

OK! perfetto 😀 O no?

Si può fare di meglio: non c’è bisogno di AKW, basta bash (b.sh)

#!/bin/bash
tr '[A-Z]' '[a-z]' < $1

verifica


Volendo, si può essere ancora più eleganti (b1.sh)

#!/bin/bash
tr '[:upper:]' '[:lower:]' < $1

OOOK! 😀

Ci sarebbero moltissimi altri modi per ottenere lo stesso risultato, per esempio in Python c’è

str.lower()
Return a copy of the string converted to lowercase.

esattamente come in newLISP. Chi ha copiato?
Ma lo sapevamo di già

tutte le strade portano a Ankh-Morpork

E poi, a dirla proprio tutta-tutta, non sono nemmeno originale. Tempo fa avevo segnalato il link a “trying to use Unix tools“: dovrei fare più attenzione a quello che leggo e riporto.

________________
Poi per chi volesse approfondire sul 伟大舵手 può partire da qui, sì c’è anche in italiano.

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • silvio1964  Il 25 agosto 2011 alle 14:27

    Fantastico.sh perfino il taglio e la trasparenza delle schermate:-)

    • juhan  Il 25 agosto 2011 alle 14:34

      in realtà di quello mi sono accorto troppo tardi, non avevo più voglia di rifarle; poi si capisce lo stesso, o no?
      Piuttosto la privacy: si vedono troppe cose del mio HD, devo provvedere 😉

  • silvio1964  Il 25 agosto 2011 alle 14:56

    Anzi lo trovo bello,e poi windoze.exe non lo fà:P

Trackback

  • Ancora su BaCon (e newLISP) « Ok, panico su 2 settembre 2011 alle 13:55

    […] del demo calculator? Dopo averlo salvato lo converto tutto in minuscolo con tolower.nl, raccontato qui, lo processo con uk, lo compilo e lo lancio: funziona! (Non riporto le immagini, non direbbero […]

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: