Problema "Salva file di testo".Ciao a tutti,
Mi sono strappato i capelli (gli ultimi) negli ultimi due giorni su uno script che non riuscivo a far funzionare su Windows mentre funzionava bene su Mac OS. Dopo molti confronti, ho chiarito che era dovuto a una differenza nel modo in cui vengono creati i file di testo. Questo file deve essere creato perché serve come input per un altro programma che eseguo all'interno di JMP utilizzando la funzione JSL "Esegui programma". Funziona tutto bene su Mac. Il bit iniziale di codice che produce il file di testo è
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" );
Su Mac OS, il file di testo di output è tutto organizzato in modo ordinato come dovrebbe e ha il seguente aspetto:
{
"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"
},ma su Windows è tutto come una lunga e continua linea di avvolgimento. La cosa strana è che non riesco nemmeno a incollarlo qui perché sembra ok ma quando lo apro in un editor di testo come Atom, i file sembrano molto diversi. Questa differenza rende il file illeggibile dall'eseguibile "Esegui programma". Ho pensato che avesse a che fare con i caratteri nascosti, ma sia nella versione Mac che in quella Windows utilizzo esattamente le stesse opzioni di "salva file di testo" (CR+LF e virgole come fine campo) nelle mie preferenze e utilizzo anche il opzione per salvare il file di testo come unicode. Non so cos'altro provare. Qualsiasi aiuto/suggerimento sarà molto apprezzato.
Cordiali saluti, Yves
Re: Problema "Salva file di testo".La tua soluzione ha funzionato a meraviglia, grazie mille ancora! Yves
Re: Problema "Salva file di testo".Grazie mille Craige per la spiegazione dettagliata. Li proverò e riferirò! Grazie ancora Yves
Re: Problema "Salva file di testo".Mac e Win (e Linux) hanno storie strane e diverse su come vengono utilizzate le nuove righe. Ci sono una serie di cose che accadono qui:
- stai inserendo una sorta di sequenza di nuova riga nella tua stringa. Può variare tra Win e Mac.
- SaveTextFile potrebbe eseguire alcune conversioni specifiche dell'host sulle nuove righe. Può variare...
- Diversi editor possono trattare le sequenze di nuova riga in modo diverso. Può variare...
JMP può controllare i primi due e molto probabilmente puoi trovare un set di caratteri di nuova riga che funziona per i tuoi editor.
Per impostare le sequenze di nuova riga, prova una di queste per sostituire qualsiasi sequenza di CR e LF con una sequenza prevedibile
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 sono le solite possibilità per una sequenza di nuova riga.
Per impedire a savetextfile di convertire le sequenze di nuova riga in ciò che ritiene necessario all'host, salva un BLOB:
saveTextFile( "$desktop/x.txt", chartoblob(lakepar) );
Per sbirciare la stringa o il file, usa un blob:
show(chartoblob(lakepar));
// or
show(loadtextfile( "$desktop/x.txt", blob));// to view
Carica file di testo("$desktop/x.txt", blob) = Char To Blob( "abc~0D~0Adef~0D~0Aghiu", "ascii~hex" );
~0D è un CR e ~0A è un LF
Re: Problema "Salva file di testo".devi inserire i caratteri New Line dove li vuoi.Su Windows la sequenza di caratteri della nuova riga è \!n