• Publicidad

Partir cadenas con split "|"

¿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.

Partir cadenas con split "|"

Notapor alperez » 2015-11-30 07:03 @336

Hola.

Llevo un par de horas ya con esto y no veo solución. Estoy intentando separar dos cadenas con el siguiente formato:

/AS/EVENTSPRING/PARAM_SETTINGS/THRESHOLDS/PATROLAGENT/PATROLAGENT/PAWorkRateExecsMin|1,0 0 100 0 0 2,0 0 80 1 2 0,0 80 100 0 0 0

La separación la estoy haciendo en la "|" con el comando split() a dos variables. Pero el resultado que esperaba no me sale. El comando es el siguiente:

($nombre_variable,$datos)=split("|", $thresholds);

La salida:
El nombre de la variables es : /
El Dato es : A


No entiendo por qué me coge en la primera variable la '/' y en la segunda la 'A' en vez de en la primera: /AS/EVENTSPRING/PARAM_SETTINGS/THRESHOLDS/PATROLAGENT/PATROLAGENT/PAWorkRateExecsMin y en la segunda 1,0 0 100 0 0 2,0 0 80 1 2 0,0 80 100 0 0 0.

He probado en el split() con '' con "" con \\, y con ninguna funciona.

Saludos.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Publicidad

Re: Partir cadenas con split "|"

Notapor alperez » 2015-11-30 07:19 @347

Hola,

Ya lo he solucionado con las funciones index(), lenght() y substr().

Gracias.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Re: Partir cadenas con split "|"

Notapor explorer » 2015-11-30 08:01 @375

El problema es que '|' es un metacarácter especial para las expresiones regulares. Quiere decir que tiene un significado especial para los patrones.

Su significado es de "alternancia" entre dos valores posibles. Entonces, cuando ponemos el patrón "|" en un split(), lo que está haciendo, en realidad, es partir la cadena por cada carácter de la cadena. Por eso te daba ese resultado.

Entonces, lo que hay que hacer es "escapar" su significado. Se puede hacer con '\' o con '[]':
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $thresholds = '/AS/EVENTSPRING/PARAM_SETTINGS/THRESHOLDS/PATROLAGENT/PATROLAGENT/PAWorkRateExecsMin|1,0 0 100 0 0 2,0 0 80 1 2 0,0 80 100 0 0 0';
  2.  
  3. my ($nombre_variable,$datos) = split(/[|]/, $thresholds);
  4.  
  5. say "[$nombre_variable]"; # [/AS/EVENTSPRING/PARAM_SETTINGS/THRESHOLDS/PATROLAGENT/PATROLAGENT/PAWorkRateExecsMin]
  6. say "[$datos]";           # [1,0 0 100 0 0 2,0 0 80 1 2 0,0 80 100 0 0 0]
Coloreado en 0.002 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: 14476
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 1 invitado