meilleures pratiques autour des caractères spéciaux en JSL ?example="blah blah Width = 25.0 �m ..some more stuff";
widthtext=regex(example,"Width\s=\s+\d+[.]\d+\s[\w?�]m");<BR /><BR />widthtext=regex(example,"Width\s=\s+\d+[.]\d+\s[\w?\x{FFFD}]m");Désolé, il s'agit moins d'un problème très spécifique qu'un problème général sur lequel je recherche des recommandations car j'ai rencontré ce problème dans différents contextes.
Dans cet exemple spécifique, j'utilise loadtextfile() pour obtenir du texte que je dois analyser et ce texte peut contenir des caractères spéciaux.ici, j'utilise la variable "exemple" pour montrer à quoi cela ressemble pour JMP - il a remplacé quelque chose par un symbole "mystère". (au cas où il ne continuerait pas à apparaître ici, c'est un diamant noir avec un point d'interrogation dedans.) Je sais que ce symbole est unicode FFFD (et je sais dans ce cas qu'à l'origine c'était un mu, pour les microns mais je ne suis pas sûr quel encodage particulier il avait et que JMP ne pouvait pas comprendre).Je sais qu'il existe des options dans les préférences pour le jeu de caractères à utiliser lors du chargement du fichier texte, donc peut-être que je pourrais faire des essais et des erreurs jusqu'à ce que cela apparaisse vraiment comme un mu.Mais comme mon script examine beaucoup de fichiers différents, je ne suis pas sûr de pouvoir définir une préférence qui n'entraînera pas ce problème de ne pas réussir à trouver un personnage et, de toute façon, mon problème est vraiment de savoir comment parler d'un personnage spécial. personnage dans mon script, pas avec "mystère" au lieu de mu.
Dans l'exemple ci-dessus j'ai collé le caractère tel qu'il était affiché dans le log JMP afin de l'avoir en JSL (deuxième ligne de code RegEx).Ça marche.contain() fonctionne également avec le gadget spécial collé comme argument.Mais lorsque j'enregistre le JSL et que je le rouvre, le caractère spécial est remplacé par ? et le code utilisant le symbole collé ne fonctionne plus.apparemment, tous les caractères spéciaux de JSL risquent de se perdre.
Ma troisième ligne corrige cela pour RegEx.Je peux appeler le caractère par numéro afin qu'il s'exécute après l'ouverture - dans le cas où, au lieu d'un exemple codé en dur, j'ouvre un fichier texte et contient ces symboles. Mais que se passe-t-il si je veux faire d’autres choses avec des cordes ?jusqu'à présent, j'ai converti un contain() en un regex() mais existe-t-il d'autres moyens d'utiliser des symboles en JSL ?
J'ai rencontré des problèmes similaires concernant les lettres grecques utilisées par JMP dans ses rapports (comme un sigma).Je souhaite écrire du code qui teste du texte dans le rapport, mais si je colle le symbole, le JSL sera remplacé.Ce sont des symboles que JMP choisit et utilise et pourtant je ne peux pas les utiliser de manière robuste dans mon JSL.
Re : bonnes pratiques autour des caractères spéciaux en JSL ?Merci!Re : bonnes pratiques autour des caractères spéciaux en JSL ?Oui
x = "\!U266b";
Show( x ); // "♫"
y = Char To Blob( x, encoding = "utf-16be" );
Show( Hex( y ) ); // "266B"
si vous voyez le caractère de remplacement Unicode (le point d'interrogation dans un losange noir), vous pouvez également avoir d'autres caractères mappés sur le caractère de remplacement. Si possible, trouvez le bon jeu de caractères pour éviter le problème plusieurs-à-un.
Il existe peut-être un moyen plus intelligent que l'extrait ci-dessus. La fonction CharToBlob convertit le caractère en une représentation Unicode big-endian 16 bits, et la fonction Hex convertit le blob en hexadécimal imprimable.
Si vous ne spécifiez pas le jeu de caractères d'encodage pour CharToBlob, il sera par défaut UTF-8, et pour ce caractère particulier, vous obtiendrez une valeur de 3 octets, "E299AB". page fileformat.info pour les CROCHES BEAMED
Re : bonnes pratiques autour des caractères spéciaux en JSL ?Merci!ce qui me manquait, c'était de savoir comment en parler en JSL en dehors de l'expression régulière d'une manière qui ne serait pas remplacée dans le fichier JSL et je vois dans votre exemple comment...
"\!UFFFD"
Cela soulève cependant une question connexe sur ce qu'est le caractère et ce n'est pas tant que je veux que JMP trouve le bon jeu de caractères pour ouvrir le fichier (un tout autre problème) mais que je veux parler du caractère utilisé par JMP dans JSL. et ne pas corrompre le JSL à la fermeture et à l'ouverture du fichier.
Dans ce cas, j'ai recherché le personnage assez facilement et j'ai trouvé un code qui l'identifiait et cela fonctionnait dans JMP. Supposons que j'ai le caractère dans JMP dans le journal (peut-être que JMP a trouvé et signalé un caractère mu ou dit que c'est le sigma que JMP lui-même utilise dans un rapport - pour le code qui analysera du texte, je me soucie uniquement de ce que JMP utilise comme caractères dans ce texte)... existe-t-il un moyen direct d'obtenir un code comme "UFFFD" pour le caractère que JMP utilise réellement ?quelque chose comme what_is_this_character("�") .Lorsque je continue à rencontrer ce problème, je peux généralement voir, copier et coller le caractère tel qu'utilisé par JMP et c'est le contexte dans lequel je souhaite en parler de manière robuste dans JSL.
Merci!
Re : bonnes pratiques autour des caractères spéciaux en JSL ?Le point d'interrogation en forme de losange est le caractère de remplacement Unicode.
JMP préfère Unicode, mais peut deviner d'autres jeux de caractères avec plus ou moins de succès.
JMP peut également essayer de conserver le jeu de caractères d'un fichier lorsqu'il est réenregistré, mais si le fichier contient des séquences d'octets qui ne sont pas valides dans le jeu de caractères d'entrée, elles deviennent le caractère de remplacement et le point d'interrogation dans une conversion de jeu de caractères non Unicode. (Je pense qu'une variante de ceci est ce qui s'est passé dans votre exemple.)
Il est possible que vous puissiez sélectionner le bon jeu de caractères (préférences), et il est également possible que le fichier utilise mu à partir d'un jeu de caractères non Unicode tout en prétendant être un fichier Unicode avec une marque d'ordre d'octet.
Il existe un certain nombre de sites Web qui facilitent l'obtention des données hexadécimales Unicode ; J'ai utilisé la table des caractères Windows ici :
Unicode escapeUnicode escapeÉchappement Unicode
(modifier) Si vous ouvrez à nouveau le fichier, je vous suggère d'essayer Windows 1252 comme point de départ. Je pense que Load Text File propose des options pour spécifier le jeu de caractères sans utiliser les préférences.
Set it back to Best Guess when doneSet it back to Best Guess when doneRemettez-le à Best Guess une fois terminé