zsh-users
 help / color / mirror / code / Atom feed
From: DervishD <raul@pleyades.net>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: Zsh Users <zsh-users@sunsite.dk>
Subject: Re: Is this the Zsh way for doing this?
Date: Sun, 28 Mar 2004 22:07:56 +0200	[thread overview]
Message-ID: <20040328200756.GB6311@DervishD> (raw)
In-Reply-To: <1040328010324.ZM19900@candle.brasslantern.com> <1040328005531.ZM19873@candle.brasslantern.com>

    Hi Bart :)

    Thanks a lot for your answer :)

 * Bart Schaefer <schaefer@brasslantern.com> dixit:
> } tail +2 .CDinfo | while read song
> This is fine, but you might prefer the more obvious:
> tail +2 .CDinfo | while read ignored_word track_number track_name

    I *always* forget that 'read' can be used with more than one
parameter O:) This way, using IFS, it can be used as a simple
tokenizer.

>     # At this point ignored_word is always "Track" and track_number
>     # still has a trailing colon that we need to strip off.  Also
>     # track_name contains single quotes, but based on this example:
>     #    Track 10: 'This song really doesn't exist...'
>     # they aren't balanced single quotes, so we have to strip them.

    Yes, they're always balanced, is the output from cdda2wav.

>     # At this point you might also want to clean wildcards and slashes
>     # out of $track_name, but that's up to you.  Your original doesn't.

    No, it doesn't because I didn't thought of it :( Thanks for
pointing. Could it be solved using the (q) flag or should I use ${//}
and substitute every dangerous character for a safe version?

> If you really desperately want to write it all as one command rather
> than have the two extra assignments:
> 
>     mv audio_${(l.2..0.)track_number/#(#b)([0-9]#):/$match[1]}.cdr \
>         ${(l.2..0.)match[1]}.${${track_name%\'}#\'}.cdr

    Thanks for the recipe :))
 
> As to your specific pattern-matching questions:
> }     ${song/#(#b)Track #([0-9]##):'(*)'/${(l.2..0.)match[1]}.${match[2]}}.cdr
> } AFAIK, when pattern matching takes place
> } at the point of the "'(*)'", it is implicitly anchored to the end of
> } the string and is the longest match
> No, it's not implicitly anchored at the end, but it is the longest match,
> which (since there is always a single-quote at the end of the string) is
> equivalent in this case.

    Nice, then.
 
> However, you do need to escape the single quotes, and there is a space
> after the colon:

    Sorry, they are, but when I copied the command line it got mangled
:(, don't know why (I would swear I copied it from my .history, but
obviously I didn't because it is correctly shown there :?).

> 	(#b)Track #([0-9]##): \'(*)\'
> } [Why can't I] use the (#b) flag before the '/' (together with 'song')
> } or before the '#' (which indicates that 'Track' must match at the
> } beginning of the string) [...?]
> What you've asked is very similar to asking about C,
> 
>     Why can't I put the "--" before the "+" or before the "=" in
>     the expression "song += --pattern" ?
> This is because the / and the # together constitute an operator on the
> value of the variable, whereas (#b) is part of the pattern which is an
> argument to that operator.

    Ok. I don't know why I thought that the globbing flags could be
used at any point in the expression involving patterns, because the
manual clearly states that they 'affect any text to their right up
to the end of the enclosing group or to the end of the pattern'.
Sorry for the noise O:(

> } BTW, is that '#' necessary or not?
> It's not necessary as long as none of the names is "The Track 27: song"
> or some such.

    So it is necessary for me, because I don't know what kind of
names this function may get.

    Again, Bart, thanks a lot for your invaluable help. I can't think
of a way of returning you all you do for people like me :) You're
great, I really mean it.

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736
http://www.pleyades.net & http://raul.pleyades.net/


  reply	other threads:[~2004-03-28 20:09 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-25 22:32 DervishD
2004-03-28  0:55 ` Bart Schaefer
2004-03-28  1:03   ` Bart Schaefer
2004-03-28 20:07     ` DervishD [this message]
2004-03-28 21:00       ` Bart Schaefer
2004-03-29 14:08         ` DervishD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040328200756.GB6311@DervishD \
    --to=raul@pleyades.net \
    --cc=schaefer@brasslantern.com \
    --cc=zsh-users@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).