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)
- Reply-to: hanlonr at cox.net
deBracket[x_] := x /. A_Symbol[n__Integer] :> ToExpression[ StringJoin[Prepend[ToString /@ {n}, ToString[A]]]] X[1] // deBracket X1 {A[1], A[2], A[3], A[4]} // deBracket {A1,A2,A3,A4} {{W[1, 1], W[1, 2]}, {W[2, 1], W[2, 2]}} // deBracket {{W11, W12}, {W21, W22}} Bob Hanlon ---- carlos at Colorado.EDU wrote: ============= 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[1],A[2],A[3],A[4]} -> {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