![]() |
Ayuda con edicion de archivo inno setup
Hola comunidad..
Necesito si me pueden dar una mano con la lectura y escritura en un archivo tipo txt. El archivo esta compuesto de la siguiente manera: Cita:
Agradezco cualquier mano que me puedan brindar. |
Cita:
|
Hola Agustin, gracias por responderme, lo que necesito es que cada vez que instale un area nueva, incremente los numeros en los dos lugares marcados y escriba el texto del area, como puse en el ejemplo, no se si se entiende? el dato title, Local, Active y Required son fijos pero no se como hacer que abra el archivo lea cual e el ultimo y agregue el numero incrementado a Area.134 y lo copie a layer.
[Area.134] --------------------------ESTE SERIA EL QUE TENGO QUE AGREGAR SUIGUIENDO EL ORDEN DE NUMEROS Title=SOb Local=AS\SOL Layer=134 --------------------------Y LO MISMO EN ESTE CASO QUE REPITE EL MISMO NUMERO DE AREA Active=TRUE Required=FALSE Gracias nuevamente por tu tiempo. |
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)
|
Hola walterk.
Si tenes la certeza de que las cadenas a buscar ('[Area.' y 'Layer=') siempre existirán en el archivo, podrías hacer: Ejemplo de uso:
![]() Saludos :) |
Yo creo que sería más adecuado usar un TINIFile. Su método ReadSections devuelve la lista de secciones, por lo que no tendrás que ir adivinándolas. Luego ya puedes usar el resto de métodos para obtener, modificar, crear y/o eliminar valores y secciones.
|
Hola gracias por tu respuesta y el trabajo que te has tomado en poner las imagenes, ahora te hago una consulta si es posible.
Tienes idea como incluir tu codigo en inno setup para que cumpla la funcion cuando instalo la zona deceada?. Gracias nuevamente por tu tiempo. |
Cita:
Como dice Ñuño Martínez, seria mejor utilizar el TINIFile, pero también añadiria al princio del fichero para saber ciertas cosas de él, como saber el último registro que se ha añadido el último acceso y quién lo ha realizado, se puede poner más y más cosas, para saber más y mejor el contenido del fichero. Cita:
Un saludo. |
Hola olbeup.
Cita:
Cita:
Saludos :) Edito: Y si, definitivamente coincido con ustedes en la conveniencia de usar TIniFile en este caso. ;) |
Un ejemplo con TIniFiles:
Un saludo. |
Hola walterk.
olbeup te dió un muy buen ejemplo, pero ya escribí el código, así que te agrego otro :) En este se seleccióna el mayor número del valor de la sección "Area" y se añade otra sección con el valor incrementado (sigo en dudas si deseas agregar una nueva o modificar el valor de la existente). (*) Se podría simplificar con el método IndexOfName pero Delphi 7 carece de StrictDelimiter y toma el espacio como delimitador. Saludos :) |
Tambien se puede usar XML, ClientDataSet, Json
Si se usa ClientDataSet no tendrias problemas de eficiencia de busquedas y ademas ganarias todas las caracteristicas de un TDataSet. Filtrado, ordenado, cursores, controles Data-Aware |
Cita:
La idea es agregar siempre un area nueva y que se haga de forma automatica sin la necesidad de la intervencion del usuario que lo instale. Para que se entinda mejor, yo diseño el escenario en cuestion y con inno setup realizo la instalacion dentro del programa ubicando donde lo tienen instalado a traves del registro de windows(segun usuario, disco "C","D","E",etc).Los datos del escenario al crealo yo los tengo e iria ubicado en "Title=", pero lo que no se como hacer es que abra el archivo verifique cual es el ultimo area que existe en el archivo y agregue mi area incrementando el numero anterior +1 y tome de la variable desde inno setup si es posible para agregar la ubicacion de donde se intalo el escenario para poner ese dato en "Local=", los valores "Active=" y "Required=" van asi por default. Espero haber aclarado un poco el tema y de ser necesario agrego el codigo que realice en inno setup para aclarar mas el panorama. Saludos |
Hola walterk.
Cita:
Resultado: ![]() Saludos :) |
Cita:
|
Cita:
|
Cita:
|
¿Quiéres usar código delphi en innosetup? Hasta donde yo lo he usado, eso no se puede hacer.
|
Cita:
Yo lo que hacia era: [INI] Filename: C:\Servicios\em\Scenery.CFG; Section: Area.1050; Key: Title; String: SA81 Puerto Cabra Corral; Flags: uninsdeleteentry uninsdeletesectionifempty; Filename: C:\Servicios\em\Scenery.CFG; Section: Area.1050; Key: Local; String: {code:GetDirName}\Addon Scenery\SA81 Puerto Cabra Corral; Flags: uninsdeleteentry; Filename: C:\Servicios\em\Scenery.CFG; Section: Area.1050; Key: Active; String: TRUE; Flags: uninsdeleteentry; Filename: C:\Servicios\em\Scenery.CFG; Section: Area.1050; Key: Required; String: FALSE; Flags: uninsdeleteentry; Filename: C:\Servicios\em\Scenery.CFG; Section: Area.1050; Key: Layer; String: 1050; Flags: uninsdeleteentry; El problema empezo en que hay sucursales que no tiene la misma cantidad de areas y al yo ingresarles un numero de identificacion fija sobrescribia un area ya instalada y el software tira error. |
Cita:
A ver, debes explicar EXACTAMENTE lo que quieres hacer, en todo su contexto, no somos adivinos, no vemos tu ordenador. Usa también los conceptos correctos, porque si quieres ejecutar un programa delphi desde innosetup, eso no es "usar código delphi" en innosetup. |
Cita:
se entiende? |
Eso no tiene nada que ver con innosetup, salvo que desde allí ejecutas el programa delphi.
Si tienes el programa delphi, llámalo desde innosetup en el momento que lo necesites. |
Cita:
|
A ver, según me parece entender, tienes un programa delphi que hace lo que quieres, ¿es así?
Y según me parece entender, quieres ejecutar ese programa desde una instalación con innosetup, ¿es así? |
Lo que comenta casimiro al final es muy común. Por ejemplo cuando se instala firebird y se le tilda la opción de iniciar el servicio llama a una aplicación de consola que se encarga de ello
|
Cita:
|
Es así ^\||/
|
Cita:
|
¿Eso no es el código que te han pasado antes?
|
| La franja horaria es GMT +2. Ahora son las 04:42:47. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi