• Publicidad

Imprimir un string que contenga @

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Imprimir un string que contenga @

Notapor cyberalph » 2006-07-26 10:47 @491

Necesito ayuda con un script que genera un string que contiene la @ como carácter.
Leí por ahí que tenía que poner el \ para que me imprimiera la @, pero me lo está tomando como un retorno de carro y el string sale cortado en dos.
¿Que puedo hacer para imprimir la @?
cyberalph
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-07-26 10:42 @487

Publicidad

Notapor explorer » 2006-07-26 11:27 @519

Eso es muy raro lo que te pasa...

Con cualquier de estas cuatro formas se puede imprimir:

Código: Seleccionar todo
$frase = "El correo electrónico de ana es ana\@felix.nnet";
$frase = 'El correo electrónico de ana es [email protected]';
$frase = qq(El correo electrónico de ana es ana\@felix.nnet);
$frase = q(El correo electrónico de ana es [email protected]);
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor cyberalph » 2006-07-26 12:35 @566

Pues cierto esta muy muy raro, probe las 4 opciones y el resultado fue el mismo.
Algo mas raro es que con la ultima opcion no se usa la \ pero me hace el retorno de carro. Si se imprime la @ pero se corta la linea.

Asi es como me lo imprime:
Channel: Sip/01XXXXXXXXXXX
@contexto-salida
...
...

Y esto es lo que necesito:
Channel: Sip/01XXXXXXXXXX@contexto-salida
...
...

Asi esta el codigo ahorita:

Código: Seleccionar todo
$sips=q(@fonet-outgoing);

sub create {
        open (FILETXT,">$pathtxt/$num") or die "Can't oppen $pathtxt/$num: $!";
        print FILETXT "Channel: Sip/01$num$sips\n";
                foreach $line (@FILE) {
                        print FILETXT "$line";
                }
        close (FILETXT);
}



Estaba pensando si esto no funciona, crear otra funcion para entrar al archivo y quitarle ese retorno de carro. El problema es que no se como posicionarme en la segunda linea (o ne la primera) y quitarle ese retorno de carro.
:?:
cyberalph
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-07-26 10:42 @487

Notapor explorer » 2006-07-26 13:13 @592

¡Ah!, ¡pero es que el retorno de carro no está en $sips!
¡Está en $num!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor cyberalph » 2006-07-26 14:03 @627

La variable $num la asigno de un listado de numeros que estan en un archivo como base de datos.
Pero no se como o de que forma esta poniendo ese retorno de carro.
cyberalph
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-07-26 10:42 @487

Notapor explorer » 2006-07-26 14:12 @633

Hazle un chomp($num) después de leerle...

Es posible que estés leyendo el retorno de carro al final de cada línea de ese archivo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor cyberalph » 2006-07-26 14:22 @640

De hecho asi lo estoy haciendo, este es el codigo donde lo hago:

Código: Seleccionar todo

foreach $num (@DB) {
        chomp($num);
        print "$i $num\n";
        &create;
}


estoy asignando lo de @DB; que es el archivo donde tengo los numeros, a la variable $num.

El archivo de los numeros no tiene formato son numeros de 10 caracteres:
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX

cyberalph
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-07-26 10:42 @487

Notapor explorer » 2006-07-26 15:30 @687

Supongamos que tenemos este código:
Código: Seleccionar todo
    1 #!/usr/bin/perl
    2 use warnings;
    3
    4 @DB = <DATA>;
    5 $num = "\n";
    6 $i = 0;
    7 $sips = q(@fonet-outgoing);
    8
    9 foreach $num ( @DB ) {
   10     chomp($num);
   11     print "$i $num\n";
   12     $i++;
   13     &create;
   14 }
   15
   16 sub create {
   17     print "Channel: Sip/01$num$sips\n";
   18 }
   19
   20 __DATA__
   21 123456789
   22 234567891
   23 345678912
   24 456789123
   25 567891234
Al ejecutarlo sale:
Código: Seleccionar todo
0 123456789
Channel: Sip/01123456789@fonet-outgoing
1 234567891
Channel: Sip/01234567891@fonet-outgoing
2 345678912
Channel: Sip/01345678912@fonet-outgoing
3 456789123
Channel: Sip/01456789123@fonet-outgoing
4 567891234
Channel: Sip/01567891234@fonet-outgoing
Así sí funciona, pero si declaramos a la variable $num como local:
Código: Seleccionar todo
    5 my $num = "\n";
entonces sale esto:
Código: Seleccionar todo
0 123456789
Channel: Sip/01
@fonet-outgoing
1 234567891
Channel: Sip/01
@fonet-outgoing
2 345678912
Channel: Sip/01
@fonet-outgoing
3 456789123
Channel: Sip/01
@fonet-outgoing
4 567891234
Channel: Sip/01
@fonet-outgoing
¿Por qué pasa esto si hemos definido a la variable $num en un ámbito global, al principio del programa?

La explicación está en el foreach. En ese momento, foreach está creando una nueva variable $num, independiente de la que hay en la línea 5. Le adjudicamos un valor y luego llamamos a la función create, pero la función sigue accediendo a la variable $num primera. No tiene ningún acceso a la variable $num creada dentro del foreach.

Esto no es exáctamente lo que te está pasando, pero podría formar parte del problema.

Una forma de arreglarlo:
Código: Seleccionar todo
    1 #!/usr/bin/perl
    2 use warnings;
    3
    4 @DB = <DATA>;
    5 $i = 0;
    6 $sips = q(@fonet-outgoing);
    7
    8 foreach $num ( @DB ) {
    9     chomp($num);
   10     print "$i $num\n";
   11     $i++;
   12     &create($num);
   13 }
   14
   15 sub create {
   16     $numero = $_[0];
   17     print "Channel: Sip/01$numero$sips\n";
   18 }
   19
   20 __DATA__
   21 123456789
   22 234567891
   23 345678912
   24 456789123
   25 567891234
Lo que hacemos es pasarle a la función create el valor de $num y dentro de ella la recogemos en la variable $numero. Así nos aseguramos que es el valor correcto el que estamos usando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor cyberalph » 2006-07-26 17:57 @789

Pues caso muy raro, probe las opciones que me diste y salio el mismo resultado. :x
Logre resolverlo sacando un substring de la cadena de caracteres de $num.
Saque solo los 10 digitos y eso fue lo que imprimi :P
Código: Seleccionar todo
foreach $num2 (@DB) {
        $otra=$num2;
        $otra2=substr($otra,0,10);
        $num=$otra2;
        print "$i $num\n";

        &create($num);
}


Gracias muchas Gracias por tu ayuda amigo.
Voy a seguir checando esta chunche tiene que jalar como estaba o con las opciones que me diste.

Saludos.
cyberalph
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2006-07-26 10:42 @487


Volver a Básico

¿Quién está conectado?

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

cron