• Publicidad

¿Por qué falla la consulta?

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

¿Por qué falla la consulta?

Notapor javierg » 2007-03-08 09:48 @450

Buenas, tenga esta línea de código en Perl.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dia= system("date |awk '{printf $3}' ");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y no se por qué me falla.

Lo que quiero conseguir es el número de día solamente.

La idea de utilizar esto, es porque con un date normal, por ejemplo el día 7 lo toma como 07 y yo solo quiero el 7.

gracias
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Publicidad

Notapor explorer » 2007-03-08 10:00 @458

system() devuelve el resultado de la ejecución, NO la salida de la ejecución. Para esto, debes usar qx();

Otra cosa... para saber la fecha del día, no necesitas programas externos a Perl, sino el propio Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dia = (localtime)[3];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor javierg » 2007-03-08 10:09 @465

efectivamente,
mucho mas simple y funciona

gracias
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Notapor javierg » 2007-03-08 10:58 @498

este valor que devuelve es un entero

hay alguna forma de pasarlo a caracter.
He probado a meterlo en un split, y luego a sacar el valor, pero me falla
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Notapor explorer » 2007-03-08 11:14 @509

¿Puedes poner el código y la salida?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Perl user » 2007-03-08 15:29 @687

javierg escribiste:este valor que devuelve es un entero

hay alguna forma de pasarlo a caracter.
He probado a meterlo en un split, y luego a sacar el valor, pero me falla


Eso me sonó a "circo, maroma y teatro".....

El contexto de un escalar (aquí menciono contexto como el tipo de dato interno o su representación interna), es reflejado en cómo lo usas:

$a = 5; # Numérico
"$a" # obviamente convierte eso a cadena
"$a" + 5 # valor numérico por tratarse de una operación aritmética

Y lo mismo pasará cuando compares un valor escalar en forma de cadena y en forma numérica.

Si quieres represenaciones específicas lee sobre la función sprintf.

Saludos,

PD. Es necesario leer un poco más sobre aspectos básicos de los tipos de datos en Perl.
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor javierg » 2007-03-09 02:07 @130

señores porfavor ....

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dia=(localtime)[3];
@dia = split/ /,$dia;
print " el valor es @dia";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


$dia es un entero, intento pasarlo por un split para sacarlo como carácter,
pero ese valor que me devuelve sigue siendo un entero.
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Notapor javierg » 2007-03-09 03:31 @188

Adjunto el código.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dia = (localtime)[3];
@dia = split/ /, $dia;
while ($i > $j) {
    $error = "false";
    system ("ls -l /export/home/psaxbck/$almacen[$j] > /tmp/lsCOMP");
    open(DIRCOMP, "$Dir_COMP") or die ("no se puede abrir el fichero /tmp/lsCOMP");
    while ($linea = <DIRCOMP>) {
        #$valor5 = (split " ",$linea)[5];
        $valor6 = (split " ",$linea)[6];
        $fecha = $valor6;
        if ( @dia eq fecha ){
            #$error = "true";
            #$fallido[$k] = $almacen[$j];
            $k++;
        }
    }
    print "el valor de dia es $dia y el valor de fecha es $fecha\n";
    #if ($error eq "true") {
        print " fallo en el back de $almacen[$j]\n";
    }
    close(DIRCOMP);
    $j++;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cuando quito el ultimo if, funciona OK. Pero cuando lo pongo me sale el siguiente error
Código: Seleccionar todo
Use of uninitialized value in string at pruebabackup.pl line 77, <DIRCOMP>

Lo de sumar un número a un escalar, o poner comillas a una variable numérica, ya lo probé hace tiempo. Aunque ahora dudo de que en esto venga el problema.
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Notapor explorer » 2007-03-09 03:52 @203

El problema está aquí:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( @dia eq fecha ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
¿Qué narices es eso?

Estás comparando un array con un literal, por lo que Perl pasa el array @dia a formato escalar, es decir, nos devuelve la longitud de la lista almacenada en @dia, como un entero.

Pero a continuación, haces una comparación de cadena ('eq') por lo que convierte el entero devuelto antes por el array a un string, y lo compara con fecha, que al ser un literal, lo convierte al string 'fecha' (por lo que, sospecho, debería ser corregido a $fecha, definida una línea antes).

A ver... tu lo que quieres es saber si la $fecha es el día de hoy... entonces, nos podemos olvidar de @dia. Necesitaríamos saber el formato del dato de día que extraemos desde la $linea, pero supongamos que es el mismo que el que nos devuelve localtime (valores de 1 a 31, sin relleno de cero o espacios).

Entonces... el 'if' quedaría así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( $dia eq $fecha ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Si el formato de la $fecha es distinto, quizás habrá que hacer la comparación de otra manera...

Pero recuerda... Perl NO tiene variables escalares DISTINTAS para números y para strings. Y un array NO almacena strings, sino listas de escalares (que, ocasionalmente, pueden ser strings o caracteres).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados