Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2008
sirsolrac sirsolrac is offline
Registrado
 
Registrado: feb 2008
Posts: 6
Poder: 0
sirsolrac Va por buen camino
Editando un archivo de texto

Hola todos.

Tengo este reto para algun ingenioso o muy conocedor del codigo delphi.

He creado un archivo de texto con un programa que basado en delphi. En dicho archivo cada vez que realizo una lectura dentro de mi programa creo una linea nueva de texto (como si fuera un log).

Pero mi problema radica en que necesito que la linea que escribo en el archivo de texto se guarde al inicio y no al final del archivo.

Por ejemplo, este seria mi archivo de texto tal como lo tengo ahorita:
linea 1 (primera linea que se ingresa)
linea 2
linea 3
linea 4 (ultima linea que se ingresa)


Pero el que necesito crear es el siguiente:
linea 4 (ultima linea que se ingresa)
linea 3
linea 2
linea 1 (primera linea que se ingresa)

gracias.
Responder Con Cita
  #2  
Antiguo 10-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola sirsolrac,
¿Cómo estás abriendo el archivo? ¿Con un TStringList?

No tengo delphi a mano, pero este objeto tiene un método Insert().
Este método lo que hace es insertar un texto en determinada posición.

Bastaría con llamarlo así:

Código Delphi [-]
lista.Items.Insert(0,'Esto va al principio');

Y luego guardarlo, aprovechando el SavetoFileName().

Código Delphi [-]
lista.Items.SaveToFileName('C:\..\...');

Como no tengo delphi a mano no puedo comprobar si es items, y el orden de los parámetros.

Si nos aportas detalles podría saber si este método es el más conveniente.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 10-02-2008
sirsolrac sirsolrac is offline
Registrado
 
Registrado: feb 2008
Posts: 6
Poder: 0
sirsolrac Va por buen camino
esta es la forma en que hago lo del texto.

//escribir resultados en archivo de texto
AssignFile(myFile, 'users.txt');
Append(myFile);
WriteLn(myFile,'');
Write(myFile,'# Tarjeta numero: '+Edit_CardNum.Text+'');
WriteLn(myFile,' ');
Write(myFile,Edit_Block0data.Text+' ' + 'Password = "' + Edit_CardSize.Text+'"',' ' );
WriteLn(myFile,' ');
CloseFile(myFile);

Es mi primer archivo de texto que he creado y no haye otra forma de hacerlo, muy probablemente hay una manera mas optima. Te agradeceria si me ayudas.
Responder Con Cita
  #4  
Antiguo 10-02-2008
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Talking

¡Sencillo!
carga el fichero en un TStrings con tuStrings.loadfromfile(cTuFichero) y añades la línea nueva con tuStrings.Insert(0, cadena), luego lo salvas con tuStrings.savetofile(ctuFichero).

un saludo
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
  #5  
Antiguo 10-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
sirsolrac,
Siendo esa la manera de trabajar con el archivo. Va a ser un tanto dificil. Porque lo que debes hacer es correr todas las líneas primero y luego sobrrescribir el contenido.

Deberás tener una rutina que haga dicho corrimiento. Para moverse por las líneas tienes a disposición el procedimiento Seek. El funcionamiento de Seek es así:

Código Delphi [-]
Seek(myFile,0);
Con ello te vas al principio y ya puedes ingresar el texto.

Pero antes debes hacer una rutina para mover todo:

1. Abrir el archivo. Con lo cual estarás al final.
2. Ingresas un registro "ficticio".
3. Te mueves 2 valores atrás y lees el valor, ahora te mueves un lugar hacia adelante y lo sobrescribes.
4. Vas decrementando el valor a medida que sobreescribes hasta llegar al comienzo.

Todo se trata de emplear Seek.

Ahora, te podrías evitar ese dolor de cabeza si empleases el Objeto que te comentaba.

Ve probando como te queda el algoritmo. Ya te di una buena pista...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 10-02-2008
sirsolrac sirsolrac is offline
Registrado
 
Registrado: feb 2008
Posts: 6
Poder: 0
sirsolrac Va por buen camino
Muchas gracias por la ayuda.

Nunca he utilizado la TStrings en delphi, buscare como utilizarla para meter los parametros que me has indicado y te agradesco mucho tu aporte.
Responder Con Cita
  #7  
Antiguo 11-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
sirsolrac, Me parece bien que hayas tenido en cuenta la clase TStrings. Te va resolver muchos problemas.

Viendo que recién te inicias aquí sería oportuno darte la bienvenida a estos foros e informarte sobre la guia de estilo.

Antes mayores dudas, ya sabes... aquí estaremos. Pero recomiendo que primeramente, antes de postear, busques si el tema fue tratado con anterioridad.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 11-02-2008
sirsolrac sirsolrac is offline
Registrado
 
Registrado: feb 2008
Posts: 6
Poder: 0
sirsolrac Va por buen camino
sin ideas

Les agradesco mucho su interes por ayudarme y se que ya me han dado las suficientes ideas para poder desarrollar mi aplicacion. Pero por mas que he buscado no encuentro nada especifico que me permita resolver el problema a la hora de escribir el codigo.

Es mi primer programa en delphi y no le hayo como escribir las sentencias utilizando el Tstring con el loadfromfile tal como lo suegerio PepeLolo.

Por cierto tenguna una duda ahi, mi archivo de texto lo tengo que convertir a una lista???

Si me ayudan quizas ya no con ideas sino que con algo de codigo se los agradeceria mucho. Asi de un solo puede quedar un buen ejemplo documentado para compartirlo con cualquier otro entusiasta de delphi.
Muchas gracias.
Responder Con Cita
  #9  
Antiguo 11-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por sirsolrac Ver Mensaje
Les agradesco mucho su interes por ayudarme y se que ya me han dado las suficientes ideas para poder desarrollar mi aplicacion. Pero por mas que he buscado no encuentro nada especifico que me permita resolver el problema a la hora de escribir el codigo.

Es mi primer programa en delphi y no le hayo como escribir las sentencias utilizando el Tstring con el loadfromfile tal como lo suegerio PepeLolo.

Por cierto tenguna una duda ahi, mi archivo de texto lo tengo que convertir a una lista???

Si me ayudan quizas ya no con ideas sino que con algo de codigo se los agradeceria mucho. Asi de un solo puede quedar un buen ejemplo documentado para compartirlo con cualquier otro entusiasta de delphi.
Muchas gracias.
Sería oportuno que nos detalles en forma más presisa que es lo que estás haciendo. En lo posible que nos aportes tu código y en base a ello podemos serte de mayor ayuda.

Para que el código se vea bien copialo y haz clic en un botón que diga "resaltar sintaxis delphi" (el botón que esta al lado que dice SQL).

Si te estás iniciando en delphi te recomiendo leer la Cara Oculta de Delphi 4. En la sección FTP del club lo vas a encontrar.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 11-02-2008
sirsolrac sirsolrac is offline
Registrado
 
Registrado: feb 2008
Posts: 6
Poder: 0
sirsolrac Va por buen camino
Necesito generar un archivo te texto y escribir siempre en el principio de dicho archivo sin borrar ninguna informacion escrita anteiormente. El codigo para la parte del texto es el siguiente:

Código Delphi [-]
   CardNum: TEdit;
   Block0data: TEdit;
   myFile : TextFile;
   text   : string;

//Aqui escribe en el archivo de texto que previamente ha sido creado
AssignFile(myFile, 'archivotedexto.txt');
Append(myFile);
WriteLn(myFile,'');
Write(myFile,'# Tarjeta numero: '+CardNum.Text+'');  // escirbo una linea dentro del archivo de texto con una variable string
WriteLn(myFile,'  ');
Write(myFile,Block0data.Text+'  ' + 'Dato del bloque = "' + ,'  ' );
WriteLn(myFile,'  ');
CloseFile(myFile);

y esa secuencia se va a ejecutar ciclicamente de manera indefinada para cada lectura que realice mi programa. Les agradeceria si me ayudan con el codigo. De antemano muchas gracias por tomar su tiempo.
Responder Con Cita
  #11  
Antiguo 11-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
El ejemplo que te paso aquí ilustra el uso de un TStringList. Lo primero que se hace es crear el objeto y abrir el archivo.
Con el button1 se van ingresando las lineas. Siempre se van ingresando al final del archivo.
Con el boton2 das por finalizada la operación (simplemente guarda el archivo y lo muestra. se puede seguir ingresando sin problemas).

Y cuando se cierra la aplicación se libera la memoria que ocupa el objeto.

El archivo que se consigue tiene esta forma:

Cita:
# Tarjeta numero: nro2
Dato del bloque = "dato2
# Tarjeta numero: nro1
Dato del bloque = "dato1
Como notarás, primero se ingresaron las lineas nro1 y dato1 y seguidamente nro2 y dato2.

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    ListBox1: TListBox;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Archivo: TStringList;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   // Creamos el TStringList
   Archivo := TStringList.Create;

   // Abrimos el archivo...
   Archivo.LoadFromFile('C:\Documents and Settings\Marcelo\Escritorio\archivo.txt');
end;

procedure TForm1.Button1Click(Sender: TObject);
var LineaTarjeta, LineaBloque: string;
begin
   // construimos las lineas...
   LineaTarjeta := '# Tarjeta numero:  ' + Edit1.Text;
   LineaBloque := 'Dato del bloque = "' + Edit2.Text;

   // insertamos las lineas en el StringList
   // siempre van desde el comienzo del archivo
   Archivo.Insert(0,LineaTarjeta);
   Archivo.Insert(1,LineaBloque);

   // limpiamos los edits
   Edit1.Text := '';
   Edit2.Text := '';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // aqui guardamos el archivo
  Archivo.SaveToFile('C:\Documents and Settings\Marcelo\Escritorio\archivo.txt');
  ListBox1.Items.Assign(Archivo); 
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // aqui destruimos el objeto
  Archivo.Free;
end;

end.

¿Es esto más o menos lo que deseas conseguir?

Cuando yo decía que aportaras detalles me refería a que profundices sobre el tema, y que expusieras más código del que inicialmente mostraste.
Si haz estado practicando con el TStringList, sería oportuno que expusieras tus resultados.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 11-02-2008
sirsolrac sirsolrac is offline
Registrado
 
Registrado: feb 2008
Posts: 6
Poder: 0
sirsolrac Va por buen camino
Te agradesco enormemente me hayas ayudado con tu tiempo y conocimiento en programacion.

Pues te comento un poco porque no puse mas del codigo. Como no soy muy bueno programando en delphi mi codigo utiliza un centenar de lineas (se que mas de algun par estan de mas innecesariamente).

No inclui tampoco nada de mis pruebas con TStringList porque solo consegui errores de compilacion que creo k no hubieran abonado nada productivo en la solucion del problema.

Cuando logre adaptar tu codigo en mi programa lo documentare aqui para que a mas de alguien le ayude a futuro. Ya que este es uno de los objetivos, compartir conocimientos con los demas para buscar la superacion de todos.
Muchas gracias a todos, este es un exelente foro.
Responder Con Cita
  #13  
Antiguo 11-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por sirsolrac Ver Mensaje
Te agradesco enormemente me hayas ayudado con tu tiempo y conocimiento en programacion.

Pues te comento un poco porque no puse mas del codigo. Como no soy muy bueno programando en delphi mi codigo utiliza un centenar de lineas (se que mas de algun par estan de mas innecesariamente).
No debes sentirte presionado por el hecho de que seas principiante. No importa que tuvieras muchas o pocas. Para que tu alcanzaras más experiencia y comprendieras fácilmente sería útil ver tu código. No es lo mismo leer código ajeno que el de casa, más si te estás iniciando.

Cita:
Empezado por sirsolrac Ver Mensaje
No inclui tampoco nada de mis pruebas con TStringList porque solo consegui errores de compilacion que creo k no hubieran abonado nada productivo en la solucion del problema.
Todo lo contrario. Sería productivo, de esta manera nosotros podríamos saber donde está el error, que lo produce e indicarte las alternativas o maneras de como solucionarlo. De los errores se aprende, y en la programación no es la excepción.

Te recuerdo que no debes mezclar TStringList con los métodos WriteLn,ReadLn, Append, etc.

Cita:
Empezado por sirsolrac Ver Mensaje
Cuando logre adaptar tu codigo en mi programa lo documentare aqui para que a mas de alguien le ayude a futuro. Ya que este es uno de los objetivos, compartir conocimientos con los demas para buscar la superacion de todos.
Muchas gracias a todos, este es un exelente foro.
Me alegro que optes por mostrarnos tus avances. Como dices, esto no sólo te beneficia a ti sino al resto de la comunidad.
Aquí estaremos esperando, tu ve tranquilo. Ante problemas tiene la ayuda de Delphi, y clubdelphi.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 15-02-2008
Avatar de muppett
muppett muppett is offline
Miembro
 
Registrado: jun 2007
Posts: 35
Poder: 0
muppett Va por buen camino
Misma duda pero con memo

Yo tengo la misma duda del principio pero yo utilizo un memo y lo guardo es un archivo¿Me podrian ayudar porfa?
Responder Con Cita
  #15  
Antiguo 15-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por muppett Ver Mensaje
Yo tengo la misma duda del principio pero yo utilizo un memo y lo guardo es un archivo¿Me podrian ayudar porfa?
La propiedad Items de TListBox y la propiedad Lines de TMemo son del mismo tipo (TStrings), así que las puedes tratar igual.

Para leer y guardar un archivo, utiliza los métodos de TStrings SaveToFile y LoadFromFile.


Salu2.

P.D.: No olvides echarle un vistazo a la ayuda de Delphi sobre los componentes y sus propiedades, suele librar de más de un apuro.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Insertando, editando y buscando datos en un mismo formulario canelita Conexión con bases de datos 6 05-09-2007 07:40:30
saber cuando estoy editando un registro jhcaboverde Varios 4 13-02-2007 00:30:48
Como puedo grabar texto en un Archivo de Texto sin Sobreescribir???? AGAG4 Varios 12 08-11-2005 22:53:00
Db y archivo de texto carlospcs SQL 0 10-08-2004 23:56:32
Db y archivo de texto carlospcs Conexión con bases de datos 0 10-08-2004 23:55:09


La franja horaria es GMT +2. Ahora son las 10:00:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi