[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: another script query (perl?)



On Fri, Sep 07, 2007 at 08:26:50AM -0700, tabris wrote:

> Richard Lyons wrote:
> > On Fri, Sep 07, 2007 at 07:19:17AM -0700, tabris wrote:
> >
> >   
> >> Richard Lyons wrote:
[...]
> >>>    {some text} & {some more text} & {text c} & {text d} \\
> >>>
> >>> where the braces are only for clarity and do not occur in the files, and
> >>> where the bits of text may include whitespace which may include newline
> >>> characters. There may also be escaped ampersands in the text ('\&'), and
> >>> the text fragments may be empty.
> >>>
> >>> I suspect perl may be the way forward.  I need to be able to read each
> >>> file, parse each set of three ampersands with a double backslash
> >>> breaking it into four substrings, manipulate the substrings and write
> >>> the file anew.  A typical manipulation will be to take text c and copy
> >>> it to text d. I shall also try to strip leading and trailing whitespace
> >>> to tidy up the file.
[...]
> >   
> well, I'd say something along these lines assuming that you have $l
> populated with the entire piece you want.
> Also note that this attempts to avoid use of regexps where possible, as
> they tend to be slow and hard to read. Not that I dislike regexps, but I
> don't think they're necessary here. Also note that none of this code has
> been tested, it's the product of about 5 minutes of hacking.
> 
> my @phrases = split('&', $l);
> {
>     my @tmp;
>     while(my $phrase = shift @phrases) {
>         if (substr($phrase, -2) eq '\') {
>            my $tmp = $phrase .'&'. (shift @phrases);
>         }
>         push @tmp, $phrase;
>     }
>     @phrases = @tmp;
> }
> 
> # remove trailing or leading whitespace
> foreach my $phrase (@phrases) {
>     $phrase =~ s/^\s//; #remove leading spaces
>     $phrase =~ s/\s$//; # remove trailing spaces
>     $phrase =~ s/\n/ /g; # change all new-line chars to spaces
> }
> 
> # now reconstruct your text however you want it.
> # I have a good (free, public-domain) line splitter if you need one.
> 

Thanks for that.  I shall have a serious look at it on Sunday.  I must
admit I had expected the solution to be an inscrutable regexp, so this
is cool.

-- 
richard



Reply to: