Problema "Guardar archivo de texto"Hola a todos,
Me he arrancado el pelo (los últimos) en los últimos días en un script que no pude hacer funcionar en Windows mientras funcionaba bien en Mac OS. Después de mucha comparación, aclaré que se debía a una diferencia en la forma en que se crean los archivos de texto. Este archivo debe crearse porque sirve como entrada para otro programa que ejecuto dentro de JMP usando la función JSL "Ejecutar programa". Todo esto funciona bien en Mac. El pequeño código inicial que produce el archivo de texto es
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" );
En Mac OS, el archivo de texto de salida está perfectamente organizado como debería y se ve así:
{
"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"
},pero en Windows todo es como una línea larga y continua. Lo extraño es que ni siquiera puedo pegarlo aquí porque se ve bien, pero cuando lo abro en un editor de texto como Atom, los archivos se ven muy diferentes. Esta diferencia hace que el archivo sea ilegible para el ejecutable "Ejecutar programa". Pensé que tenía que ver con los caracteres ocultos, pero tanto en la versión de Mac como en la de Windows utilizo exactamente las mismas opciones de "guardar archivo de texto" (CR+LF y comas como final de campo) en mis preferencias y también utilizo el opción para guardar el archivo de texto como Unicode. No sé qué más probar. Cualquier ayuda/sugerencia será muy apreciada.
Saludos, Yves
Re: Problema "Guardar archivo de texto"Su solución funcionó a las mil maravillas, ¡muchas gracias de nuevo! Yves
Re: Problema "Guardar archivo de texto"Muchas gracias Craige por la explicación detallada. Los pruebo y reporto! Gracias de nuevo, Yves
Re: Problema "Guardar archivo de texto"Mac y Win (y Linux) tienen historias extrañas y diferentes sobre cómo se usan las nuevas líneas. Hay una serie de cosas que suceden aquí:
- está poniendo algún tipo de secuencia de nueva línea en su cadena. Puede variar entre Win y Mac.
- SaveTextFile puede estar realizando alguna conversión específica del host en las líneas nuevas. Puede variar...
- Diferentes editores pueden tratar las secuencias de nueva línea de manera diferente. Puede variar...
JMP puede controlar los dos primeros y lo más probable es que pueda encontrar un conjunto de caracteres de nueva línea que funcione para sus editores.
Para configurar las secuencias de nueva línea, pruebe una de estas para reemplazar cualquier secuencia de CR y LF con una secuencia predecible
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 o CRLF son las posibilidades habituales para una secuencia de nueva línea.
Para evitar que savetextfile convierta secuencias de nueva línea a lo que cree que necesita el host, guarde un blob:
saveTextFile( "$desktop/x.txt", chartoblob(lakepar) );
Para echar un vistazo a la cadena o el archivo, use un blob:
show(chartoblob(lakepar));
// or
show(loadtextfile( "$desktop/x.txt", blob));// to view
Cargar archivo de texto("$desktop/x.txt", blob) = Char To Blob( "abc~0D~0Adef~0D~0Aghiu", "ascii~hex" );
~0D es un CR y ~0A es un LF
Re: Problema "Guardar archivo de texto"debe ingresar caracteres de nueva línea donde los desee.En Windows, la secuencia de caracteres de nueva línea es \!n