• Publicidad

Problemas y problemas con Linux y CGI

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Re: Problemas y problemas con Linux y CGI

Notapor explorer » 2012-02-09 16:27 @727

Bueno, de aquí ya sabemos por qué solo procesa la última secuencia del fichero.

Resulta que en la línea 15 haces un chomp(), pero como la combinación de fin de línea es distinta de la del sistema operativo en donde estás, no consigue quitar esos caracteres, así que quedan dentro de %es_interesante. Excepto la última secuencia de JGI_list2.txt, ya que no tiene esos finales.

La línea 46, entonces, solo coincide con la última secuencia.

La solución pasa por un filtrado eficaz de estos ficheros.

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

Publicidad

Re: Problemas y problemas con Linux y CGI

Notapor Alfumao » 2012-02-09 16:48 @741

:shock: :shock: :shock:

Muchas gracias por esta investigación explorer... yo casi no sé entenderla, así que no habría podido saber esto que ya has descubierto ni en mil años.

Te adjuntaría el FASTA original, pero es un pelín largo y no me deja (son casi 5 megas).
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Problemas y problemas con Linux y CGI

Notapor explorer » 2012-02-09 17:12 @758

Bueno, esta es una solución basada en tu versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my %es_interesante;
  7.  
  8. # Lectura de la lista de secuencias
  9. print "Enter your list name:\n";
  10. my $entrada = <STDIN>;
  11. chomp $entrada;                             # nos aseguramos que leemos bien el nombre del archivo
  12.  
  13. open(SEQ, $entrada) or die ("ERROR: $!\n");
  14.  
  15. while (my $linea = <SEQ>) {
  16.     $linea =~ s/^(?:\xEF\xBB\xBF|\xFE\xFF|\xFF\xFE)// if $. == 1;       # quitar el BOM en la primera línea
  17.     $linea =~ s/[\012\015]+$//;                                         # quitamos los finales de línea
  18.  
  19.     $es_interesante{$linea} = 1;            # la almacenamos en la memoria asociativa
  20. }
  21.  
  22. close SEQ;
  23.  
  24. use Data::Dumper::Simple;
  25. print Dumper %es_interesante;               # comprobamos lo leído
  26.  
  27. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Hemos sustituido el chomp() por una expresión regular, que nos garantiza la eliminación de cualquier combinación de caracteres de final de línea (incluso de Mac). También quitamos el BOM de la primera línea.

El Dumper nos muestra que ahora sale correcta la estructura que queremos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. %es_interesante = (
  2.                     'Agabi_varbisH97_2_121121' => 1,
  3.                     'Agabi_varbisH97_2_59298' => 1,
  4.                     'Agabi_varbisH97_2_71341' => 1,
  5.                     'Agabi_varbisH97_2_118433' => 1,
  6.                     'Agabi_varbisH97_2_194831' => 1
  7.                   );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
en lugar del estropicio que teníamos antes:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~/Documentos/Desarrollo/alfumao> perl code_29648.pl
  2. Enter your list name:
  3. JGI_list2.txt
  4. %es_interesante = (
  5.                     'Agabi_varbisH97_2_136529' => 1,
  6. ' => 1,             'Agabi_varbisH97_2_181811
  7. ' => 1,             'Agabi_varbisH97_2_205367
  8. ' => 1,             'Agabi_varbisH97_2_80166
  9. ' => 1,             'Agabi_varbisH97_2_62215
  10. ' => 1,             'Agabi_varbisH97_2_113535
  11. ' => 1              'Agabi_varbisH97_2_189137
  12.                   );
  13.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Observa cómo los caracteres finales de línea, al final de los nombres de secuencia, hacen desplazar las comillas al borde izquierdo, excepto en el caso de la última $linea leída, ya que JGI_list2.txt no tiene esos caracteres en esa línea.

Esta es otra versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5. use File::Slurp;
  6.  
  7. my %es_interesante;
  8.  
  9. # Lectura de la lista de secuencias
  10. print "Enter your list name:\n";
  11. my $entrada = <STDIN>;
  12. chomp $entrada;
  13.  
  14. my $fichero = read_file($entrada);                      # Leemos el fichero entero
  15.  
  16. $fichero =~ s/^(?:\xEF\xBB\xBF|\xFE\xFF|\xFF\xFE)//;    # Quitar el BOM
  17.  
  18. my @lineas = split /[\012\015]+/, $fichero;             # Separar las líneas, quitando los finales
  19.  
  20. for my $linea (@lineas) {
  21.     $es_interesante{$linea} = 1;                        # la almacenamos en la memoria asociativa
  22. }
  23.  
  24. use Data::Dumper::Simple;
  25. print Dumper %es_interesante;
  26.  
  27. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
El proceso es ligeramente distinto: haces todo el procesamiento en memoria, leyendo el archivo completamente, y usando split() para hacer la división de las líneas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas y problemas con Linux y CGI

Notapor Alfumao » 2012-02-10 05:16 @261

Un millón de gracias explorer, voy a ponerlo en práctica e incorporar los cambios en los cgi y os cuento qué tal ha ido.

:D

-> En Windows lee todas las listas (la creada en Linux y utilizada en Windows antes no la leía).

Mañana toca día Linux y os cuento qué tal me ha funcionado allí, pero las expectativas son muy buenas.
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Problemas y problemas con Linux y CGI

Notapor Alfumao » 2012-02-14 04:17 @220

Gracias una vez más, explorer, el cgi va como la seda, ahora...
:wink:

PD. Sigo intentando arreglar lo de las tildes en Linux, ¡ja,ja,ja!
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Anterior

Volver a Web

¿Quién está conectado?

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