Vie Nov 07, 2008 7:19 am
|
 |
jmdelcampo
Perlero Nuevo

|
Registrado: 24 Nov 2006
Mensajes: 21
|
|
| Seleccionar primer campo |
|
|
Hola,
Tengo la siguiente línea
| Perl: | KPIS='([^\t]*)\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t([^\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3 |
y necesito obtener por un lado KPI y por otro '([^\t]*)\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t([^\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3
Para ello empleo la siguiente línea de código:
| Perl: | my ($field, $value) = split(/\=/, $_); |
Evidentemente KPI lo asigna bien, pero el resto de la expresión llega hasta $DATE.
¿Cómo podría resolver el problema?
Saludos y gracias |
|
|
|
Vie Nov 07, 2008 7:58 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
|
|
|
|
|
Dile a split() que parta solo en dos cachos:
| Perl: | my ($field, $value) = split('=', $_, 2); |
|
|
Mar Nov 11, 2008 12:22 pm
|
 |
jmdelcampo
Perlero Nuevo

|
Registrado: 24 Nov 2006
Mensajes: 21
|
|
|
|
|
Gracias explorer,
Después de separar la linea correctamente con la solución que me aportaste, cuando hago un warn() de $value obtengo:
'\'([^\\t]*)\\t[^\\t]*\\t([^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3'\'
es decir, que por cada carácter especial lo duplica.
¿Como podría escaparlo de forma que lo asigne correctamente?
Saludos y gracias
jmdelcampo |
|
Mar Nov 11, 2008 12:33 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
|
|
|
|
|
| Pues a mí eso no me sale... quiero decir que yo lo pruebo en mi máquina y no me duplican los caracteres... |
|

Mie Nov 12, 2008 1:22 am
|
 |
jmdelcampo
Perlero Nuevo

|
Registrado: 24 Nov 2006
Mensajes: 21
|
|
|
|
|
Explico un poco mejor el proceso:
Tengo un fichero de configuración del cual voy leyendo y que tiene la siguiente estructura
| Código: |
[paths]
INDEX=1
DIR_BBDD=../bbdd/cae/bbdd_*
KPIS='([^\t]*)\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t([^\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3
[TR]
DIR_BBDD=../bbdd/tr
COMANDO='"ssh logcollector cat /Informatica/ftp_core_r9/logs/profiles/profiles/*.profile | nawk -f awk.file | zip > ../bbdd/tr/bbdd_terminales.gz"'
[PORTAL]
DIR_BBDD=../bbdd/portal
COMANDO='"scp logcollector:/Informatica/ftp_core_r9/logs/portal/currentProject_".$report{fecha_file_remoto}."* ../bbdd/portal/currentProject.portal.gz"' |
Mediante el siguiente código voy creando un array de hashes.
| Perl: | while(<FH>){
next if (m/ (^\ #)/);
if (m/^\ [(\S+ )\ ]/ ){
$name= $ 1;
}
elsif(m/^ (\S+ )/ ){
my ($field, $value) = split('=', $_, 2);
chop ($value);
$param-> {$field }= $value;
}
else {
next if ($name eq "");
push(@ {$components}, { name => $name, param => $param});
$name= $param= undef;
}
} |
Cuando ejecuto el proceso obtengo que algunos casos en que aparecen caracteres:
| Código: |
{
'name' => 'paths',
'param' => {
'INDEX' => '1',
'KPIS' => '\'([^\\t]*)\\t[^\\t]*\\t([^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)\',$DATE=$1,$REQUEST=$2,$USER=$3',
'DIR_BBDD' => '../bbdd/cae/bbdd_*'
}
},
{
'name' => 'TR',
'param' => {
'COMANDO' => '\'"ssh logcollector cat /Informatica/ftp_core_r9/logs/profiles/profiles/*.profile | nawk -f awk.file | zip > ../bbdd/tr/bbdd_terminales.gz"\'',
'DIR_BBDD' => '../bbdd/tr'
}
}, |
Espero haber aclarado un poco más el problema.
Saludos
jmdelcampo |
|

Mie Nov 12, 2008 7:57 am
|
 |
jmdelcampo
Perlero Nuevo

|
Registrado: 24 Nov 2006
Mensajes: 21
|
|
|
|
|
Hola de nuevo,
Creo que el error es porque al imprimir el contenido por medio del módulo Data::Dumper, no escapa esos caracteres.
Perdón por las molestias y gracias.
Saludos
Jmdelcampo |
|

Mie Nov 12, 2008 8:06 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
|
|
|
|
|
Prueba con esto:
| Perl: | #!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my $name;
my $param;
my $components;
open CONFIG, '<kk.txt' or die;
while (<CONFIG>){
next if /^\ #/;
if (m/^\ [(\S+ )\ ]/ ) {
$name= $ 1;
}
elsif (m/^ (\S+ )/ ) {
my ($field, $value) = split('=', $_, 2);
chop($value);
$param-> {$field} = $value;
}
else {
next if $name eq "";
push(@ {$components}, { name => $name, param => $param});
$name = $param = undef;
}
}
use Data:: Dumper;
print Dumper $components;
print $components-> [0]-> {param }-> {KPIS }, "\n";
__END__ | La salida es:
| Código: |
$VAR1 = [
{
'name' => 'paths',
'param' => {
'INDEX' => '1',
'KPIS' => '\'([^\\t]*)\\t[^\\t]*\\t([^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)\',$DATE=$1,$REQUEST=$2,$USER=$3',
'DIR_BBDD' => '../bbdd/cae/bbdd_*'
}
},
{
'name' => 'TR',
'param' => {
'COMANDO' => '\'"ssh logcollector cat /Informatica/ftp_core_r9/logs/profiles/profiles/*.profile | nawk -f awk.file | zip > ../bbdd/tr/bbdd_terminales.gz"\'',
'DIR_BBDD' => '../bbdd/tr'
}
}
];
'([^\t]*)\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t([^\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3 |
Como ves, sí que se almacena el valor correcto. Otra cosa es lo que te cuenta Data::Dumper. Piensa que Data::Dumper, cuando muestra '\\t' te quiere decir que está guardando dos caracteres: el '\' y el 't'. Si solo mostrara '\t' podríamos confundirlo con un único carácter, el del tabulador horizontal.
Al hacer el último print, sale el valor real.
Otra cosa... para leer ficheros de configuración de ese tipo, ese problema ya está resuelto
| Perl: | #!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Config:: IniFiles;
my $cfg = Config:: IniFiles-> new( -file => 'kk.txt' );
foreach my $seccion ($cfg-> Sections()) {
print "$seccion\n";
foreach my $parametro ($cfg-> Parameters($seccion)) {
print "\t", $parametro, " = ", $cfg-> val($seccion, $parametro), "\n";
}
}
__END__ | La salida es:
| Código: |
paths
INDEX = 1
DIR_BBDD = ../bbdd/cae/bbdd_*
KPIS = '([^\t]*)\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t([^\t]*)',$DATE=$1,$REQUEST=$2,$USER=$3
TR
DIR_BBDD = ../bbdd/tr
COMANDO = '"ssh logcollector cat /Informatica/ftp_core_r9/logs/profiles/profiles/*.profile | nawk -f awk.file | zip > ../bbdd/tr/bbdd_terminales.gz"'
PORTAL
DIR_BBDD = ../bbdd/portal
COMANDO = '"scp logcollector:/Informatica/ftp_core_r9/logs/portal/currentProject_".$report{fecha_file_remoto}."* ../bbdd/portal/currentProject.portal.gz"' |
|
|

Powered by phpBB © 2001, 2005 phpBB Group
|