• Publicidad

Operaciones varias en un archivo

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

Operaciones varias en un archivo

Notapor Marielago » 2011-01-14 08:52 @411

¡Hola! Soy bastante nueva en Perl y la verdad no me manejo mucho y tengo un problema. No sé si alguien tiene una idea para ayudarme.

El asunto es que tengo un archivo de este tipo: (las columnas dos y tres son coordenadas)
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
nombre1  1   10
nombre1  25  30
nombre1  45  76
nombre2  12  23
nombre2  38  72
nombre2 145  158
nombre2 163  181
nombre2 176  184
nombre3  26   38
nombre3  42   75
nombre4  62   89
nombre4 104  195
nombre4 132  158
nombre4 165  201
nombre5 10    45
nombre5 163   189
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y necesito que si la línea i con la siguiente tienen el mismo nombre y la diferencia entre las columnas 2 de la línea i y la siguiente es menor que 50 contabilice y guarde el nombre y columna 2 de i y continúe comparando hasta que la diferencia sea mayor que 50 o los nombres sean distintos y guarde la columna 3 de la última linea en la que se cumplían las condiciones.

Para este caso una salida de este tipo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
nombre1  1  76  n=3
nombre2 12  72  n=2
nombre2 145 184 n=3
nombre4 104 201 n=3
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Marielago
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2011-01-14 08:26 @393

Publicidad

Re: Operaciones varias en un archivo

Notapor explorer » 2011-01-14 09:01 @417

Bienvenido a los foros de Perl en Español, Marielago.

Parece un problema sencillo. ¿Tienes algún código que hayas probado? Publícalo aquí y te diremos donde pueden estar los fallos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Operaciones varias en un archivo :S

Notapor Marielago » 2011-01-14 09:14 @426

La verdad aún no se me ocurre cómo hacerlo, se me imagina que debo separar el archivo en líneas y en cadenas para las comparaciones pero, lo que sé es muy básico :S
Marielago
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2011-01-14 08:26 @393

Re: Operaciones varias en un archivo

Notapor explorer » 2011-01-14 12:19 @554

Pero algo sabrás de abrir un fichero, leerlo por líneas, usar split() para sacar los campos de cada línea...

Otra cosa es planificar la jugada para comparar una línea con la siguiente, pero eso se arregla usando una variable que vaya almacenando el valor anterior, dentro del bucle de lectura de líneas...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Operaciones varias en un archivo

Notapor Marielago » 2011-01-14 12:23 @557

Si hago un arreglo bidimensional para recorrer y comparar los campos y las líneas, ¿estará bien o hay alguna otra manera?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open FICHERO, "<Coord.finales" or die "ERROR: No encuentra archivo\n";
  2. my @lineas = <FICHERO>        or die "ERROR, no se puede leer\n";
  3. close FICHERO              or die "ERROR: No puedo cerrar\n";
  4.  
  5. foreach ( my @lineas ) {
  6.   push  my @array, [ split /\t/ ];
  7. }
  8. open(OUT,"+>motivos");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Eso está bien?
Marielago
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2011-01-14 08:26 @393

Re: Operaciones varias en un archivo

Notapor explorer » 2011-01-15 11:01 @500

Sí, vas bien. Con eso vas leyendo las @lineas y creando un @array por cada línea (¿hay tabuladores entre los campos?).

Lo que te queda es pensar qué debe ocurrir con cada línea que estás tratando, que es seguir el guión que has publicado al principio.

Y yo abriría el fichero "motivos" antes de empezar a tratar las líneas, porque supongo que sí voy a escribir en él mientras las estoy procesando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Operaciones varias en un archivo

Notapor creating021 » 2011-01-15 12:05 @545

Un poco de ayuda (no muy buena porque no he probado el código :| ) con el código base que ya tienes, que por cierto hay algunos errores.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use diagnostics;
  3. open FICHERO, "<Coord.finales" or die "ERROR: No encuentra archivo\n";
  4. my @lineas = <FICHERO>        or die "ERROR, no se puede leer\n";
  5. close FICHERO              or die "ERROR: No puedo cerrar\n";
  6.  
  7. # Aquí guardaremos el "ID" que usamos antes
  8. # y los valores del ID anterior, pero por ahora
  9. # guardamos los datos de la 1ª línea
  10. my ($anterior, $val1, $val2) = split /\t/, shift @lineas;
  11. # este es el número de IDs
  12. my $n;
  13. open OUT, "+>motivos";
  14. foreach my $linea ( @lineas ) {
  15.   # Espero que sí estén separados por tab.
  16.   my @contenido = split /\t/, $linea;
  17.   if ( $anterior eq $contenido[0] ) {
  18.       $n++;
  19.       #...
  20.   }
  21.   #...
  22. }
  23. close OUT;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

con eso haces el código :wink:
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Operaciones varias en un archivo

Notapor explorer » 2011-01-15 19:24 @850

¿Por qué en la salida no aparece

nombre3 26 75

?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Operaciones varias en un archivo

Notapor Marielago » 2011-01-16 22:00 @958

creating021: gracias lo probaré, :D
explorer: eso fue un error de tipeo, nada más. Gracias a ti también por tu tiempo :D
Muy amables todos por este foro.
Marielago
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2011-01-14 08:26 @393

Re: Operaciones varias en un archivo

Notapor explorer » 2011-01-16 22:05 @962

Entonces, ¿cuál es la salida correcta?

Y me retracto de lo que dije en el primer mensaje: la solución no es obvia...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

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