Andrej Kastrin schreef: > I need to re-sort a set of data. I think that the below example is > self explained; so which Perl structure should I use to handle this > dataset? > > Thanks in advance for any suggestion, Andre > > > 2;John;Apple;Banana > 3;Andrew;Pear;Apple;Melon;Orange > 8;Susan;Pear;Melon > > 2;John;Apple > 2;John;Banana > 3;Andrew;Pear > 3;Andrew;Apple > 3;Andrew;Melon > 3;Andrew;Orange > 8;Susan;Pear > 8;Susan;Melon
This looks like a normalization step. I assume the first shape is in a csv-like-file? See `perldoc perldsc`. The Persons could be put in their own table: 2 => John, 3 => Andrew, etc. The Fruits too, it all depends on how deep you want (or need) to go. The data structure for your 2nd shape could be an array of arrays. #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @fruit = qw( Apple Banana Pear Melon Orange ); my @person = (); $person[ 2 ] = 'John'; $person[ 3 ] = 'Andrew'; $person[ 8 ] = 'Susan'; my @data = (); $data[ 0 ] = [ $person[2], [ $fruit[0] , $fruit[1] ] ]; $data[ 1 ] = [ $person[3], [ $fruit[2] , $fruit[0] , $fruit[3] , $fruit[4] ] ]; $data[ 2 ] = [ $person[8], [ $fruit[2] , $fruit[4] ] ]; print Data::Dumper->Dump( [ [EMAIL PROTECTED] ] , [ qw( *data ) ] ); my @new = (); $new[0] = [ 2, 0 ]; $new[1] = [ 2, 1 ]; $new[2] = [ 3, 2 ]; # etc. print Data::Dumper->Dump( [ map { [ $$_[0] , $person[$$_[0]] , $fruit [$$_[1]] ] } @new ] , [ qw( *new ) ] ); (I couldn't get that last Dump right, it says 'VAR2' where it should continue 'new'.) Do you need to answer questions like: What Fruit does Andrew have? Which Persons have a Pear? For that you could use a key on Person, and a key on Fruit, which means Hashes. The best structure is the one that produces your answers. -- Affijn, Ruud "Gewoon is een tijger." -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>