cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
JMP is taking Discovery online, April 16 and 18. Register today and join us for interactive sessions featuring popular presentation topics, networking, and discussions with the experts.
Choose Language Hide Translation Bar
yvesprairie
Level IV

"Save text file" issue

Hi everyone,

 

I have ripping my (last few) hair out over the past couple of days on a script that I could not get to work on Windows while it was working fine on Mac OS. After much comparison, I elucidated that it was due to a difference on how text file are created. This file needs to be created because it serves as input to another program that I run within JMP using the JSL function "Run program". This all works fine on Mac. The initial little bit of code that produces the text file is 

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" );

On Mac OS, the output text file is all neatly organized as it should and looks like:

{
  "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"
  },

but on Windows it is all like a long and continuously wrapping line. The odd thing is that I cannot even paste it here because it looks ok but when I open it in a text editor like Atom, then the files looking very different. This difference makes the file unreadable by the "Run program" executable. I thought it has to do with hidden characters but in both the Mac and Windows version I use exactly the same "save text file" options (CR+LF, and commas as end-of-field) in my preferences and I also use the option to save text file as unicode. I don't know what else to try. Any help/suggestion will be greatly appreciated.

 

Best regards, Yves 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Craige_Hales
Super User

Re: "Save text file" issue

Mac and Win (and Linux) have odd, different histories on how newlines are used. There are a number of things happening here: 

  • you are putting some sort of newline sequence into your string. It may vary between Win and Mac.
  • SaveTextFile may be doing some host specific conversion on the newlines. It may vary...
  • Different editors may treat newline sequences differently. It may vary...

JMP can control the first two, and most likely you can find a set of newline characters that works for your editors.

 

To set the newline sequences, try one of these to replace any sequence of CR and LF with a predictable sequence

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, or CRLF are the usual possibilities for a newline sequence.

 

To prevent savetextfile from converting newline sequences to what it thinks the host needs, save a blob:

saveTextFile( "$desktop/x.txt", chartoblob(lakepar) );

To peek at the string or file, use a blob:

show(chartoblob(lakepar));
// or
show(loadtextfile( "$desktop/x.txt", blob));// to view

Load Text File("$desktop/x.txt", blob) = Char To Blob( "abc~0D~0Adef~0D~0Aghiu", "ascii~hex" );

~0D is a CR and ~0A is a LF

Craige

View solution in original post

4 REPLIES 4
txnelson
Super User

Re: "Save text file" issue

youi need to enter in New Line characters where you want them.  On windows the new line character sequence is \!n

Jim
Craige_Hales
Super User

Re: "Save text file" issue

Mac and Win (and Linux) have odd, different histories on how newlines are used. There are a number of things happening here: 

  • you are putting some sort of newline sequence into your string. It may vary between Win and Mac.
  • SaveTextFile may be doing some host specific conversion on the newlines. It may vary...
  • Different editors may treat newline sequences differently. It may vary...

JMP can control the first two, and most likely you can find a set of newline characters that works for your editors.

 

To set the newline sequences, try one of these to replace any sequence of CR and LF with a predictable sequence

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, or CRLF are the usual possibilities for a newline sequence.

 

To prevent savetextfile from converting newline sequences to what it thinks the host needs, save a blob:

saveTextFile( "$desktop/x.txt", chartoblob(lakepar) );

To peek at the string or file, use a blob:

show(chartoblob(lakepar));
// or
show(loadtextfile( "$desktop/x.txt", blob));// to view

Load Text File("$desktop/x.txt", blob) = Char To Blob( "abc~0D~0Adef~0D~0Aghiu", "ascii~hex" );

~0D is a CR and ~0A is a LF

Craige
yvesprairie
Level IV

Re: "Save text file" issue

Thank you so much Craige for the detailed explanation. I will try them and report! Thanks again, Yves

yvesprairie
Level IV

Re: "Save text file" issue

Your solution worked like a charm, thank you very much again! Yves