Problem "Textdatei speichern".Hallo allerseits,
Ich habe mir in den letzten Tagen meine (letzten) Haare an einem Skript ausgerissen, das ich unter Windows nicht zum Laufen bringen konnte, während es unter Mac OS einwandfrei funktionierte. Nach vielen Vergleichen stellte ich fest, dass dies auf einen Unterschied bei der Erstellung von Textdateien zurückzuführen war. Diese Datei muss erstellt werden, da sie als Eingabe für ein anderes Programm dient, das ich in JMP mit der JSL-Funktion "Programm ausführen" ausführe. Auf dem Mac funktioniert das alles einwandfrei. Das erste kleine Stück Code, das die Textdatei erzeugt, ist
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" );
Unter Mac OS ist die ausgegebene Textdatei ordentlich organisiert und sieht so aus:
{
"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"
},aber unter Windows ist das alles wie eine lange und endlos umlaufende Linie. Das Seltsame ist, dass ich es hier nicht einmal einfügen kann, weil es in Ordnung aussieht, aber wenn ich es in einem Texteditor wie Atom öffne, sehen die Dateien ganz anders aus. Dieser Unterschied macht die Datei für die ausführbare Datei "Programm ausführen" unlesbar. Ich dachte, es hat mit versteckten Zeichen zu tun, aber sowohl in der Mac- als auch in der Windows-Version verwende ich in meinen Einstellungen genau die gleichen Optionen zum Speichern von Textdateien (CR + LF und Kommas als Feldende) und ich verwende auch die Option zum Speichern einer Textdatei als Unicode. Ich weiß nicht, was ich noch versuchen soll. Jede Hilfe/Anregung wird sehr geschätzt.
Beste Grüße, Yves
Betreff: Problem "Textdatei speichern".Ihre Lösung hat wie am Schnürchen funktioniert, nochmals vielen Dank! Yves
Betreff: Problem "Textdatei speichern".Vielen Dank Craige für die ausführliche Erklärung. Ich werde sie ausprobieren und berichten! Nochmals vielen Dank, Yves
Betreff: Problem "Textdatei speichern".Mac und Win (und Linux) haben seltsame, unterschiedliche Geschichten darüber, wie Zeilenumbrüche verwendet werden. Hier tut sich einiges:
- Sie fügen eine Art Zeilenumbruch in Ihren String ein. Es kann zwischen Win und Mac variieren.
- SaveTextFile führt möglicherweise einige hostspezifische Konvertierungen an den Zeilenumbrüchen durch. Kann variieren...
- Verschiedene Editoren können Zeilenumbrüche unterschiedlich behandeln. Kann variieren...
JMP kann die ersten beiden steuern, und höchstwahrscheinlich finden Sie eine Reihe von Zeilenumbruchzeichen, die für Ihre Editoren geeignet sind.
Um die Newline-Sequenzen festzulegen, versuchen Sie eine davon, um jede Sequenz von CR und LF durch eine vorhersagbare Sequenz zu ersetzen
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 oder CRLF sind die üblichen Möglichkeiten für eine Zeilenumbruchsequenz.
Um zu verhindern, dass savetextfile Zeilenumbrüche in das umwandelt, was der Host seiner Meinung nach benötigt, speichern Sie einen Blob:
saveTextFile( "$desktop/x.txt", chartoblob(lakepar) );
Verwenden Sie einen Blob, um einen Blick auf die Zeichenfolge oder Datei zu werfen:
show(chartoblob(lakepar));
// or
show(loadtextfile( "$desktop/x.txt", blob));// to view
Textdatei laden ("$desktop/x.txt", blob) = Char To Blob( "abc~0D~0Adef~0D~0Aghiu", "ascii~hex" );
~0D ist ein CR und ~0A ist ein LF
Betreff: Problem "Textdatei speichern".Sie müssen die New Line-Zeichen dort eingeben, wo Sie sie haben möchten.Unter Windows ist die Zeilenumbruchzeichenfolge \!n