Re: Position[] pattern matching
- To: mathgroup at smc.vnet.net
- Subject: [mg4265] Re: Position[] pattern matching
- From: wagner at motel6.cs.colorado.edu (Dave Wagner)
- Date: Sun, 23 Jun 1996 03:10:26 -0400
- Organization: University of Colorado, Boulder
- Sender: owner-wri-mathgroup at wolfram.com
In article <4q093q$fiu at dragonfly.wolfram.com>,
Harald Berndt <haraldb at nature.berkeley.edu> wrote:
>I just ran into a strange pattern-matching problem:
>
>I'm reading some infomation from a disk file with
>
>fInfo = ReadList[
> "NDEC:EWW:RODDAT.PRN",
> {Word, Word, Word, Word, Word, Word, Word,
> Number, Number, Number, Number}
>]
>
>Now, I want all records whose 4th word starts with an "L":
>
>In[29]:=
>Position[
> fInfo,
> x_/;(StringTake[ x[[4]], 1 ] == "L")
>]
>Part::partd: Part specification List[[4]]
> is longer than depth of object.
> (etc)
The problem is that Mathematica is trying to evaluate x[[4]], where
x either has no value or is an expression that doesn't have at
least four parts. You can avoid this problem using:
Position[
finfo,
Unevaluated[x /; (StringTake[ x[[4]], 1] == "L")]
]
The computation eventually works because x[[4]] evaluates to x[[4]],
even though it generates an error message.
Dave Wagner
Principia Consulting
(303) 786-8371
dbwagner at princon.com
http://www.princon.com/princon
==== [MESSAGE SEPARATOR] ====