> -----Original Message-----
> From: Rob Dixon [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, July 02, 2003 3:15 PM
> To: [EMAIL PROTECTED]
> Subject: Re: how to remove last comma in file?
> 
> 
> 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";
> 
Or,

   my $row = 0;
   while ( my($first, $second) = $sth->fetchrow ) {
     print "," if $row++;
     print FILE "$first\t\t$second\n";
   }

-Mark

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to