Hola,
Tengo un problema al tratar un fichero. El fichero es del siguiente tipo:
Using text Syntax Highlighting
1234 1 2 3 1 1 2
1235 1 2 2 1 1 2
1232 2 1 2 3 2 2
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Todo esto separado por tabulaciones, y yo lo que quiero es leerlo y modificar esos números por un texto diferente para cada columna y valor. Es decir, para la columna 2 el valor 1 es
Male y para la columna 3 el valor 1 es
Present.
El problema lo tengo en que me sustituye cuando encuentra la primera ocurrencia del 1 que es en la primera columna y no sé cómo decirle que me sustituya sólo la de la 2.
El código de forma resumida es el siguiente:
Using perl Syntax Highlighting
@lineas;
open FICHERO,, "<:utf8", "cases.txt" or die 'No se puede abrir el fichero cases.txt !';
@lineas = <FICHERO>;
close FICHERO;
for ( $j = 0; $j <= $#lineas; $j = $j + 1 ) {
@valores = split( "\t", $lineas[$j] );
$entra = 0;
# SEX
if ( $valores[3] eq "1" ) {
$b = $valores[3];
$c = "Male";
$lineas[$j] =~ s/$b/$c/;
push @aux, $lineas[$j];
$entra = 1;
}
elsif ( $valores[3] eq "2" ) {
$b = $valores[3];
$valores[3] = "Female";
$lineas[$j] =~ s/$b/$c/;
push @aux, $lineas[$j];
$entra = 1;
}
# moonths ill
if ( $valores[37] eq "0" ) {
$b = $valores[37];
$c = "Absent";
$lineas[$j] =~ s/$b/$c/;
push @aux, $lineas[$j];
$entra = 1;
}
elsif ( $valores[37] eq "1" ) {
$b = $valores[37];
$c = "Present";
$lineas[$j] =~ s/$b/$c/;
push @aux, $lineas[$j];
$entra = 1;
}
elsif ( $valores[37] eq "3" ) {
$b = $valores[37];
$c = "?";
$lineas[$j] =~ s/$b/$c/;
push @aux, $lineas[$j];
$entra = 1;
}
elsif ( $valores[37] eq "2" ) {
$b = $valores[37];
$c = "Suspected";
$lineas[$j] =~ s/$b/$c/;
push @aux, $lineas[$j];
$entra = 1;
}
if ( !$entra ) {
push @aux, $lineas[$j];
}
}
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Hago el
push @aux, porque quiero guardar en un fichero el resultado, tanto las columnas que cambio como las que no.
Muchas gracias de antemano y espero haberme explicado bien,
saludos.