zsh-users
 help / color / mirror / code / Atom feed
* Per line ${..//..}
@ 2005-10-26  9:40 DervishD
  2005-10-26  9:47 ` Peter Stephenson
  0 siblings, 1 reply; 5+ messages in thread
From: DervishD @ 2005-10-26  9:40 UTC (permalink / raw)
  To: Zsh Users

    Hi all :)

    I have a parameter containing a bunch of lines, and I have to get
rid of comments (that is "$line" == (#s)[" $'\t'"]#\#*(#e)) and empty
lines (that is "$line" == (#s)[" $'\t'"]#(#e)). I've tried using the
${..//..} syntax for doing substitutions in parameters, but with no
success because I don't know how to properly mark the beginning and
end of a line.

    So I'm using this:

for line in ${(f)olddata}
do
    [[ "$line" == (#s)[" $'\t'"]#(\#*)#(#e) ]] && continue
    newdata+=($line)
done

    I'm pretty sure that this is not the best way of "cleaning" the
contents, but I can't think of anything better :( Any idea? Can the
${..//..} construct be used?

    Thanks in advance :)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Per line ${..//..}
  2005-10-26  9:40 Per line ${..//..} DervishD
@ 2005-10-26  9:47 ` Peter Stephenson
  2005-10-26 10:15   ` DervishD
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Stephenson @ 2005-10-26  9:47 UTC (permalink / raw)
  To: Zsh Users

DervishD wrote:
>     I have a parameter containing a bunch of lines, and I have to get
> rid of comments (that is "$line" == (#s)[" $'\t'"]#\#*(#e)) and empty
> lines (that is "$line" == (#s)[" $'\t'"]#(#e)). I've tried using the
> ${..//..} syntax for doing substitutions in parameters, but with no
> success because I don't know how to properly mark the beginning and
> end of a line.

You can do something like:

% lines=(foo "# comment" bar "    ")
% print -l $lines
foo
# comment
bar

% print -l ${lines:#[[:space:]]#(\#*|)}
foo
bar

pws



This message has been scanned for viruses by BlackSpider MailControl - www.blackspider.com


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Per line ${..//..}
  2005-10-26  9:47 ` Peter Stephenson
@ 2005-10-26 10:15   ` DervishD
  2005-10-26 10:27     ` Peter Stephenson
  0 siblings, 1 reply; 5+ messages in thread
From: DervishD @ 2005-10-26 10:15 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: Zsh Users

    Hi Peter :)

 * Peter Stephenson <pws@csr.com> dixit:
> DervishD wrote:
> >     I have a parameter containing a bunch of lines, and I have to get
> > rid of comments (that is "$line" == (#s)[" $'\t'"]#\#*(#e)) and empty
> > lines (that is "$line" == (#s)[" $'\t'"]#(#e)). I've tried using the
> > ${..//..} syntax for doing substitutions in parameters, but with no
> > success because I don't know how to properly mark the beginning and
> > end of a line.
> 
> You can do something like:
> 
> % lines=(foo "# comment" bar "    ")
> % print -l $lines
> foo
> # comment
> bar
> 
> % print -l ${lines:#[[:space:]]#(\#*|)}
> foo
> bar

    Unfortunately the original data is not in an array :( Will this
work?:

    olddata=(${(f)olddata))
    olddata=(${olddata:#...})

    I completely forgot about the ${NAME:#PATTERN}. Better said, I
was stuck with ${..//..}. Thanks a lot for the suggestion. You've
given me another idea... I can convert all parameters that store file
contents into arrays, although some of them have \C-M as newline
markers, but that's easy to solve. This way I can do per-line
processing without the need for loops.

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Per line ${..//..}
  2005-10-26 10:15   ` DervishD
@ 2005-10-26 10:27     ` Peter Stephenson
  2005-10-26 11:26       ` DervishD
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Stephenson @ 2005-10-26 10:27 UTC (permalink / raw)
  To: Zsh Users

DervishD wrote:
>     Unfortunately the original data is not in an array :( Will this
> work?:
> 
>     olddata=(${(f)olddata))
>     olddata=(${olddata:#...})

Yes, you should be able to combine them along the lines of

     ${${(f)olddata}:#...}

pws


This message has been scanned for viruses by BlackSpider MailControl - www.blackspider.com


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Per line ${..//..}
  2005-10-26 10:27     ` Peter Stephenson
@ 2005-10-26 11:26       ` DervishD
  0 siblings, 0 replies; 5+ messages in thread
From: DervishD @ 2005-10-26 11:26 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: Zsh Users

    Hi Peter :)

 * Peter Stephenson <pws@csr.com> dixit:
> DervishD wrote:
> >     Unfortunately the original data is not in an array :( Will this
> > work?:
> > 
> >     olddata=(${(f)olddata))
> >     olddata=(${olddata:#...})
> 
> Yes, you should be able to combine them along the lines of
> 
>      ${${(f)olddata}:#...}

    Thanks Peter, this works perfectly. Now I'm doing this:

    olddata=(${${(f)olddata}:#...})

    I still do the array conversion because this makes easier to find
individual lines afterwards (and I can refer to them by number, which
is something I want).

    Thanks! :)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-10-26 11:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-26  9:40 Per line ${..//..} DervishD
2005-10-26  9:47 ` Peter Stephenson
2005-10-26 10:15   ` DervishD
2005-10-26 10:27     ` Peter Stephenson
2005-10-26 11:26       ` DervishD

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).