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

```

• Prev by Date: Re: Importing and manipulating text files
• Next by Date: Re: Neural networks with mathematica
• Previous by thread: Re: Re: Copy and Pasting Tables into Spreadsheet
• Next by thread: Re: Piecewise inside a Module or Block, I don't understand this