[Linuxtrent] Re: appello agli esperti perl

  • From: Daniele Pizzolli <ors@xxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Mon, 27 Oct 2014 16:21:17 +0100

On 2014-10-27 15:43, Michele Bert wrote:
Sto scrivendo uno script in perl che a grandi linee fa 3 semplicissime cose:
- prende un file testo codificato ebcdic, cui tutte le righe sono
lunge 79 caratteri, e privo di carattere di fine riga.
- lo converte in ascii, ed inserisce un carattere di fine riga ogli 79 caratteri
- copia/sposta il risultato in un altra directory

Ciao,

Azz, chiamalo semplicissimo, 60 righe... poi serve davvero tutto sto
perl?

Per convertire da ebcdic ad ascii uso dd, mettendo l'output in pipe
con un HANDLE perl, da cui leggo 79 caratteri alla volta, che scrivo,
intervallati da uno '\n', in un file nella direcory corrente. Infine
chiamo cp oppure mv attraverso una chiamata system() per spostare il
file.

Se copio il file il risultato sembra corretto, mentre se lo sposto,
alcuni di essi risultano vuoti. Così mi domandavo: esistono dei
meccanismi di parallelizzazione o bufferizzazione per cui se io faccio
la 'mv' troppo presto, in realtà sto spostando il file prima che
questo venga effettivamente scritto?

Qualcuno sa darmi qualche altra spiegazione al fenomeno?

Faccio un po' di fatica a leggere perl (anche se al volo alcune cose
che vedo non mi tornano del tutto).

Se non hai bisogno di una gestione speciale degli errori cosa ti serve
in più di un:

dd bs=1 conv=ascii < input | sed 's:\(.\{79\}\):\1\n:g' > newdir/output

E secondo me qualche guru di sed riuscirebbe a scriverlo anche più
corto...

Ciao,
Daniele

--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: