Problème "Enregistrer le fichier texte"Salut tout le monde,
Je me suis arraché les (derniers) cheveux au cours des deux derniers jours sur un script que je ne pouvais pas mettre au travail sous Windows alors qu'il fonctionnait bien sous Mac OS. Après de nombreuses comparaisons, j'ai compris que cela était dû à une différence dans la création des fichiers texte. Ce fichier doit être créé car il sert d'entrée à un autre programme que j'exécute dans JMP à l'aide de la fonction JSL "Exécuter le programme". Tout cela fonctionne bien sur Mac. Le petit bout de code initial qui produit le fichier texte est
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" );
Sur Mac OS, le fichier texte de sortie est bien organisé comme il se doit et ressemble à :
{
"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"
},mais sous Windows, c'est comme une longue ligne qui s'enroule en continu. Ce qui est étrange, c'est que je ne peux même pas le coller ici parce que ça a l'air bien mais quand je l'ouvre dans un éditeur de texte comme Atom, les fichiers ont l'air très différents. Cette différence rend le fichier illisible par l'exécutable "Exécuter le programme". Je pensais que cela avait à voir avec les caractères cachés, mais dans la version Mac et Windows, j'utilise exactement les mêmes options "enregistrer le fichier texte" (CR + LF et virgules comme fin de champ) dans mes préférences et j'utilise également le option pour enregistrer le fichier texte au format unicode. Je ne sais pas quoi essayer d'autre. Toute aide/suggestion sera grandement appréciée.
Cordialement, Yves
Re: Problème "Enregistrer le fichier texte"Votre solution a fonctionné comme un charme, merci beaucoup encore! Yves
Re: Problème "Enregistrer le fichier texte"Merci beaucoup Craige pour l'explication détaillée. Je vais les essayer et signaler! Merci encore Yves
Re: Problème "Enregistrer le fichier texte"Mac et Win (et Linux) ont des histoires étranges et différentes sur la façon dont les nouvelles lignes sont utilisées. Il se passe plusieurs choses ici :
- vous mettez une sorte de séquence de saut de ligne dans votre chaîne. Cela peut varier entre Win et Mac.
- SaveTextFile peut effectuer une conversion spécifique à l'hôte sur les nouvelles lignes. Cela peut varier...
- Différents éditeurs peuvent traiter les séquences de retour à la ligne différemment. Cela peut varier...
JMP peut contrôler les deux premiers, et vous pouvez très probablement trouver un ensemble de caractères de retour à la ligne qui fonctionne pour vos éditeurs.
Pour définir les séquences de nouvelle ligne, essayez l'une d'entre elles pour remplacer toute séquence de CR et LF par une séquence prévisible
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 ou CRLF sont les possibilités habituelles pour une séquence de retour à la ligne.
Pour empêcher savetextfile de convertir les séquences de nouvelle ligne en ce dont il pense que l'hôte a besoin, enregistrez un blob :
saveTextFile( "$desktop/x.txt", chartoblob(lakepar) );
Pour jeter un coup d'œil à la chaîne ou au fichier, utilisez un blob :
show(chartoblob(lakepar));
// or
show(loadtextfile( "$desktop/x.txt", blob));// to view
Charger le fichier texte("$desktop/x.txt", blob) = Char To Blob( "abc~0D~0Adef~0D~0Aghiu", "ascii~hex" );
~0D est un CR et ~0A est un LF
Re: Problème "Enregistrer le fichier texte"vous devez entrer des caractères de nouvelle ligne là où vous le souhaitez.Sous Windows, la nouvelle séquence de caractères de ligne est \!n