Tengo un problema con un programa que estoy intentando hacer.
Tengo dos cadenas diferentes de ADN en dos arrays. Quiero recorrerlos para contar cuántas posiciones tienen la misma base, en cuántas hay transversiones y en cuántas, transiciones.
Al principio pretendí hacer un foreach() con los dos arrays, pero no se puede, ¿verdad?.
Ahora he hecho un foreach() recorriendo uno de los arrays y otro dentro recorriendo el otro array. Claramente está mal porque me da un número que no tiene sentido. Dejo aquí lo que tengo hecho, porque la verdad es que no sé seguir. Muchas gracias.
Using perl Syntax Highlighting
- #!/usr/bin/perl
- #abrimos delfin.txt y lo metemos en @delfin
- print "Introduzca primer archivo: \n";
- $file1 = <STDIN>;
- chomp $file1;
- unless ( open( DELFIN, $file1 ) ) {
- print "No se puede abrir el archivo.\n";
- exit;
- }
- @delfin = <DELFIN>;
- close DELFIN;
- $file1 = join( '', @delfin ); #pasamos secuencia a una cadena.
- $file1 =~ s/\s//g;
- @delfin = split( '', $file1 );
- #abrimos foca.txt y lo metemos en @foca
- print "Introduzca segundo archivo: \n";
- $file2 = <STDIN>;
- chomp $file2;
- unless ( open( FOCA, $file2 ) ) {
- print "No se puede abrir el archivo.\n";
- exit;
- }
- @foca = <FOCA>;
- close FOCA;
- $file2 = join( '', @foca );
- $file2 =~ s/\s//g;
- @foca = split( '', $file2 );
- print "Primer archivo:\n", "@delfin\n";
- print "Segundo archivo:\n", "@foca\n";
- $count = 0;
- foreach $based (@delfin) {
- foreach $basef (@foca) {
- if ( $based eq $basef ) {
- ++$count;
- }
- }
- }
- print "$count\n";
- #consigo que cuente pero me da un numero demasiado grande.Problema con el bucle foreach seguro.Creo que compara la primera base de @delfin con cada una de las de @foca
- $countv = 0;
- foreach $based (@delfin) {
- foreach $basef (@foca) {
- if ( $based eq 'a' ) {
- if ( $basef eq 'g' ) {
- ++$countv;
- }
- }
- if ( $based eq 'g' ) {
- if ( $basef eq 'a' ) {
- ++$countv;
- }
- }
- if ( $based eq 't' ) {
- if ( $basef eq 'c' ) {
- ++$countv;
- }
- }
- if ( $based eq 'c' ) {
- if ( $basef eq 't' ) {
- ++$countv;
- }
- }
- }
- }
- print "$countv\n";
- $counts = 0;
- foreach $based (@delfin) {
- foreach $basef (@foca) {
- if ( $based eq 'a' || 'g' ) {
- if ( $basef eq 'c' || 't' ) {
- ++$counts;
- }
- }
- if ( $based eq 'c' || 't' ) {
- if ( $basef eq 'a' || 'g' ) {
- ++$counts;
- }
- }
- }
- }
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4