On 30 Mai, 11:09, "King, Peter R" <peter.k... at imperial.ac.uk> wrote:
> I have a string which in general looks something like
>
> a="{x,16,x,1T,x}"
>
> In other words it looks like a list with a mixture of characters and
> numbers and so on. I want to pick out the individual elements of this
> (using the commas as delimiters)
>
> Clearly a[[1]] etc doesn't mean anything
>
> I can do b=ToExpression[a] and I get a list so b[[1]] is x and
> b[[2]]=16 (that is the number sixteen but I can convert this back into =
> a
> string with ToString. The problem is b[[4]] which ToExpression turns
> into T as it thinks I mean 1 x T.
>
> So I would appreciate help with either
>
> i) converting my original string to a list as I would like
>
> Or
>
> Ii) stopping the evaluation of 1T into T so that I can get the string 1T
>
> (The only thought I had was to step through the original string
> character by character telling it to put the characters into different
> elements of a list each time I pass a comma, but this looked a bit
> cumbersome).
>
> Many thanks,
>
> Peter King
Hello Peter,
one possibility to achieve your goal is
a = "{x,16,x,1T,x}";
b = StringSplit[a, { "{", "}", "," }];
b = Flatten@StringCases[b, {
w : (StartOfString ~~ NumberString ~~ EndOfString) :>
ToExpression[w],
w : (StartOfString ~~ LetterCharacter ~~ WordCharacter ... ~~
EndOfString) :> ToExpression[w],
__ } ]
Regards,
Hannes Kessler