Jump to content

array bidimensionales en perl


Recommended Posts

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 como

5 6

5 6

5 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 by metalsew_135
Link to comment
Share on other sites

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 by rob_loser
Link to comment
Share on other sites

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 :notonto:

 

 

 

Saludos :kitt:

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...