PDA

Ver la Versión Completa : Edicion de archivos Texto desde el inicio


Nanoman
25-01-2005, 03:34:13
Saludos soy nuevo en esto de delphi, he buscado en el foro y aun no consigo informacion al respecto... les presento el problema

Necesito editar un archivo de texto, el archivo es de extensión .sty, sin embargo lo abro con block de notas y aparece el archivo de configuración que deseo editar..

ahora las condiciones son:

1. no deseo que los usuarios puedan ellos abrir con block de notas el archivo, por eso no he referenciado la extensión a block de notas.

2. mi intención es que puedan quitar o añadir solo algunos lineas especificas

3. se necesitaria posicionarse tambien en un caracter especifico y completar la linea, ademas de tambien insertar algun texto.

4. deseo que la interfase con los usuarios este compuesta con controles Tedit checkbox y radiobutton que ellos puedan seleccionar o llenar y que luego al darle aceptar se salven las modificaciones...

Requiero de ustedes una orientación hacia que puedo leer, ejemplos, teoria al respecto.. no se por donde empezar

Muchas gracias de antemano :)

Nanoman
25-01-2005, 04:00:45
Olvide comentarles que una vez hace unos cuantos años trabaje con archivos texto desde pascal pero he perdido toda la documentación.

por cierto el archivo texto no necesita cambio de formato ni letras sólo edición de texto plano linea a linea y caracter a caracter

Muchas gracias

Lepe
25-01-2005, 09:44:07
Lo que deseas hacer parece ser un modelo de cartas tipo. Para no liarte mucho te propongo algo simple.

En una ventana pones un TMemo y en su propiedad Lines, escribe el siguiente texto:

Estimado Señor %s :

Su %s está siendo revisada. En %s dias hábilies recibirá contestación.


Lógicamente los "%s" se sustituye por lo que pongas en el Tedit o en las opciones de tu programa.

Como se haría???

Pues muy facil, aqui tienes un pequeño ejemplo:
Necesitas un Tedit, un boton y un Tmemo

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var CartaFinal:TStringList;
begin
CartaFinal := TStringList.Create; // creamos la carta oculta
try
// formateamos el modelo que está en el Tmemo y lo copiamos a CartaFinal
CartaFinal.text := Format(Memo1.Text,[
Edit1.text,
'Factura 0000/3333',
IntToStr(34)]);
// para ver los cambios en pantalla
Memo1.Text:= CartaFinal.Text;

// Guardamos la carta final con extension de bloc de notas
// La carta final si la puede abrir el usuario.
CartaFinal.SaveToFile('c:\Modelo01 dirigido a '+ Edit1.text+'.txt );
finally
CartaFinal.Free; // liberamos la memoria
end;

end;

end.


Por supuesto este es un ejemplo muy tosco, tendrás que retocarlo bastante, pero es una idea.

Como ves, los elementos que he usado son Tmemo, Tstringlist, la funcion Format de la unidad SysUtils de Delphi y poco más, pero con eso ya tienes tus objetivos cumplidos.

Saludos

Nanoman
25-01-2005, 20:33:58
Muchas gracias, ahora el asunto es que el archivo ya esta creado necesito abrirlo y editarlo y no podría ponerle las marcas %s (lo de los tedit) al archivo desde un principio xq no funcionaría el programa que se configura con este archivo..

con lo que me dices se me ocurrio fue esto.. cargar el archivo .. buscar la linea insertarle los %s a los que te refieres y luego seguir con el proceso que mencionas

se puede buscar textos en el archivo?? hay otra forma mas facil?

para buscar la linea pense en contarla y usar su nro para modificarla pero tambien ocurre que es necesarió insertar líneas al archivo y entonces se perderia la cuenta

para ejemplificar un poco tengo una línea

CONFIG TITLEBANT ( ) // entre ( ) va ADISPA ADISCA XOMP

pero sucede que tambien es posible que no se coloque nada entre parentesis pero en ese caso necesitaria insertar a la linea dos $ adelante

$$CONFIG TITLEBANT

y asi quedaria

el otro caso sería ejemplo
.....
TRUSH 12546
SIMPLE TASKING
ALIAS DUQUE
MULTIFORCE
...

y se necesitaria insertar la linea ALIAS NANO o más de una línea dependiendo de los usuarios que se agreguen, entre las lineas ALIAS DUQUE y MULTIFORCE


Gracias agradezco su ayuda

Héctor Randolph
25-01-2005, 23:16:08
Hola nanoman!

Me parece que lo que tú buscas es un parser, es decir un algoritmo que identifica palabras o elementos del texto (tokens) y las descompone para después interpretarlas.

Te recomiendo que busques en el foro información con la palabra clave parser

Por ejemplo: lee este hilo tal vez sirva de algo.

http://www.clubdelphi.com/foros/showthread.php?t=4996

Un Saludo.

Nanoman
26-01-2005, 04:00:46
ok he logrado cargar el archivo y pienso usar la función copy para ir armando la linea de configuración ya he hecho algunas pruebas.

ahora tengo otro problema.

como busco en el archivo (lo abrí dentro de un tipo tstringlist) por ejemplo la palabra CINFG en todas las lineas?? necesito buscar todas aquellas lineas que tengan esa palabra incluida..

agradecido por su ayuda

Lepe
26-01-2005, 11:23:27
usa un bucle for por el stringList y la funcion Pos para saber en que caracter de la linea empieza la palabra.

saludos