# How to output an expression to an external file in “plain text” format without breaking lines?

Given a pretty long expression, such as

a={-11 ψ^2 λ[1]+6 ψ λ[2],35 ψ^2 λ[2],11 ψ^2 λ[1]^2-11 ψ^2 λ[2]-6 ψ λ[1] λ[2],ψ^2 λ[1]^2-ψ^2 λ[2]-ψ λ[1] λ[2]+λ[2]^2,-λ[1]^3+2 λ[1] λ[2],-3 ψ λ[1]^3+6 ψ λ[1] λ[2]+λ[1]^2 λ[2]-λ[2]^2,-ψ λ[1]^3+λ[1]^4+2 ψ λ[1] λ[2]-3 λ[1]^2 λ[2]+λ[2]^2}


a >> tmp would output the expression of a to an external file tmp. But I don't like the format in this output. It breaks lines, and contains extra spaces between operators of "+-*/".

In fact, in Mathematica, selecting an expression, we could do (right click) > Copy as > Plain Text, and then we could paste it to any external text editor without any problem.

Is it possible to specify the output stream using this "Plain Text" format above?

-

## 5 Answers

Export["test.txt", {a}]


works for me

"Plaintext" is already the default output form of Export. The { } around a prevents Export from seeing it as a series of arguments (a is a list in your example) that each have to be put on its own line.

-

Perhaps you could use Export instead of Put?

out = StringReplace[ToString[InputForm[a]], {" " | "\n" -> ""}]
Export["out.txt", out]

-

Try using Export and Import.

Make sure to include "Data" as the second argument of Import.

SetDirectory[\$TemporaryDirectory];
Export["myfile.txt", a]
in = Import["myfile.txt", "Data"]


If you really want to see the Greek letters spelled out you can then use

FullForm[in]


but this will also return List[] instead of {}.

-

You can stay with Put using the method I showed here for PutAppend:

SetOptions[OpenWrite, PageWidth -> Infinity];
a >> tmp


This method is especially useful in the case of PutAppend because it allows you to maintain a running log file with results of intermediate computations with one expression per line.

## UPDATE

There is a bug introduced in version 10: SetOptions no longer affects the behavior of OpenWrite and OpenAppend:

SetOptions[OpenWrite, PageWidth -> Infinity];
str = OpenWrite["log.txt"]; Write[str, Table[x, {50}]];
Close[str];
Import["log.txt"] // FullForm


"{x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, \n x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x}"

As one can see, the newline character \n is embedded despite the fact that OpenWrite is set to have the PageWidth -> Infinity option system-wide. The expected behavior:

str = OpenWrite["log.txt", PageWidth -> Infinity];
Write[str, Table[x, {50}]];
Close[str];
Import["log.txt"] // FullForm
DeleteFile["log.txt"]


"{x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x}"

As a workaround one can Export as "Text" with PageWidth -> Infinity option:

Export["test.txt", a, PageWidth -> Infinity]

-
This seems to no longer work for PutAppend in Mathematica 10. –  Taiki Mar 21 at 2:16
There is a bug introduced in v.10: SetOptions no longer affects the behavior of OpenWrite and OpenAppend. –  Alexey Popkov Mar 22 at 14:51

I can't get Alexey's solution to work on Mathematica 10, so I use this custom function to output simple strings in lieu of PutAppend:

myPutAppend[string_String, pathtofile_] := Module[
{f},
f = OpenAppend[pathtofile];
WriteString[f, string <> "\n"];
Close[f]
]


The \n bit is needed because WriteString does not automatically add it to the end of the line like the original PutAppend.

You can also have

myPut[string_String, pathtofile_] := Module[
{f},
f = OpenWrite[pathtofile];
WriteString[f, string <> "\n"];
Close[f]
]


for the equivalent of Put.

-