Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda en Perl

Estas en el tema de Ayuda en Perl en el foro de Programación General en Foros del Web. Hola a todos!! Este es mi primer post, espero que puedan ayudarme ( y algun dia yo ayudar a alguno). Bueno mi pegunta es la ...
  #1 (permalink)  
Antiguo 30/03/2009, 06:54
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Ayuda en Perl

Hola a todos!!

Este es mi primer post, espero que puedan ayudarme ( y algun dia yo ayudar a alguno).

Bueno mi pegunta es la siguiente.

como puedo poner el resultado de una variable $results en una matriz de dos dimensiones??

Yo intente algo asi (el signo arrobas lo escribiré puesto que como soy nueva no me permite escribir ese signo ok??))

while (<>) {
for($col = 0; $col < $numCols; $col++) { #line 55
push 'arrobas'rowMatrix, "0";
}
for($row = 0; $row < $numRows; $row++) { #line 58
push 'arrobas'resultat, [ 'arrobas'rowMatrix ];

print 'arrobas'rowMatrix ;
}
print "\n";
}


Pero no logro hacerlo funcionar, me sale

Use of uninitialized value in numeric it (<) at (nombre de mi documento).pl line 55, <> line 1.

Y lo mismo para la linea 58 (ambas marcadas en el ejemplo).

Bueno eso, espero alguien pueda ayudarme.

Saludos
  #2 (permalink)  
Antiguo 30/03/2009, 10:15
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Ayuda en Perl

Aquí podrán ayudarte mejor.

Tema transladado desde el foro de Programación.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 30/03/2009, 10:45
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Ayuda en Perl

Ah ok gracias por mover el tema, pense que aca era solo para perl en cgi y web.

Bueno espero que alguien pueda ayudarme por ahi. En realidad no se si fui muy clara, bueno cualquier cosa me avisan.

Gracias
  #4 (permalink)  
Antiguo 30/03/2009, 13:41
 
Fecha de Ingreso: febrero-2007
Mensajes: 163
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Ayuda en Perl

Inicializaste $numRows y $numCols?
  #5 (permalink)  
Antiguo 30/03/2009, 15:21
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Ayuda en Perl

si, si lo hice, al principio

Eso si que lo del codigo de matrices no esta en este codigo, pero se supone que lo pongo despues de mi variable $results

Código:
#!/usr/bin/perl -w

use strict;

#declaracion de variables
my ($file, $data, $fastaHeader, $nameSeq, $Seq, $cpt, $substitute, $resultat, $fileName, @data, @substitute, $col, $numCols, @rowMatrix,@matrix, $numRows, $row, @resultat, $rowMatrix );
#fonction pour effacer les ancien fichier results que se stocke dans un document txt
sub deleteResults {
        $file="Results.txt";
        unlink ($file);
}

#fonction pour ouvrir le fichier txt
sub openFile {
        open FD, "$fileName" or die "File not found\n";
        @data=<FD>;
        close FD;
}

#fonction pour ecrir dand mon fichier texte le nom de la sequence
sub changeData {
        foreach $data (@data) { #pour un valeur de @data le garde dans $data
                if ($data =~ /(>.*)/) { #si debute avec >, il prend le signe et tout ce que il y a derrier
                        $fastaHeader=$1; #garder dans ma variable $fastaHeader
                        print $fastaHeader;#print dans la console
                        open (FH, ">>Results.txt"); #creer le fichier result, si il n'exsite pas (ça depend de la fonction deleteResult)
                        print FH $fastaHeader;#print dans le fichier
                        close FH;
                }
                if ($data=~ />(.*)/) { # ici je prend le titre sans > pour l'afficher dans mon fichier txt dans la position de sequences
                        $nameSeq=$1;
                }
                if ($data =~ /([atgc-]*)/) { #je cherche les sequences
                        $Seq=$1; 
                        print "$Seq\t"; #print dans la console
                        open (FH, ">>Results.txt");#ecrit dans le fichier results,
                        print FH "$Seq\t"; #print les sequences dans le fichier et le metre desous le titre
                        close FH;
                }
               
                $cpt=0;# compteur pour les sequences inicialise a cero
                @substitute=split(//, $Seq);#je prend $seq et je le split dans mon tableau $substitute, les // serve pour prendre que les sequences et pas des autres signes
                foreach $substitute (@substitute){ #pour chaque element $substitute du tableau @substitute...
                        if ($substitute =~ /([atgc])/) { #si cet element correspond a un atgc...
                                $cpt+=1; #je comence mon compteur a partir de 1 et les suivant 1+1=2+1=3+1...
                                $resultat=$nameSeq."-".$cpt."; "; #mon resultat = nom de la sequence+un tiré+le compteur+";" comme ça "sequence1-1;"
                        }
                        else {
                                if ($substitute =~ /([-])/) { #alors si trouve un gap
                                        $resultat=$nameSeq."-{".$cpt."-".($cpt+1)."}; "; #mon resultat = nom sequence+un tiré+(compteur+tiré+competeur+1)+";".
                                }       
                        }
                       
                        print $resultat;
                        open (FH, ">>Results.txt");# ecrit dans le fichier resultat les $resultat
                        print FH "$resultat\t"; #afiche dans le fichier texte
                        close FH;
                }
                print "\n";#ceci c'est pour afichier la deuxime sequence a la deuxieme ligne apres avoir fait la deuxieme boucle
                open (FH, ">>Results.txt");
                print FH "\n";
                close FH;
        }
       
}              
       
       
&deleteResults();

$fileName="Alignement1.txt";
&openFile();
&changeData();
  #6 (permalink)  
Antiguo 30/03/2009, 17:59
 
Fecha de Ingreso: febrero-2007
Mensajes: 163
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Ayuda en Perl

Una cosa, en el segundo push deberias ponerlo asi push @resultat, [\@rowMatrix ] asi almacenas la referencia a la matriz que acabas de llenar y no te crea una nueva, despues accedes al valor de esta forma $resultat[0]->[0] o $$resultat[0][0].
  #7 (permalink)  
Antiguo 31/03/2009, 09:27
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Ayuda en Perl

Cuando hablas de acceder al valor ... hablas de poner:

print $resultat[0]->[0]; ?????


Hice lo que dices pero me sale errores aun, mmmm
  #8 (permalink)  
Antiguo 01/04/2009, 02:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Ayuda en Perl

Bueno ya resolvi mi problema, parti por otro lado, ya estaba muy desordenado y complicado.

Gracias!!!!
  #9 (permalink)  
Antiguo 01/04/2009, 02:49
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Ayuda en Perl

Bueno ya resolvi mi problema, parti por otro lado, ya estaba muy desordenado y complicado.

Gracias!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:27.