concatenar dirección cambia de dirección cuando se usa texto árabequeridos miembros de la comunidad,
Tengo tres columnas (una de caracteres y dos numéricas) que me gustaría concatenar en una cadena larga como en la imagen y el archivo adjunto.
Por alguna razón, cuando el carácter está escrito en árabe, los resultados de la concatenación están en el orden incorrecto.
"('" || :word || "', " || Char( :abc ) || ", " || Char( :def ) || ")"

Esto no es bueno para mi aplicación ya que exporto la columna como una matriz en la siguiente etapa para usarla en SQL y todo el proceso falla.
Muchas gracias por tu comentario.
Automatización y secuencias de comandosventanasRe: concatenar dirección cambia de dirección cuando se usa texto árabeMuy interesante.Estoy seguro de que tiene que ver con la escritura del idioma árabe de derecha a izquierda.Por tanto, concatenar algo después de una palabra árabe, sería situarlo a la izquierda de la palabra.Le sugiero que vaya al soporte de JMP para obtener ayuda.
Re: concatenar dirección cambia de dirección cuando se usa texto árabeSí. No conozco las reglas, pero
x="واتساب ويب";
write("a"||x||",b")
/*:
aواتساب ويب,b
comparar con
x="واتساب ويب";
write("a"||x||",3")
/*:
aواتساب ويب,3
Personaje 3 vs personaje b.
Re: concatenar dirección cambia de dirección cuando se usa texto árabeEntonces parece que la cadena concatenada (internamente) es lo que espera, pero la presentación es diferente de lo que espera.

No tengo una respuesta, tal vez alguien más esté familiarizado con los comportamientos esperados de derecha a izquierda.
Re: concatenar dirección cambia de dirección cuando se usa texto árabeNo estoy seguro. Quizás no necesites cambiar nada. O tal vez necesites usar
https://en.wikipedia.org/wiki/Left-to-right_mark
y tal vez https://en.wikipedia.org/wiki/Right-to-left_mark (pero creo que no).
Por ejemplo
write(x);
write("\!n");
write("1",x,"\!U200E2");
/*:
واتساب ويب
1واتساب ويب2
\!U200E es la representación de JMP de la marca Unicode de izquierda a derecha. Estaría agregando ese carácter a la cadena para que se imprima de la forma esperada, pero arruinará las comparaciones de cadenas más adelante (tal vez... quién sabe sin realizar pruebas...)
Todavía no conozco las reglas. ¡También me interesa saber la respuesta!
Editar: cuando dije "es posible que no tengas que cambiar nada", quise decir que algunos analizadores podrían estar perfectamente satisfechos con el texto, que probablemente esté dispuesto exactamente en el orden de caracteres que necesitas en la memoria. Sé que parece desordenado cuando se muestra, pero puede que no sea así como lo ve el analizador SQL.
mas de https://en.wikipedia.org/wiki/Bidireccional_text --
Soporte bidi Unicode
El estándar Unicode exige que los caracteres se ordenen "lógicamente", es decir, en la secuencia en la que deben interpretarse, en lugar de "visualmente", la secuencia en la que aparecen. Esta distinción es relevante para el soporte bidi porque en cualquier transición bidi, la presentación visual deja de ser la "lógica". Por lo tanto, para ofrecer soporte bidi, Unicode prescribe un algoritmo sobre cómo convertir la secuencia lógica de caracteres en la presentación visual correcta. Para ello, el estándar de codificación Unicode divide todos sus caracteres en uno de cuatro tipos: "fuerte", "débil", "neutral" y "formato explícito".
Re: concatenar dirección cambia de dirección cuando se usa texto árabeEscribí al soporte como @txnelson sugirió. Espero tener noticias de ellos pronto.
qué @Craige_Hales escribió me hizo pensar que el error en mi caso depende del orden, así que intenté cambiar el orden de concatenación de la siguiente manera y parece que funciona, pero todavía no estoy seguro de por qué ni si es sólido.

Re: concatenar dirección cambia de dirección cuando se usa texto árabeEste problema también persiste cuando intento obtener la columna como una lista; en este caso, la cadena está torcida de una manera diferente.

Re: concatenar dirección cambia de dirección cuando se usa texto árabeEche un vistazo a las columnas adicionales de la tabla adjunta y las fórmulas que las crean.
Table with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTable with formulas to parse the Right to Left stringTabla con fórmulas para analizar la cadena de derecha a izquierda
Las primeras cuatro columnas son las originales. quotes_and_parens usa sustituto() para cambiar el apóstrofe por una comilla y los paréntesis por llaves. La columna de análisis muestra el resultado del análisis de quotes_and_parens. En este punto todavía parece inútil, pero mire el análisis 1,2,3: están extrayendo los elementos 1, 2 y 3 de la lista producida. en el orden que tenga sentido .
Su solución, colocar la cadena RtoL al final, funcionará igual, es igualmente robusta y tiene la ventaja de mostrarse correctamente.
El resultado que se muestra mal se debe a las reglas Unicode para mezclar y combinar cadenas RtoL y LtoR. El error solo ocurre cuando se muestra la cadena. La cadena interna es correcta y analizarla probablemente esté bien. Si SQL no puede analizarlo, parece extraño y difícil de explicar, suponiendo que SQL admita Unicode de lo contrario.
También encontré esto confuso, especialmente cuando intenté seleccionar texto que tiene partes de la selección invertidas de otras partes. Una vez que entendí que la reversión se estaba haciendo en el momento de la presentación, tuvo más sentido.
Re: concatenar dirección cambia de dirección cuando se usa texto árabeMuchas gracias @Craige_Hales
Ser NO WYSIWYG es muy contrario a la intuición. Obtener la columna como una lista también fue un intento de confirmar que la cadena final se podrá analizar en SQL de la forma necesaria para su aceptación. Visualmente no parecía que fuera a funcionar, ¡pero así fue!
Re: concatenar dirección cambia de dirección cuando se usa texto árabeHe recibido el siguiente mensaje del soporte de JMP:
comienzo de la cita "
Hola Ron,
Hablé de tu problema con el desarrollador responsable de la concatenación de cadenas.Si observa los caracteres Unicode que definen la cadena concatenada, se concatenan en el orden que especificó.Sin embargo, existen reglas de texto bidireccional Unicode para mostrar cadenas.Es la visualización de las cuerdas lo que indica su dirección inesperada.Internamente, la cadena se almacena como se esperaba.A continuación se muestra un breve ejemplo de JSL que el desarrollador proporcionó para ilustrar.
x = "?";
y = "0";
xy = x || y;
Show(xy, Hex(xy, "utf-16be"));
// xy = "?0";
// Hex(xy, "utf-16be") = "06280030";
U+0030 es el dígito cero y ocupa el segundo lugar.
También lo verifiqué guardando la cadena como un archivo de texto y abriéndola en un editor de texto de terceros que tenga un convertidor ASCII -> HEX.A continuación se muestra una captura de pantalla de los resultados.Después de convertir a Hex, reemplacé los códigos de espacio, coma y paréntesis con sus caracteres nuevamente para que sea más fácil de seguir.Observe los códigos para 0 al final de la representación hexadecimal, como era de esperar.

El desarrollador también proporcionó un enlace a un blog que puede ayudarle a lidiar con esto en su consulta de base de datos.
"fin de la cita
Por lo tanto, creo que ahora tenemos una respuesta integral que está en consonancia con lo que @Craige_Hales sugirió.