Rob Dixon wrote: > Hi Shaunn. > > Shaunn Johnson wrote: > > Howdy: > > > > First off, many thanks to all (esp. R. Dixon and T. Lowery) > > for the help with the 'using table_info()' thread. > > > > I'm just about done with that script, but I have > > one tiny problem. > > > > In my SECOND while loop, I place a comma (,) at the end > > so that when the *.ddl files are built, it looks > > just like I've done it by hand. And close to the > > way I want to use the scripts for porting to Oracle. > > Almost. > > > > I have one comma too many and I would like to know > > how can I either: > > > > 1) go back over the files AFTER they're done and > > remove the very last comma in the file > > > > 2) set up the loop statement so that I only put > > commas on all of the columns except for the last row > > of data. > > > > Are either of these possible? > > > > I am including the script in case anyone is interested > > in how it's set up. Yes, I know it could be shorter > > and much, much cleaner - please feel free to muck > > with it and pass on hints to making it better. > > [snip bulk of script] > > I think it's this comma you're talking about? > > > while ( my($first, $second)=$sth->fetchrow ) { > > print FILE "$first\t\t$second,\n"; > > } > > Firstly, I'm surprised the 'fetchrow' method still works > with 'DBI'. What I would normally call here is > 'fetchrow_array' which returns a list, regardless of > context. Anyway, the answer... > > The classical solution is to print a comma /before/ > each record unless it is the first record. This is > often easier because checking for the first item > is usually easier than checking for the last. In this > case though, the most straightforward way is to count > the number of rows you've printed and compare it with > $sth->rows to see if it needs terminating. Like this > > my $row = 0; > while ( my($first, $second) = $sth->fetchrow ) { > print FILE "$first\t\t$second"; > print "," unless ++$row >= $sth->rows; > print "\n"; > } >
Written in haste, and my apologies to all. The value of $sth->rows isn't in general guaranteed for 'select' statements as the database will do its filtering as required by subsequent 'fetch' operations. So we revert to the less obvious but fully functional 'classical' solution: my $row = 0; while ( my($first, $second) = $sth->fetchrow ) { print "\n," if $row++; print FILE "$first\t\t$second"; } print "\n"; Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]