Re: Copy and Pasting Tables into Spreadsheet

*To*: mathgroup at smc.vnet.net*Subject*: [mg83504] Re: Copy and Pasting Tables into Spreadsheet*From*: Szabolcs Horvát <szhorvat at gmail.com>*Date*: Wed, 21 Nov 2007 05:57:40 -0500 (EST)*References*: <fhp2jd$1q6$1@smc.vnet.net> <fhu71j$70l$1@smc.vnet.net> <4742DFB0.20107@gmail.com> <fi0nnh$5gb$1@smc.vnet.net>

Gregory Lypny wrote: > > On 20-Nov-2007, at 8:22 AM, Jean-Marc Gulliet wrote: > >> gregory.lypny at videotron.ca wrote: >> >> <snip> >> >>> Is there a way to tell >>> Mathematica to return a scalar in all situations when the result >>> would >>> otherwise be a list with only one element? >> Gregory, >> >> You could use the system variable *$Post* and set up your own post >> processing function. (You might be interested in $PrePrint too.) >> Here is an example of such a function that should do what you are >> looking for, though you may want to add some additional tests (or >> remove few of them). >> >> In[1]:= $Post = >> If[Head[#] === List && Length[#] == 1 && >> Depth[#] < 3, #[[1]], #] &; >> >> prob = {.4, {.6}, {.4, .6}, {{.4, .6}}}; >> >> prob[[1]] (* Scalar: not a list, depth one *) >> prob[[2]] (* List of length one and depth two *) >> prob[[3]] (* List of length two and depth two *) >> prob[[4]] (* List of length one and depth three *) >> >> $Post =. (* Reset $Post *) >> >> Out[3]= 0.4 >> >> Out[4]= 0.6 >> >> Out[5]= {0.4, 0.6} >> >> Out[6]= {{0.4, 0.6}} >> > > Thank you Jean-Marc, > > I'll look into this. I'm also tinkering with a brute-force script > that will flatten and then partition any table to create one with a > depth of 3. That should allow copying of numbers as plain text and > then pasting them into other applications. > [note: swapped the quoted posts to keep chronological order] Map[Flatten, data, {1}] will flatten out everything in 'data' above level 1. The problem with *returning* a scalar in all cases when the result would be a single-element list is that return values cannot be precisely defined in Mathematica (because of how evaluation works). The things "returned" by a function might be evaluated further. The problem with the $Post approach is that it only works on the final result of an evaluation. With the suggested $Post function, {2*3} evaluates to 6, but Table[{i j}, {i, 8}, {j, 8}] still evaluates to a {8, 8, 1} list. It is a bit dangerous to use $Post in this way because it may deceive you (by altering results) and lead to more confusion. If List weren't Locked, one could do List[{x_}] := x, but this would break lots and lots of things ... Szabolcs