metalsew_135 Posted December 4, 2011 Report Share Posted December 4, 2011 (edited) hola, estoy haciendo un script en perl donde en cada iteracion obtengo un arreglo parecido a como muestro a continuacion (el arreglo se llama datos, osea seria @datos) [{0} {.} {1} { } {0} {.} {2} ] al imprimir esto se ve como 0.1 0.2 luego en la siguiente iteracion @datos seria algo como esto [{0} {.} {3} { } {0} {.} {4} ] y al imprimir esto se ve como 0.3 0.4. y asi sucesivamente. estos datos los obtengo a partir de un archivo y yo los dejo asi porque necesito trabajar con cada caracter, pero necesito pasarlo a un arreglo de 2 dimensiones. estuve buscando y se me ocurrio crear un arreglo dimensional que no tuviese nada, onda @aux1="";@aux2="";@arreglo_bidimensional=(\@aux1,\@aux2); y en cada iteracion de las que les hable al principio de este post le hago esto push(@array_bidimensional,\@datos); y wuala, me crea la matriz de 2 dimensiones, pero me almacena en todas las posiciones la ultima linea leida. (ej si la ultima linea leida fue [{0} {.} {5} { } {0} {.} {6} ] la matriz me la genera como5 65 65 6) mi codigo es este #pasare el arreglo a un arreglo bidimensional para poder trabajar con cada numero por separado @array_bidimensional=(\@aux1,\@aux2); for($i=($empieza_datos);$i<scalar(@contenido_arff);$i++) { $linea=@contenido_arff[$i]; chop ($linea); @datos=split("",$linea); #reemplazare las "," por espacios en blanco for ($j=0;$j<scalar(@datos);$j++) { if($datos[$j] eq ",") { $datos[$j]=" "; } } push(@array_bidimensional,\@datos); } que puede estar fallando, ojala alguien me pueda dar una pista que ando perdido :/ Edited December 4, 2011 by metalsew_135 Link to comment Share on other sites More sharing options...
AshWilliams Posted December 4, 2011 Report Share Posted December 4, 2011 (edited) Te expongo los sgtes ejemplos: # Simple assignment of an array of arrays my @AoA = ([1,2,3], ['John', 'Joe', 'Ib'], ['Eat', 2]); print $AoA[1][2]; # Imprime Ib , pues recuerda que los elementos en un array comienzan desde cero # Suppose you want to read a matrix in from a file while (defined (my $line = <IN>)) { my @tmp = split(' ', $line); push(@AoA, [@tmp]); } # Add anonumous array (row) to @AoA # Este creo que tiene lo que tu necesitas hacer # Suppose you want to add a column to a matrix for (my $i = 0; $i <= $#AoA; $i++) { push(@{$AoA[$i]}, "Some value"); } # You could also just assign the values for (my $x = 0; $x <= 10; $x++) { for (my $y = 0; $y <= 10; $y++) { $AoA[$x][$y] = &func($x, $y); } } # Printing/accessing the AoA for (my $x = 0; $x <= $#AoA; $x++) { for (my $y = 0; $y <= $#{$AoA[$x]}; $y++) { print "At X=$x, Y=$y is ", $AoA[$x][$y], "n"; } } No son la panacea, pero te ayudarán a comprender mejor el funcionamiento de una matriz. Y un enlace de interés que tambien hace algo muy próximo a lo que necesitas(el ultimo ejercicio para ser más exactos) http://www.merelo.net/tutoperl/tutoperl7.html Saludos :kitt: Edited December 4, 2011 by rob_loser Link to comment Share on other sites More sharing options...
metalsew_135 Posted December 5, 2011 Author Report Share Posted December 5, 2011 hice un par de modificaciones, pero aun nada :/ alguien puede dejarme un ejemplo como leer numeros de 1 archivo de texto y almacenarlo en una matriz bidimensional e imprimirlo? x ejemplo archivo de texto 1 2 3 4 5 6 7 8 9 Link to comment Share on other sites More sharing options...
AshWilliams Posted December 5, 2011 Report Share Posted December 5, 2011 OPEN (DATOS,"/home/misdatos.txt"); WHILE (<DATOS>) { chomp; print "Renglon: $_ " } Ahi tendrías que hacer una variación al código, que sería separar las cifras del renglón con el código que tienes y luego guardar en el arreglo bidimensional....con esto ya tienes un 75% de tu tarea lista Saludos :kitt: Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now