如何在保留sig figs的同时将Mathematica列表导出为固定宽度的文本文件?

时间:2017-05-05 07:05:40

标签: export wolfram-mathematica fixed-width significant-digits

我的第一个问题是如何使用Mathematica以固定宽度格式导出数据?我的第二个问题是如何保留最合适的0。

例如,我想将{{1.12300, 11.12, 111.123},{2.1, 22.123, 222}}保存为文本文件

1.12300  11.12   111.123
2.10     22.123  222.00

详细说明,如果一个数字的尾数少于2位,则通过零填充匹配为2,而如果它的尾数超过2位,它将保留原样。我必须将1.123001.123区分开来。如果我使用PaddingForm,Mathematica会将其PaddedForm[1.123, {4, 5}]保存在文本文件中。

3 个答案:

答案 0 :(得分:1)

为了在1.12300等数字上保留尾随零,必须以字符串形式接收数据。然后可以这样处理。

data = "{{1.12300, 11.12, 111.123}, {2.1, 22.123, 222}}";

(* remove any whitespace *)
d1 = StringReplace[data, " " -> ""];

(* split the lists *)
d2 = StringSplit[StringTake[d1, {3, -3}], "},{"];

(* split the numbers *)
d3 = StringSplit[d2, ","];

(* magnitude of number except zero *)
mag[n_] := Floor[Log[10, Abs[n]]] + 1

(* format accordingly *)
d4 = Map[With[{x = ToExpression[#]},
     Which[x == 0, If[StringLength[#] > 4, #, "0.00"],
      FractionalPart[100 x] == 0,
      ToString@NumberForm[x, {mag[x] + 2, 2},
         ExponentFunction -> (Null &)],
      True, #]] &, d3, {2}];

(* pad output *)
len = Max[StringLength /@ Flatten[d4]] + 2;
d5 = Map[StringPadRight[#, len] &, d4, {2}];
d6 = StringJoin /@ d5;
Export["output.txt", d6];
Import["output.txt"]
1.12300  11.12    111.123
2.10     22.123   222.00

答案 1 :(得分:0)

这样的东西?

listt = {{1.12300, 11.12, 111.123}, {2.1, 22.123, 222}}

Export["C:/tcdata/list.txt", Flatten /@ listt, "Table"]

答案 2 :(得分:0)

使用

data = {{1.12300``6, 11.12``3,  111.123``4}, 
        {2.1``2,     22.123``4, 222``2}};

tbl1 = ToString[TableForm[data]];
tbl2 = StringReplace[tbl, "\n\n" -> "\n"]

获取

1.12300   11.12    111.123
2.1       22.123   222.0

如果您不想将数据作为一组字符串输入,则需要使用``指定数据的准确性。请参阅Mathematica的Numerical Precision教程。