如何在保留信号图的同时将 Mathematica 列表导出为固定宽度的文本文件?
How to export a Mathematica list as a fixed-width text file while preserving sig figs?
我的第一个问题是如何使用 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.12300
和 1.123
对我来说很重要。如果我使用 PaddingForm
,Mathematica 会将其直接保存为文本文件中的 PaddedForm[1.123, {4, 5}]
。
是这样的吗?
listt = {{1.12300, 11.12, 111.123}, {2.1, 22.123, 222}}
Export["C:/tcdata/list.txt", Flatten /@ listt, "Table"]
为了保留 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
使用
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 教程。
我的第一个问题是如何使用 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.12300
和 1.123
对我来说很重要。如果我使用 PaddingForm
,Mathematica 会将其直接保存为文本文件中的 PaddedForm[1.123, {4, 5}]
。
是这样的吗?
listt = {{1.12300, 11.12, 111.123}, {2.1, 22.123, 222}}
Export["C:/tcdata/list.txt", Flatten /@ listt, "Table"]
为了保留 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
使用
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 教程。