TransWikia.com

Export output to a text file

Mathematica Asked by Natasha on July 22, 2020

I have the following output obtained after optimizing the positions of geometry using Minimize
command

{x[1] -> 1011.07, y[1] -> 1127.56, z[1] -> 420.922, x[2] -> 940.095, 
 y[2] -> 1041.71, z[2] -> 414.793, x[3] -> 754.727, y[3] -> 1088.95, 
 z[3] -> 467.422}

I have converted this to input form and saved in another variable,

coord = {x[1] -> 1011.07, y[1] -> 1127.56, z[1] -> 420.922, x[2] -> 940.095, 
 y[2] -> 1041.71, z[2] -> 414.793, x[3] -> 754.727, y[3] -> 1088.95, 
 z[3] -> 467.422}

I would like to save this output as three columns corresponding to x,y,z coordinates of a geometry in a text file.

I think I should be using the export option, I tried

`Export["output.txt", coord]`

and this gives

x[1] -> 1018.4781995039851
y[1] -> 1136.9092785077921
z[1] -> 422.85069778505175
x[2] -> 949.2538801819732
y[2] -> 1051.3795795311353
z[2] -> 404.52636548576334
x[3] -> 763.3574381125803
y[3] -> 1053.2894203505348
z[3] -> 473.80190652330657

I would like to ask for suggestions on how to save this in the following way

index  x                    y                   z
1     1018.4781995039851 1136.9092785077921     422.85069778505175
2     949.2538801819732   :
3     763.3574381125803   :

3 Answers

Here is an approach that address the core of your request

First strip the values from the Association and group them with Partition.

z1 = Values[coord] // Partition[#, 3] & ;

Now create a file variable

theFile = File["exportFile.txt"];

Export as follows (using "Table" argument to Export

Export[theFile, z1, "Table"];

This file will end up in the directory referred to by Directory[]

---x---

Now a little more complication

Add a columns of row indices to the left of your table with (I think it is convoluted syntax, but it works....)

z2 = Insert[z1 // Transpose, Range[3], 1] // Transpose;

The next picture shows z1 and z2.

enter image description here Add a row of labels to the top of your table

z3 = Prepend[z2, {"index", "x", "y", "z"}];

And then Export the variable z3 instead of z1 as above.

The only problem is the labels aren't aligned properly; this could be a problem or not; depending on how you will use the exported file.

enter image description here

Correct answer by PaulCommentary on July 22, 2020

If this is really the structure, maybe you could use a dataset instead?

pdata = Partition[coord/. h_[i_Integer] -> h, 3]
ds = Dataset[Association @@@ pdata]

Indexes are supplied automatically. E.g.,

ds[[1]]

Answered by Alan on July 22, 2020

Here is another version which I think is showing some useful tricks specific to Mathematica:

 data = {
        x[1]->1011.07,y[1]->1127.56,z[1]->420.922, 
        x[2]->940.095,y[2]->1041.71,z[2]->414.793,
        x[3] -> 754.727,y[3]->1088.95,z[3]-> 467.422
 }

 Export[
   FileNameJoin[{$HomeDirectory,"Desktop","data.txt"}],
   Join[
     {{"index", "x", "y", "z"}},
     Table[{i, x[i], y[i], z[i]}, {i, 3}] /. data
   ],
   "Table"
 ]

Some explanations:

  • I find it more convenient and less error-prone to work with full path-names when working with files than to rely on the current value of Directory[].
  • FileNameJoin and the $*Directory variables are essential tools to work with filenames that I think every Mathematica user should know about.
  • There is nothing wrong with using File to specify the filename to export to here, but I think for such relatively simple use cases it is an unnecessary abstraction.
  • As you have your data as a list of rules it seems easiest to take advantage of that fact when constructing the tabular data you are after.
  • I could have used Prepend instead of Join which would have saved me the extra pair of curly brackets, but I find it more clear to write the header before the data in such cases...

Answered by Albert Retey on July 22, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP