“保存文本文件”问题大家好,
在过去的几天里,我在一个脚本上扯掉了我的(最后几个)头发,我无法在 Windows 上工作,而它在 Mac OS 上运行良好。 经过多次比较,我阐明这是由于文本文件的创建方式不同所致。 需要创建此文件,因为它用作我在 JMP 中使用 JSL 函数“运行程序”运行的另一个程序的输入。 这在 Mac 上一切正常。 生成文本文件的最初一点代码是
filename = Eval Insert( "^simdir^^lakename^/^lakename^.par" );
lakepar = Eval Insert(
"\[{
"Input" : {
"Initial conditions" : "^simdir^^lakename^/icond.dat",
"Grid" : 24,
"Morphology" : "^simdir^^lakename^/hypso.dat",
"Forcing" : "^simdir^^lakename^/forcing.dat",
"Absorption" : "^simdir^^lakename^/lightextinction.dat",
"Inflow" : "^simdir^^lakename^/Qin.dat",
"Outflow" : "^simdir^^lakename^/Qout.dat",
"Inflow temperature" : "^simdir^^lakename^/Tin.dat",
"Inflow salinity" : "^simdir^^lakename^/Sin.dat"
},
.
.
.
.
}
}
]\"
);
Save Text File( filename, lakepar, "replace" );
在 Mac OS 上,输出的文本文件组织得井井有条,看起来像这样:
{
"Input" : {
"Initial conditions" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/icond.dat",
"Grid" : 24,
"Morphology" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/hypso.dat",
"Forcing" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/forcing.dat",
"Absorption" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/lightextinction.dat",
"Inflow" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/Qin.dat",
"Outflow" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/Qout.dat",
"Inflow temperature" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/Tin.dat",
"Inflow salinity" : "/Users/yvesprairie/Dropbox/sim3/Petit-Saut/Sin.dat"
},但在 Windows 上,它就像一条长而连续的包装线。 奇怪的是我什至无法将它粘贴到这里,因为它看起来不错,但是当我在像 Atom 这样的文本编辑器中打开它时,文件看起来非常不同。 这种差异使“运行程序”可执行文件无法读取该文件。 我认为它与隐藏字符有关,但在 Mac 和 Windows 版本中,我在我的首选项中使用完全相同的“保存文本文件”选项(CR+LF 和逗号作为字段结束符)并且我还使用将文本文件另存为 unicode 的选项。 我不知道还能尝试什么。 任何帮助/建议将不胜感激。
最好的问候,伊夫
回复:“保存文本文件”问题您的解决方案非常有效,再次非常感谢! 伊夫
回复:“保存文本文件”问题非常感谢 Craige 的详细解释。 我会尝试并报告! 再次感谢,伊夫
回复:“保存文本文件”问题Mac 和 Win(以及 Linux)在如何使用换行符方面有着奇怪的、不同的历史。 这里发生了很多事情:
- 您正在将某种换行符序列放入您的字符串中。 它可能因 Win 和 Mac 而异。
- SaveTextFile 可能在换行符上进行一些特定于主机的转换。 它可能会有所不同...
- 不同的编辑器可能会以不同的方式处理换行序列。 它可能会有所不同...
JMP 可以控制前两个,而且您很可能可以找到一组适合您的编辑器的换行符。
要设置换行符序列,请尝试使用其中一种方法将 CR 和 LF 的任何序列替换为可预测的序列
lakepar = regex(lakepar,"[\n\r]+","\!n",GLOBALREPLACE);
// or
lakepar = regex(lakepar,"[\n\r]+","\!r",GLOBALREPLACE);
// or
lakepar = regex(lakepar,"[\n\r]+","\!r\!n",GLOBALREPLACE);
LF、CR 或 CRLF 是换行序列的常见可能性。
为了防止 savetextfile 将换行符序列转换为它认为主机需要的内容,请保存一个 blob:
saveTextFile( "$desktop/x.txt", chartoblob(lakepar) );
要查看字符串或文件,请使用 blob:
show(chartoblob(lakepar));
// or
show(loadtextfile( "$desktop/x.txt", blob));// to view
加载文本文件("$desktop/x.txt", blob) = Char To Blob( "abc~0D~0Adef~0D~0Aghiu", "ascii~hex" );
~0D 是 CR,~0A 是 LF
回复:“保存文本文件”问题你需要在你想要的地方输入换行符。在 Windows 上,新行字符序列是 \!n