Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problemas con espacios en blanco en parametros de Perl

Estas en el tema de Problemas con espacios en blanco en parametros de Perl en el foro de Programación General en Foros del Web. Estoy trabajando con un script que migra casillas y mensajes de IMAP El programa toma de un fichero de texto usuario.txt que contiene: "usuario1 password1 ...
  #1 (permalink)  
Antiguo 04/02/2015, 07:16
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 9 años, 8 meses
Puntos: 0
Problemas con espacios en blanco en parametros de Perl

Estoy trabajando con un script que migra casillas y mensajes de IMAP

El programa toma de un fichero de texto usuario.txt que contiene:
"usuario1 password1 usuario2 password2" (sin comillas y reemplazando usuario1 y2 por el username y als contaseñas correspondientes"

El sistema funciona bien

El codigo de la funcion:

Código:
sub getUserList {
my $users = shift;

   unless ( open(F, "<$userList") ) {
      print "Error opening $userList: $!\n";
      exit;
   }
   while ( <F> ) {
      next if /#/;
      chomp;
      $sourceUser=$sourcePwd=$destUser=$destPwd='';
      s/\s+/ /g;
      /(.+)\s+(.+)\s+(.+)\s+(.+)/;
      /(.+)[\s+|:](.+)[\s+|:](.+)[\s+i|:](.+)/;
      $sourceUser = $1;
      $sourcePwd  = $2;
      $destUser   = $3;
      $destPwd    = $4;
      $destUser = $sourceUser unless $destUser;
      $destPwd  = $sourcePwd unless $destPwd;
      push( @$users, "$sourceUser $sourcePwd $destUser $destPwd" );
   }
   close F;
}
El problema que estoy teniendo es que si la contraseña tiene un espacio en blanco en el medio entonces se "corta"

Eso es por que el contenido de fichero.txt es usado como parametro y son 4 parametros, no se como escribir la contraselña en ese fichero de texto para que se escape el espacio en blanco y lo tome como parte del parametro.

Probe escribir usuario1 \password1 con espacios\ usuario2 password2 pero no me funciona, proba con comillas simples y dobles y tamopoco.

Alguna idea?
  #2 (permalink)  
Antiguo 04/02/2015, 08:30
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: Problemas con espacios en blanco en parametros de Perl

Si la contraseña puede tener un espacio en blanco, que es indistinguible de los espacios en blanco que hacen de delimitadores, no es posible resolverlo (si no hay más pistas, claro).

La solución es cambiar de delimitadores, con un carácter que sepamos que no se usará en ningún sitio. Por ejemplo, '|' y ';':

usuario1;password1|usuario2;password2

Si pones las contraseñas entre ciertos delimitadores, sí que puedes extraerlos. Por ejemplo, si los pones entre comillas, puedes construir una expresión regular que saque los dos:
Código PHP:
#!/usr/bin/perl
use v5.14;

my $_ "usuario1'password'usuario2'contraseña con espacios'usuario3'otra contraseña'";

while ( /(
w+)'(.+?)'/g) {

    
say "[$1][$2]";


Sale:
Código:
[usuario1][password]
[usuario2][contraseña con espacios]
[usuario3][otra contraseña]
__________________
JF^D Perl Programming en Español

Última edición por jferrero; 04/02/2015 a las 08:51

Etiquetas: blanco, espacios, parametros, perl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:24.