John W. Krahn wrote:
> Greg Carrara wrote:
> >
> > Hello,
>
> Hello,
>
> > I'm trying to write a script that reads a file line by line and if
> > the line contains a space it puts quotation marks around it and
> > writes it to another file.  I mostly have this working except that
> > in the case of the lines that contain the space it puts the
> > quotation mark at the beginning of the next line.  My guess is that
> >  print OUTFILE ($line);
> > also feeds a CR.  Is there a way around this?
> > thanks,
> > gc
> >
> > unless (open(INFILE, "accounts.txt")) {
> >         die ("Cannot open input file accounts.txt.\n");
> > }
>
> You should include the $! variable in the error message so you know
> WHY
> it failed.
>
> open INFILE, 'accounts.txt' or die "Cannot open input file
> accounts.txt. $!\n";
>
>
> > unless (open(OUTFILE, ">nospace.txt")) {
> >         die ("Cannot open output file nospace.txt.\n");
> > }
>
> open OUTFILE, '>nospace.txt' die "Cannot open output file nospace.txt.
> $!\n";
>
>
> > $line = <INFILE>;
> > while ($line ne "") {
> > if ($line =~ / +/) {
> >      print OUTFILE ('"');
> >      print OUTFILE ($line);
> >      print OUTFILE ('"');
> > }
> > else {
> >      print OUTFILE ($line);
> > }
> > $line = <INFILE>;
> > }
> > }
>
> while ( <INFILE> ) {
>     s/( +)/"$1"/g;
>     print OUTFILE;
>     }

Your solution puts quotation marks around all contiguous strings
of spaces, while what is needed is to quote the entire line
if it contains a space. (I imagine this is a series of file paths.)

This should do the trick:

    use strict;

    @ARGV = qw( accounts.txt );

    open STDOUT, "> nospace.txt" or die $!;

    while (<>) {
        chomp;
        s/^|$/"/sg if / /;
        print "$_\n";
    }

HTH,

Rob




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

Reply via email to