Página 1 de 1

Array vacío

NotaPublicado: 2017-06-12 12:52 @577
por abejonejo
Hola, tengo un problema a ver si me lo solucionáis:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $blast1 = "tblastn -query Cas1Xan.fasta -db $genome -evalue 1e-5 -outfmt 6 -out cas1.out";
  2. system($blast1);
  3. print "--> Results for cas1:\n";
  4. my $file1 = "cas1.out";
  5. if ($file1 eq ""){
  6. "No results found\n";}
  7. else {
  8. open my $info1, $file1 or die "Could not open $file1";
  9. print "Gstart\tGend\tE-value\tChain\n";
  10. while(my $line = <$info1>){
  11. chomp $line;
  12. my @col = split("\t", $line);
  13. print "$col[8]\t$col[9]\t$col[10]\n";
  14. }
  15.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

El caso es que cas1.out es un fichero vacío y quiero que me salga No results found, pero, simplemente, se queda en blanco.

Si uso un archivo que tenga datos dentro sí que me sale el print() que yo quiero. ¿Soluciones, por favor?

Re: Array vacío

NotaPublicado: 2017-06-12 13:45 @614
por explorer
Bienvenido a los foros de Perl en Español, abejonejo.

¿No faltan unas dobles comillas al final de la línea 1?

Por favor, reedita tu mensaje (botón EDITAR dentro del mensaje), por si se trata de un error tipográfico.

Y en la línea 3 usas $info1, ¿no será $info?

Si el archivo que se abre está completamente vacío, el while() falla en la primera lectura/condición, así que ni siquiera llega a entrar en el bucle. Debes poner la comprobación de si está vacío o no antes del bucle. Puedes preguntar por el tamaño del archivo con el operador -s y, si es 0, ya sabes que está vacío.

Re: Array vacío

NotaPublicado: 2017-06-13 05:27 @268
por abejonejo
Lo primero, gracias por responder tan rápido.

En relación al fichero cas1.out le he hecho un cat y lo he abierto de forma manual y no aparece nada por eso digo que está vacío.

El operador -s no sé cómo se hace (llevo 3 días en esto).

Te copio y pego el comando entero, que antes los escribí a mano y por eso hay errores. He sacado el if del bucle, pero aún así me imprime lo que no quiero.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $blast1 = "tblastn -query Cas1Xan.fasta -db $genome -evalue 1e-5 -outfmt 6 -out cas1.out";
  2. system($blast1);
  3. print "--> Results for cas1:\n";
  4. my $file1 = "cas1.out";
  5. if ( $file1 eq "" ) {
  6.     "No results found\n";
  7. }
  8. else {
  9.     open my $info1, $file1 or die "Could not open $file1";
  10.     print "Gstart\tGend\tE-value\tChain\n";
  11.     while ( my $line = <$info1> ) {
  12.         chomp $line;
  13.         my @col = split( "\t", $line );
  14.         print "$col[8]\t$col[9]\t$col[10]\n";
  15.     }
  16. }
  17.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Lo que me devuelve es: Gstart Gend E-value Chain y nada más. Con otros ficheros sí que me da los valores de col que le pido (porque los tiene), y este, al estar vacío, quiero que me salga que no se han encontrado resultados, pero no lo consigo.

Re: Array vacío

NotaPublicado: 2017-06-13 11:24 @516
por explorer
Es muy sencillo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $file1 = "cas1.out";
  2.  
  3. if ( -s $file1 == 0 ) {         # el archivo $file1 está completamente vacío
  4.     "No results found\n";
  5. }
  6. else {
  7.     ...;
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Array vacío

NotaPublicado: 2017-06-14 06:01 @292
por abejonejo
Gracias, ya salió lo que quería.