re jZed's, suspect either
(1) there's some trick I don't know
or
(2)"simply" may be an oversimplification.
Excel has better luck (for me, anyway) with text files beginning at fixed column locations; takes mucho twiddling to get it to handle tabs correctly if text (of NON-uniform length) includes numerals unless data intended for each cell is double-quoted.
and, <G>, isn't it "don't need no steenkin'...?" | [reply] |
Sure, I assume the OP knows that and is asking in PM because he has a big raft of these files to convert and wants to do it programmatically. It's no fun to convert 500 tab-delimited files by opening them from within Excel, even if one uses the "lazy-evaluation" model.
| [reply] |
The point i was trying to make was that the user shouldnt have to leave the web page environment, but should only have to choose which file they want to view the data of.
The user doesnt want to see any of the actual raw data, but merely an overall graph to display the data on the screen in a graphical format that can easily be understood.
** not meaning to be arsey about it :)****
I may be a bit stupid but can you tell me of a way that i can loop through all the column headings in the file (say writing them to the screen), i.e. stored in an array, then for each row do the same. Currently i have the following code, although i know it doesnt work. I was thinking of a hash table for the column and value but im new to this perl game. The problem i have is to recognise the number of columns there are and loop through each row upto and including the last column, then go to the next line and start again. My brain is wrecked at this stage. Im normally a java programmer and cant seem to see a way forward....HELP!.
# read from a file and extract the contents into an Excel file
sub write_to_Excel()
{
use Spreadsheet::WriteExcel;
my @columnNames;
my @rowValues;
my $count = 0;
my $row = 0;
my $fileArray = "F:/User_Interface/dbStuff/ArrayExpress.txt";
open( INFILE, "<$fileArray") or
die "Cannot open the file";
print("Searching File...");
foreach $line ( <INFILE> )
{
if( $line =~ /^Name/ )
{
@columnNames = split(/\t/, $line);
}
else
{
@rowValues = split(/\t/, $line);
}
}
# Create a new workbook and save a file called example.xls
# and add a worksheet called Summary to that.
my $workbook = Spreadsheet::WriteExcel->new("ArrayExpress.xls");
my $worksheet = $workbook->add_worksheet(`Summary`);
# Set text bold, red, underlined for values
# designated as high
# my $high_val = $workbook->add_format();
# $high_val->set_bold();
# $high_val->set_color(`red`);
# $high_val->set_underline();
###### not sure how to loop through array to put rows across then do
+wn and same with cols
$worksheet->write($row,$count,$element);
foreach $element(@columnNames)
{
$count++;
$worksheet->write($row,$count,$element);
}
foreach my $element(@rowValues)
{
$worksheet->write($row,$count,$element);
$count++;
$row++;
}
}
Sorry about the mess with the node changing. Again im new to this.
MonkPaul.
| [reply] [d/l] |
foreach $line ( <INFILE> )
{
if( $line =~ /^Name/ )
{
@columnNames = split(/\t/, $line);
}
else
{
push @rowValues, [ split(/\t/, $line) ];
}
}
Second, you are setting and/or incrementing the row and column indexes inappropriately (you also have an extraneous write right before the first loop); fix it with something like:
$row = 0;
$count = 0;
foreach $element(@columnNames)
{
$worksheet->write($row,$count,$element);
$count++;
}
++$row;
foreach my $rv (@rowValues) {
$count = 0;
foreach my $element (@$rv) {
$worksheet->write($row,$count,$element);
$count++;
}
$row++;
}
Third, you are not using strict (q.v.), and are therefore heading for a world of pain.
Im normally a java programmer and cant seem to see a way forward...
If you think the problems with the code you posted had something to do with it being in Perl rather than Java I think you are missing the boat; the most serious errors in it are pretty generic.
| [reply] [d/l] [select] |