Mie Jul 26, 2006 9:47 am
|
 |
cyberalph
Perlero Nuevo

|
Registrado: 26 Jul 2006
Mensajes: 5
|
|
| Imprimir un string que contenga @ |
|
|
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 @? |
|
|
|
Mie Jul 26, 2006 10:27 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
Eso es muy raro lo que te pasa...
Con cualquier de estas cuatro formas se puede imprimir:
| Código: |
$frase = "El correo electrónico de ana es ana\@felix.nnet";
$frase = 'El correo electrónico de ana es ana@felix.nnet';
$frase = qq(El correo electrónico de ana es ana\@felix.nnet);
$frase = q(El correo electrónico de ana es ana@felix.nnet); |
|
|

Mie Jul 26, 2006 11:35 am
|
 |
cyberalph
Perlero Nuevo

|
Registrado: 26 Jul 2006
Mensajes: 5
|
|
|
|
|
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: |
$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.
 |
|

Mie Jul 26, 2006 12:13 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
¡Ah!, ¡pero es que el retorno de carro no está en $sips!
¡Está en $num! |
|
Mie Jul 26, 2006 1:03 pm
|
 |
cyberalph
Perlero Nuevo

|
Registrado: 26 Jul 2006
Mensajes: 5
|
|
|
|
|
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. |
|
Mie Jul 26, 2006 1:12 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Mie Jul 26, 2006 1:22 pm
|
 |
cyberalph
Perlero Nuevo

|
Registrado: 26 Jul 2006
Mensajes: 5
|
|
|
|
|
De hecho asi lo estoy haciendo, este es el codigo donde lo hago:
| Código: |
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
|
|
|

Mie Jul 26, 2006 2:30 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
Supongamos que tenemos este código:
| Código: |
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: |
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: |
| 5 my $num = "\n"; |
entonces sale esto:
| Código: |
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: |
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. |
|

Mie Jul 26, 2006 4:57 pm
|
 |
cyberalph
Perlero Nuevo

|
Registrado: 26 Jul 2006
Mensajes: 5
|
|
|
|
|
Pues caso muy raro, probe las opciones que me diste y salio el mismo resultado.
Logre resolverlo sacando un substring de la cadena de caracteres de $num.
Saque solo los 10 digitos y eso fue lo que imprimi
| Código: |
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. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|