       Re: Debracketing array symbols

• To: mathgroup at smc.vnet.net
• Subject: [mg92122] Re: [mg92079] Debracketing array symbols
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Sat, 20 Sep 2008 05:01:49 -0400 (EDT)

```deBracket[x_] :=
x /. A_Symbol[n__Integer] :>
ToExpression[
StringJoin[Prepend[ToString /@ {n}, ToString[A]]]]

X // deBracket

X1

{A, A, A, A} // deBracket

{A1,A2,A3,A4}

{{W[1, 1], W[1, 2]}, {W[2, 1], W[2, 2]}} // deBracket

{{W11, W12}, {W21, W22}}

Bob Hanlon

=============
Hi,

For a class project I generate 1D and 2D arrays of arbitrary size with
entries <letters>[i] and <letters>[i,j] that I need then to convert
to <letter>i and <letter>ij for export to other languages that do not
allow brackets in symbol names. E.g.

1D:  {A,A,A,A} -> {A1,A2,A3,A4}

2D:  {{W[1,1],W[1,2]},{W[2,1],W[2,2]}}  -> {{W11,W12},{W21,W22}}

Question: would this be the simplest way to do it?

DebracketArrayEntries[Wm_]:=Module[{dim,rep,i,j,n,m,s,Wr},
rep={"["->"","]"->"",","->""," "->""}; Wr=Wm;
dim=Length[Dimensions[Wm]];
If [dim==1,n=Length[Wm]; Print["n=",n];
For [i=1,i<=n,i++, s=ToString[Wm[[i]]];
Wr=Wr/.Wm[[i]]->Symbol[StringReplace[s,rep]] ]];
If [dim==2,{n,m}=Dimensions[Wm];
For [i=1,i<=n,i++, For[j=1,j<=m,j++, s=ToString[Wm[[i,j]]];
Wr=Wr/.Wm[[i,j]]->Symbol[StringReplace[s,rep]] ]]];
Return[Wr]];

The procedural style is to simplify conversion to C++.

--

Bob Hanlon

```

• Prev by Date: Re: Variable names in Mathematica
• Next by Date: Re: NDSolve and Piecewise
• Previous by thread: Re: Debracketing array symbols
• Next by thread: Re: Debracketing array symbols