[bcn-pm] manipular un fitxer canviant xifres negatives per un zero

Agud Pique, Enric eagud.q a tv3.cat
dll mar 17 05:16:56 PDT 2014


Hola Xavier,

moltes gràcies pels comentaris. Si a casa tincs la 4 eidcio de Programming Perl de l'editorial O'REILLY,  però normalment tiro de google...

He seguit les teves indicacions però en el codi que he utilitzat encara hi ha alguna cosa que em falla pq no em guarda cap dada

#!/usr/local/bin/perl

use autodie;

my $nombre = 'data.dat';
my $nombre2 = 'data2.dat';
open my $INFILE, '<', $nombre;
open my $OUTFILE, '>', $nombre2;


my $linea;
while ( $linea = <INFILE>) {
chomp($linea);
if ($linea < 0) {
    $linea=0
    }
print   $OUTFILE "$linea\n";
}

close   $OUTFILE;

________________________________
De: Barcelona-pm [barcelona-pm-bounces+eagud.q=tv3.cat a pm.org] en nom de Xavier Noria [fxn a hashref.com]
Enviat el: dilluns, 17 / març / 2014 10:17
Per a: Barcelona Perl Mongers
Tema: Re: [bcn-pm] manipular un fitxer canviant xifres negatives per un zero

Hola Enric,

Perl es una mica diferent a la resta de llenguatges en aquest particular punt. Conceptualment no distingeix nombres i cadenes, tot es igual per ell i interpreta les dades segons el context.

Perl te un solo tipus de dada que engloba aquests dos i mes, el tipus escalar.

Aixi, quan tu fas $a + $b Perl diu: ah, "+" es un operador binari *numeric*, he d'interpretar $a com a nombre, $b com a nombre, i tornar un escalar amb la suma. Mentre que a $a . $b, interpreta que $a i $b cal veure-les com a cadenes, i igualment torna un escalar amb la seva concatenacio.

L'interpret te optimitzacions que fan que aixo funcioni en C de forma eficient, pero a nivell de programador el model mental es el que et dic[*].

En el teu codi, $linia < 0 es correcte. Pero cal revisar l'assignacio que te un signe igual de mes:

    $linia = 0; # un sol =

i possiblement voldras un salt de linia en treure el valor al fitxer:

    print $OUTFILE "$linea\n";

A mes a mes, cal que obris $OUTFILE una sola vegada al principi, perque si no cada cop que l'obres esborra el que hi havia.

T'has llegit "Learning Perl"?

Xavier

[*] Hi ha algun operador binari dubtos que depen de que son els escalars per sota en aquell moment de l'execucio del programa, pero es podria considerar un bug de la definicio del llenguatge, no encaixen.


Més informació sobre la llista de correu Barcelona-pm