Jump to content


Photo

Ejecutar bloques de código contenidas en un TXT


  • Please log in to reply
9 replies to this topic

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 14 July 2011 - 09:12 PM

Pues eso, quiero hacer lo siguiente, en un sistema que estoy realizando los reportes se harán a través de canvas debido a que se imprimirán en hojas predefinidas, y los codigos los quiero tener en un archivo TXT en vez de estar dentro del ejecutable, hacer algo como:



delphi
  1. procedure PrintReport(rID: Integer);
  2. begin
  3.   case rID of
  4.     0: CallTxtReport('conduce1.txt');
  5.     1: CallTxtReport('conduce2.txt');
  6.   end;
  7. end;



Donde CallTxtReport sería la función que ejecute o interprete el codigo contenida en el txt, eso es con el fin de poder editar la impresión sin usar delphi, simplemente modificando el archivo TXT, ¿es posible hacer eso?

Saludos.


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 14 July 2011 - 10:01 PM

Y porque no usar un INI, digo, el INI te facilita la vida cuando quieres obtener valores desde fuera de un programa ;)

Salud OS
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 15 July 2011 - 04:40 AM

Es posible con reservas. Tendrías que inventarte una especie de interprete y un lenguaje específico. Si las acciones que vas a realizar desde esos archivos de texto, son pocas y concretas, puedes hacerlo sin muchos problemas, parecido a como se hace en los ejecutables de consola con paso de parámetros...

Saludos.

  • 0

#4 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 15 July 2011 - 05:29 AM

Yo uso para algo similar (no mucho pero bueno) un componenete llamado DWS (Delphi Web Script) que es un interprete de pascal dentor de delphi.

Le puedes añadir funciones a tu DWS para que interactue con QuickReport, por ejemplo añadir una instruccion que sea AddHeader(Titulo: string) y que haga en el "laod delphi" lo que tu prefieras.

Personalment euso una version de DWS muy antigua, cuando era un lenguaje sencillito, ahora es orientado a objeto, con tipos que hay que declarar... mi version es mas tipo "spaguetti" y las varialbes se decide su tipo en su primer uso... una gazada para macros y cosas asi puntuales.
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 15 July 2011 - 06:59 AM

Gracias a todos por contestar:

@escafandra: Pues los TXT más bien plantillas de impresión en canvas, hara consultas, while, for, format, las funciones que se usan normalmente en ese tipo de impresiones.

@Sergio: Voy a revisar ese componente a ver qué se cuela.

Saludos.
  • 0

#6 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 15 July 2011 - 07:12 AM

Saludos.

Por lo regular he visto en los códigos de los creadores de componentes que utilizan directivas del compilador, específicamente Include,  para realizar llamadas a métodos que existen en un "TXT".

En lo personal todavía no me he sentado a analizar como lo logran, pero te puede servir.
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 15 July 2011 - 07:19 AM

Gracias Rolphy!, haré una investigación al respecto. (y)

Saludos.
  • 0

#8 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 posts
  • LocationMéxico

Posted 15 July 2011 - 11:03 AM

YO TENGO MI PROPIO REPORTEADOR UTILIZANDO COMO PLANTILLAS ARCHIVOS INI



[ini]
*----------------------------
* Fecha: 17-MAR-2003
* Elavoro: pcicom
* Documento: CONTRATO DE CONSIGNACION
*----------------------------
[CONFIG]
Largo=27.8
Copias=1
[ENCABEZADO]
*-----------------------
*  BMP del Formato del DOCUMENTO
*-----------------------
    Logotipo "COMPRA.BMP",0,1,20,26
    Logotipo "logo.bmp",1,1,7,2.5
    TipoLetra "ARIAL",7
    EscribeXY 13,3,"Monterrey, N.L. a "
    EscribeXY 15,3,&DAT317,"DMA"
    EscribeXY 16.5,4,"Unidad  "
    EscribeXY 17.5,4,&DAT300,"00000000"
*-----------------------
*  INFORMACION DEL PROPIETARIO
*-----------------------
    EscribeXY 6,4.7,&DAT370        \*Propietario - Nombre
    EscribeXY 1,5,&DAT371        \*Propietario - Direccion
    EscribeXY 12.4,5,&DAT372    \*Propietario - Poblacion
*-----------------------
*  INFORMACION DE LA EMPRESA
*-----------------------
*-----------------------
*  DATOS DE LA UNIDAD
*-----------------------
    EscribeXY 3.5,7.8,&DAT021      \*Descripción
    EscribeXY 12.5,7.8,&DAT309    \*Placas
    EscribeXY 3.5,8.1,&DAT031      \*Descripción
    EscribeXY 12.5,8.1,&DAT307    \*Color
    EscribeXY 3.5,8.4,&DAT306      \*Modelo
    EscribeXY 12.5,8.4,&DAT308    \*Numero de Serie
*-----------------------
*    INVENTARIO
*-----------------------
    EscribeXY 3,9.5,""
    Escribr 3,&DAT334,"LINEA1"          \*Inventario de la Unidad
    Escribr 3,&DAT334,"LINEA2"        \*Inventario de la Unidad
    Escribr 3,&DAT334,"LINEA3"        \*Inventario de la Unidad
    Escribr 3,&DAT334,"LINEA4"        \*Inventario de la Unidad   

    EscribeXY 2.5,12.4,&DAT377,"#,###,##0.00"          \*Propietario - Precio
    EscribeXY 4.5,12.4,&DAT377,"LETRASPESOS"
*  TipoLetra "ARIAL",7
    EscribeXY 1,13.5,""
    Escribe 1,"AÑO"
    Escribe 2.5,"PLACAS"
    Escribe 4,"ESTADO"
    Escribe 5.5,"FOLIO"
    Escribe 7,"FECHA"
    Escribe 8.5,"IMPORTE"
    Escribe 10,"FACTURA"
    Escribe 11.5,"FECHA"
    Escribr 13,"..."
    brinca 1

[TENENCIAS_DETALLE]
    Escribe 1,&DAT335            \* Modelo
    Escribe 2.5,&DAT336            \* Placas
    Escribe 4,&DAT337            \* Estado
    Escribe 5.5,&DAT338            \* Folio
    Escribe 7,&DAT339            \* Fecha
    Escribe 8.5,&DAT340,"##,###.00"            \* Importe
    Escribe 10,&DAT341            \* Factura
    Escribe 11.5,&DAT342            \* Fecha Factura
    Escribr 13,&DAT343            \* Vendedor
[PIE]
    EscribeXY 1,23,&DAT370
    EscribeXY 1,23.4,&DAT373

[/ini]


  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 15 July 2011 - 11:58 AM

Hola pcicom, gracias por postear tu INI, me ha gustado la forma de atacarlo, ¿cómo lo llamas en Delphi?, o sea, cual es el procedimiento o función que lee ese archivo INI?.

Saludos.

  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6301 posts
  • LocationArgentina

Posted 15 July 2011 - 09:37 PM

Hola,
Estoy con escafandra.... todo en última se resume a una especie de "compilador" o intérprete que se encargue de recibir cierta sintaxis y producir en runtime el informe.
Se cual fuese la vía que utilices, se basa en el poder de reconocer ciertas expresiones y hacer algo en base a ello, expresiones regulares para ser exacto. ¿Cómo están tus conocimientos sobre el tema, recuerdas algo la teoría de autómatas, gramáticas y expresiones de cátedra de compiladores? yo muy poco  :D

Salvador hace poco en su blog estuvo exponiendo sobre el tema. Las versiones nuevas vienen con bibliotecas para uso de expresiones regulares.

La técnica chapuza que se me ocurre es implementarlo todo a mano... mediante funciones elementales tipo Pos(), o de ir leyendo el txt buscando y reconociendo cierto texto. Si se lee algo que puede ser "interpretado" entonces crear cierto objeto y colocarlo en una posición determinada y darle cierto formato. Basado en el ejemplo de pcicom, algo como:



delphi
  1. function FindLogotype(Txt: String; var X, Y: integer): boolean;



Básicamente esta función lo que hace es buscar el texto "logotipo" dentro del parámetro Txt (quizá con algunas comprobaciones extras como ser por ejemplo que además se acompañe de algún parámetro adicional, etc). Si lo encuentra regresa true, en otro caso false. A su vez, en los parámetro X e Y regresa, por decir algún modo, la posición (X,Y) en donde debe crear por ejemplo un Image con el logo.

En fin, si puedes armar una serie de reglas simples, un buen formato y una estructura de cómo y que ha de guardarse en el archivo. La cosa se resume, "simplemente" en leer la estructura, interpretarla.

¿Me explico?

Saludos,


  • 0




IP.Board spam blocked by CleanTalk.