Ir al contenido


Foto

[RESUELTO] Bug en QuoteStr desde d2010??


  • Por favor identifícate para responder
3 respuestas en este tema

#1 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 27 octubre 2011 - 04:53

Buenas,

Estaba haciendo unas pruebas y me he encontrado con una desagradable sorpresa en d2010 y XE2

Pongo en un formulario un botón y en el OnClic pongo este código



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   l: string;
  4. begin
  5.   l := 'hoho';
  6.   l := QuotedStr(l);
  7.   ShowMessage(l);
  8. end;



Esto debería de devolverme 'hoho', pero en D2010 y XE2 me está devolviendo ''hoho'', es decir, me pone 2 carácteres '

En cambio, este mismo código en D6 y D2007 me hace lo que realmente tiene que hacer.

Y me diréis, bueno, sí, quisás es un bug, pero puedes cabiar el QuotedStr por '''' + texto + '''', es decir



delphi
  1.   l := '''' + l + '''';



Pues bien, nuevamente en D6 y D2007 me funciona correcto, pero en D2010 y XE2 me sigue poniendo 2 carácteres ' 

Alguien que tenga estas versiones de Delphi me lo puede corroborar? Es que ya no se si es que me estoy flipando, si hago algo mal o si símplemente es que soy raro xD

Nos leemos
cadetill
  • 0

#2 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 27 octubre 2011 - 06:12

Hola xiquet, un plaer saludar-te.

¿ Te pone una doble comilla o te pone dos comillas ?. En el primer caso (que es lo que dices) sería rarísimo, y en el segundo caso parecería que en esa versión ha cambiado de terminador.

He consultado la documentación, para ver si hay una variable de sistema donde configurar el terminador de cadena, y me he encontrado la curiosidad de que esta función existe en dos Units distintas. Así que sería útil que probaras :

[pascal]  l := SysUtils.QuotedStr(l);
  ShowMessage(l);
  l := AnsiStrings.QuotedStr(l);
  ShowMessage(l);
[/pascal]

También me ha parecido curiosa esta anotación :

Note: When working with multi-byte character systems (MBCS), use AnsiQuotedStr instead.


Así que si estás trabajando con Unicode, deberías probar :

[pascal]  l := AnsiQuotedStr(l, '''');
  ShowMessage(l);[/pascal]


Salut i força al canut 
  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 27 octubre 2011 - 06:23

Buenas,

Estaba haciendo unas pruebas y me he encontrado con una desagradable sorpresa en d2010 y XE2

Pongo en un formulario un botón y en el OnClic pongo este código



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   l: string;
  4. begin
  5.   l := 'hoho';
  6.   l := QuotedStr(l);
  7.   ShowMessage(l);
  8. end;



Lo acabo de probar en mi Delphi 2010, en un proyecto totalmente nuevo, y por defecto me sale bien.

El problema aparece cuando añado la Unit AnsiStrings y llamo a su QuotedStr, entonces es cuando pone las dos comillas.

En cambio llamando a AnsiQuotedStr, tanto de la Unit AnsiStrings como de SysUtils, funciona correctamente.

Así que puedes sortear el problema, llamando explícitamente a SysUtils.QuotedStr, o bien utilizando AnsiQuotedStr (la segunda opción parece más robusta, mientras que la primera tiene la ventaja que puedes hacer un Search&Replace en todo el proyecto, sin tener que añadir nada manualmente).

Salut.
  • 0

#4 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 27 octubre 2011 - 10:36

Hola de nuevo

¿Qué tal Marc? ¿Cómo va por esas tierras del sur?

Bueno, referente al problema sólo decir que se me ha ido la olla de mala manera jejejeje Funciona correctamente en todas las versiones de Delphi.

La cosa es que estoy haciendo unos componentes para encapsular lo que he ido explicando en los artículos sobre Google Maps y bien, la cosa es la siguiente:

- cargo una página inicial que contiene todo el JS y una inicialización del mapa
- hago llamadas a funciones JS para retocar la interfaz del mapa

Las funciones JS llevan parámetros y en debug, en las versiones D2020 y XE2 aparecen las variables como comento más arriba, aunque realmente sea una comilla simple.

Y como me fallaba la llamada al JS, pues yo le hechaba la culpa a eso, cuando no tenía nada que ver. Ahora que he encontrado el fallo, a ver si lo miro de solucionar, que realmente no se cómo hacerlo. Pero eso ya lo pregunto en otro hilo :)

Nos leemos
cadetill
  • 0




IP.Board spam blocked by CleanTalk.