Deep_Plaid has asked for the wisdom of the Perl Monks concerning the following question:
This question really has two parts: 1) Parse data into a data structure that can 2) be put into a table that will have a different number of rows depending on the data input.
I can't figure out what to use exactly to organize the data, and the answer may be contingent on how the second part is solved (building of the table). I know a hash won't work because I will have rows of data with "keys" that are duplicated, and that have multiple values. So I maybe I need a multidimensional array? Hopefully my code example below will make it more clear on what I am trying to do. I will be importing data from a file that has data structured as shown in the $file variable (<version number> <environment> <date>). I want to put this data in a table that is ordered by columns that are the environment, and rows that are the version number (the version number in the table corresponds to the module, so version 1.xx = module 1, version 2.xx = module 2, etc.). I am using text::table to build the table, but I realize that might not be the correct choice if I need to dynamically build rows.
Here is a code snippet:
use strict; use warnings; use text::table; use Data::Dumper; sub main { my $file = "1.00 InDev 01-Jun-2013 1.00 InTest 15-Jul-2013 1.00 InUAT 31-Jul-2013 1.00 InProd 15-Sep-2013 1.01 InDev 01-Jul-2013 2.00 InDev 01-Aug-2013 3.00 InDev 01-Sep-2013"; # This seems to be the only way to convert the scalar file to an array # where each line is an array element. There's probably a better way. my @array = split( /\n/, $file ); # This is simply a test to see what the array looks like print Dumper(@array); }; main(); # This next bit of code is not connected to the above because I don't # know the best way to build a data structure for the table. # Therefore I'm just creating a simple dummy array based on what a # single line of the table might look like. In addition, if there # are no matches with an (x,y) location in the table for a certain # row of data, I would like to fill it with the text "N/A", # hard coded as an illustration below. my @tarray = ( "1.0", "06-Mar-2014", "06-Mar-2014", "06-Mar-2014", "06-Mar-2014" +); my $tb = Text::Table->new( "Module", "Version", "InTest", "InUAT", "IN +Prod" ); $tb->load( [ "Module 1", $tarray[0], $tarray[1], $tarray[2], $tarray[3] ], [ "Module 2", "N/A", "N/A", "N/A", "N/A" ], [ "Module 3", "N/A", "N/A", "N/A", "N/A" ], ); print $tb;
Here's an example of the desired output based on the input of $file above:
Module Version InDev InTest InUAT INProd Module 1 1.00 01-Jun-2013 15-Jul-2013 31-Jul-2013 15-Sep-2013 Module 1 1.01 01-Jul-2013 N/A N/A N/A Module 2 2.00 01-Aug-2013 N/A N/A N/A Module 3 3.00 01-Sep-2013 N/A N/A N/A
I realize this is a rather complex, multi-part question, but I thought it would be most clear if entered as one question to understand all the parts. Any and all assistance would be greatly appreciated. Thank you.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Dynamically build a table
by Cristoforo (Curate) on Mar 11, 2014 at 21:12 UTC | |
by Deep_Plaid (Acolyte) on Mar 14, 2014 at 15:28 UTC | |
|
Re: Dynamically build a table
by 2teez (Vicar) on Mar 11, 2014 at 20:24 UTC | |
by Deep_Plaid (Acolyte) on Mar 14, 2014 at 14:46 UTC | |
|
Re: Dynamically build a table
by Laurent_R (Canon) on Mar 11, 2014 at 18:21 UTC | |
by Deep_Plaid (Acolyte) on Mar 11, 2014 at 18:33 UTC | |
by Laurent_R (Canon) on Mar 11, 2014 at 18:41 UTC | |
by Deep_Plaid (Acolyte) on Mar 14, 2014 at 14:51 UTC | |
by Laurent_R (Canon) on Mar 11, 2014 at 18:51 UTC | |
by Laurent_R (Canon) on Mar 11, 2014 at 22:06 UTC | |
|
Re: Dynamically build a table
by choroba (Cardinal) on Mar 11, 2014 at 18:01 UTC | |
by Deep_Plaid (Acolyte) on Mar 11, 2014 at 18:26 UTC | |
by Laurent_R (Canon) on Mar 11, 2014 at 18:32 UTC | |
by Deep_Plaid (Acolyte) on Mar 11, 2014 at 18:47 UTC | |
|
Re: Dynamically build a table
by Laurent_R (Canon) on Mar 11, 2014 at 18:01 UTC |