PDA

Ver la Versión Completa : Problema con un STRING


Tecnic2
15-11-2004, 20:22:47
Hola a todos,

Mi aplicacion abre un cajón portamonedas, lo abre bien a través del comando
WriteLn(F, cadena), donde cadena es un string con el texto para abrir el cajón, en mi caso: #27+'p0'+#100+#0, y F es un fichero direccionado al LPT1.

De momento lo estoy abrieno de ésta forma: WriteLn(F, #27+'p0'+#100+#0)
porque como podeis ver, el estring contiene los caracteres # + ' entre otros, lo que me supone un problema, ya que lo que yo hago es que en el apartado de configuracion del programa el usuario me escribe la cadena y yo la paso a una variable para utilizarla en cualquier momento que quiera abrir el cajón, pero cuando la paso a la variable, Delphi me interpreta los símbolos y me da errores.

Alguna solucion?

Muchas gracias por adelantado.

delphi.com.ar
15-11-2004, 21:25:41
Hay ciertos caracteres que no podrás ingresar en un TEdit común, yo te recomendaría que le hagas ingresar la cadena en hexadecimal o byte por byte.
No se si con "interpreta los símbolos" quieres decir que la cadena que esta pasando es: '#27+''p0''+#100+#0' en lugar de #27'p0'#100#0, porque si va a ser así. Si quieres que te ingrese una cadena con esa nomenclatura vas a tener que encargarte de parsearla y convertirla a su representación en ASCII.

Saludos!

Tecnic2
16-11-2004, 09:55:59
Gracias por responder tan pronto...

Verás, la seqüencia de caracteres para enviar al LPT1 y así abrir el cajón portamonedas es la siguiente: #27+'p0'+#100+#0
Todo lo que está en negrita es lo que necesita para abrirlo, ni mas ni menos.
Lo que me encuentro es que al asignar mi variable global "cajon" de tipo String a ésta seqüencia el Delphi me da error, ya que interpreta cada comilla simple como un principio o final de cadena, y el resto "le sobra". O almenos eso es lo que yo entiendo.

Ayuda algo lo que he dicho ahora?

Muchas gracias.

scooterjgm
16-11-2004, 10:12:10
prueba a poner lo sisguiente:

'#27+''p0''+#100+#0'

en lugar de una comilla pon dos juntas, delphi las interpretara como una ;)

Creo q es esto lo q pides....

delphi.com.ar
16-11-2004, 14:17:21
Lo que me encuentro es que al asignar mi variable global "cajon" de tipo String a ésta seqüencia el Delphi me da error, ya que interpreta cada comilla simple como un principio o final de cadena, y el resto "le sobra".
¿Porqué no nos muestras el fragmento de código y el mensaje de error?

Saludos!

Tecnic2
16-11-2004, 18:26:28
El problema exacto es el siguiente:

La seqüencia para abrir el cajón la tengo en un fichero .ini, el cual leo al abrir mi aplicacion y asigno a una variable de tipo String llamada "cajon".
Entonces, cuando quiero abrir el cajon a través del comando WriteLn(F, cajon), en lugar de abrirlo me imprime la seqüencia en la impresora; pero cuando pongo el comando WriteLn(F, #27+'p0'+#100+#0) abre el cajon sin problemas.

Puede ser problema de la variable de tipo String?

Nota: El cajon va a través de la impresora al puerto LPT1, al cual el fichero F está asignado.

Gracias.

Lepe
17-11-2004, 11:43:24
Al parecer Tecnic2 se resiste a poner el código, así que me aventuraré a contestar:

El problema no es de del tipo string, acabo de escribir tu cadena en un edit, pasarlo a una variable string y despues mostrarlo por pantalla y todo va bien.

Lo unico que intuyo, es que al enviar la cadena por el puerto, el último caracter lo tome como caracter nulo y sea interpretado, en lugar de tormarlo literalmente, y por tanto, la secuencia de apertura no es la correcta. ¿Divagaciones mias? :confused::D

Intenta: WriteLn(F, cajon+#0) a ver que pasa

Otra cosa es que la cadena deba ser interpretada antes de enviarla. Sin usar la variable, estas escribiendo codigos de control no??

Saludos

Tecnic2
17-11-2004, 11:57:24
A ver, os voy a poner el fragmento de código:
Recuerdo que la cadena para abrir el cajon es: #27+'p0'+#100+#0

var
cajon : String;
F : TextFile;
Ini : TIniFile;

begin
Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'));
AssignFile(F, 'LPT1');
Rewrite(F);

cajon := FicheroIni.ReadString('LPT1', 'CAJON', '-');
WriteLn(F, cajon);
end;

WriteLn no me abre el cajon, sino que me escribe el texto en la impresora.

Gracias por vuestra paciencia :(

delphi.com.ar
17-11-2004, 13:52:09
Vuelvo a repetir:
Si quieres que te ingrese una cadena con esa nomenclatura vas a tener que encargarte de parsearla y convertirla a su representación en ASCII.

Si el archivo INI es algo como:
[LPT1]
CAJON=#27+'p0'+#100+#0
Te comento que si haces eso, esta mal, ya que lo que estas poniendo no es meramente un string sino código Delphi que alguien se tiene que encargar de Compilarlo o Interpretarlo.

Saludos!

Tecnic2
17-11-2004, 16:19:11
Necesito coger de un fichero .ini una cadena, la cual me abrirá el cajon portamodenas, para así, si el usuario lo desea, podrá cambiar de impressora sin problemas. Solo tendrá que modificar la cadena en las opcione del programa y listo.

Necesito una solucion, estoy bastante perdidillo.:confused:

Tecnic2
19-11-2004, 12:51:52
Bueno, comentaros que al final hice una funcion que convertía los caracteres #27 en chr(27) y por lo tanto en un símbolo y finalmente funcionó.

Deciros que muchas gracias a todos por responder a mis cuestiones.

Hasta otra.

roman
19-11-2004, 16:48:26
hice una funcion que convertía los caracteres #27 en chr(27)


A esto es a lo que se refería Federico. El símbolo # usado para especificar un caracter por su código ASCII sólo lo entiendo el compilador. Durante la ejecución, # deja de tener un sentido especial y se interpreta como cualquier otro caracter.

// Saludos