Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2009-01

Consulta Archivos TXT

15 messages · 7 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

José Luis Vassallo

Buenas gente, necesito una peque�a ayuda necesito abrir un archivo txt e irlo actualizando con informaci�n que lee otro programa.

La cuestion es que quiero poder leer cada linea y si corresponde actulizarle una informaci�n.

Ej. Archivo.txt
Compu1=OnLine
Compu2=OffLine
Compu3=Rota
Compu4=OnLine
Compu5=OnLine
Compu6=OffLine

Quiero poder recorrer el txt y cambiar el texto por ej. en la linea 3 "Compu3=Rota" a "Compu3=OnLine". Con el siguiente ejemplo yo recorro el archivo y muestro en un memotext la informaci�n, pero quiero poder modificar una linea en particular es posible. Porque probe con Write, append, etc., pero me veo en la obligaci�n de regenerar el archivo y no quiero.

procedure TFormulario.CargarArchivoTexto;
var F: TextFile;
    sLinea: String;
begin
  AssignFile( F, ExtractFilePath( Application.ExeName ) + 'prueba.txt' );
  Reset( F );
  while not Eof( F ) do
  begin
    ReadLn( F, sLinea );
    Memo.Lines.Add( sLinea );
  end;
  CloseFile( F );
end;

Muchas gracias por su tiempo.
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090103/484ce052/attachment.html>

Reply by email

Fjbr.
to José Luis Vassallo

Jose Luis,

Hay una forma m�s simple usar un TStringList (o el componente lines de un memo)...

procedure TFormulario.HacerDeTodoConArchivo(archivo_a_leer:String);
var
  LineasArchivo: TStringList;
  unaLinea: String;
  i: Integer;
begin
  // Fase 1: Cargar Archivo En contendor
  LineasArchivo:= TStringList.Create(nil);
  LineasArchivo.loadFromFile(archivo_a_leer);
  // Fase 2: Procesar archivo
  for i:= 0 to LineasArchivo.Count - 1 do
  begin
    unaLinea:= LineasArchvio[i];
    Hacer_Algo_Con_Cada_Linea(unaLinea);
  end;
  // Fase 3: Guardar Archivo
  LineasArchivo.SaveToFile(archivo_a_leer);
  // Fase 4: Como somos limpios, limpiamos antes de salir
  LineasArchivo.Free;
end;

La idea es que promero vuelcas todo el archivo en memoria. Despues lo procesas y tal, y finalmente lo reescribes machacando el anterior.

Por supuesto esto es una primera aproximaci�n. Yo incluir�a un par de controladores de excepciones, guardar�a el fichero de origen renombrandolo tras su "carga" tomar�a algunas medidas preventivas de seguridad adicionales (asegurar que el fichero es de texto y cosas as�).

Saludos.

2009/1/3 Jos� Luis Vassallo <jose.vassallo en gmail.com>

Show quoted text 46 lines
Buenas gente, necesito una peque�a ayuda necesito abrir un archivo txt e irlo actualizando con informaci�n que lee otro programa. La cuestion es que quiero poder leer cada linea y si corresponde actulizarle una informaci�n. Ej. Archivo.txt Compu1=OnLine Compu2=OffLine Compu3=Rota Compu4=OnLine Compu5=OnLine Compu6=OffLine Quiero poder recorrer el txt y cambiar el texto por ej. en la linea 3 "Compu3=Rota" a "Compu3=OnLine". Con el siguiente ejemplo yo recorro el archivo y muestro en un memotext la informaci�n, pero quiero poder modificar una linea en particular es posible. Porque probe con Write, append, etc., pero me veo en la obligaci�n de regenerar el archivo y no quiero. procedure TFormulario.CargarArchivoTexto; var F: TextFile; sLinea: String; begin AssignFile( F, ExtractFilePath( Application.ExeName ) + 'prueba.txt' ); Reset( F ); while not Eof( F ) do begin ReadLn( F, sLinea ); Memo.Lines.Add( sLinea ); end; CloseFile( F ); end; Muchas gracias por su tiempo. _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090103/3a20c489/attachment.html>

Reply by email

JoshyFun
to José Luis Vassallo: Buenas gente, necesito una peque�a ayuda necesito abrir un archivo txt e irlo…

Hello Jos�,

Saturday, January 3, 2009, 4:57:05 AM, you wrote:

JLV> Ej. Archivo.txt
JLV> Compu1=OnLine
JLV> Compu2=OffLine
JLV> Compu3=Rota
JLV> Compu4=OnLine
JLV> Compu5=OnLine
JLV> Compu6=OffLine
JLV> Quiero poder recorrer el txt y cambiar el texto por ej. en la linea 3 JLV> "Compu3=Rota" a "Compu3=OnLine". Con el siguiente ejemplo yo recorro el JLV> archivo y muestro en un memotext la informaci�n, pero quiero poder modificar JLV> una linea en particular es posible. Porque probe con Write, append, etc., JLV> pero me veo en la obligaci�n de regenerar el archivo y no quiero.

S�lo puedes regenerar el archivo por completo, o lo que es lo mismo, leerlo, modificarlo en memoria y volver a grabar todo.

Si tu formato de texto te permite tener todas las lineas de igual tama�o, esto es a�adir espacios suficientes al final de la linea, entonces todas las lineas ser�n de igual tama�o y por lo tanto podr�s modificarlo en formato binario sin tener que reescribir todo. Eso si, si tu archivo es menor de unos 4 Kb no habr� ninguna diferencia entre regenerarlo por completo o modificar s�lo un trozo peque�o, ya que el sistema operativo reescribir� todo el archivo.

Best regards, JoshyFun

Reply by email

José Luis Vassallo
to Fjbr.: Hay una forma m�s simple usar un TStringList (o el componente lines de un memo)...…

Con lo que me indicaron y las pruebas que hice har� como me mostraron, lo cargare lo actualizare y lo grabare con los valores actuales. Muchas gracias a todos.
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090104/7ec9f6a1/attachment.html>

Reply by email

José Antonio Cuello Principal

Existe otra posibilidad que permite regrabar solo una parte. La estructura que usas es practicamente la de un archivo INI, puedes usar todas las funciones de lectura y grabaci�n de INIs con solo a�adir una cabecera tipo "[XXXXX]" al archivo. La extensi�n del archivo no tiene porque ser INI.

Si te interesa la opci�n te puedo poner algun ejemplo.

Reply by email

José Luis Vassallo
to José Antonio Cuello Principal

Por favor, asi vere si la puedo usar, yo genero el archivo para un amigo que lo levanta en javascript. Pero igual me interesa el archivo porque me serviria para otras cosas que tengo que hacer.
Muchas gracias.

2009/1/7 Jos� Antonio Cuello Principal <josea en artextrading.com>

Show quoted text 12 lines
Existe otra posibilidad que permite regrabar solo una parte. La estructura que usas es practicamente la de un archivo INI, puedes usar todas las funciones de lectura y grabaci�n de INIs con solo a�adir una cabecera tipo "[XXXXX]" al archivo. La extensi�n del archivo no tiene porque ser INI. Si te interesa la opci�n te puedo poner algun ejemplo. _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090107/83b999ef/attachment.html>

Reply by email

JoshyFun
to José Antonio Cuello Principal: Existe otra posibilidad que permite regrabar solo una parte. La estructura que usas es…

Hello Jos�,

Wednesday, January 7, 2009, 10:38:11 AM, you wrote:

JACP> Existe otra posibilidad que permite regrabar solo una parte. La JACP> estructura que usas es practicamente la de un archivo INI, puedes usar JACP> todas las funciones de lectura y grabaci�n de INIs con solo a�adir una JACP> cabecera tipo "[XXXXX]" al archivo. La extensi�n del archivo no tiene JACP> porque ser INI.

Los .INI se leen en su totalidad en memoria, se modifican y se graban en su totalidad otra vez. Eso si, la clase permite un control linea por linea sin tener que programarlo uno mismo.

Ah! los .INI por defecto (sin usar clases especiales) no pueden pasar de 64 Kb (en windows, claro).

Best regards, JoshyFun

Reply by email

José Luis Vassallo
to José Luis Vassallo

Mil perdones gente por ser tan pesado, para variar me complicaron la vida, ahora en ves de ser un archivo chico, tiene que ser un archivo html al que se le van a ir agregando texto, abajo un ejemplo. Encima ahora no van a ser 30 registros si no X registros, alguno me puede dar una idea para editarlo agregarle el dato y que sea rapido y sin perdida de rendimiento (porque al ir creciendo el archivo cada ves va a tomar mas recursos). Slds.

// Ejemplo de archivo
// Cabecera
<META HTTP-EQUIV=REFRESH CONTENT="30; URL=maq_1_hist.htm">
    <STYLE TYPE="text/css">
    @import url(style.css);

</STYLE>
</HEAD>
<BODY>
<TABLE WIDTH=100%>

// Linea 1 de X
<TR><TD BGCOLOR="#f6840b" ><H1>08:15</H1></TD><TD BGCOLOR="#f6840b"
OPERARIO A CARGO: ABCDEFGH</H1></TD><TD BGCOLOR="#f6840b" --</H1></TD></TR>

x
x
x
<TR><TD BGCOLOR="#e80000"><H1>13:33</H1></TD><TD
BGCOLOR="#e80000"><H1>Parada</H1></TD><TD BGCOLOR="#e80000"><H1>Error de producto</H1></TD></TR>

// Pie
</TABLE>
</BODY>
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090107/39d0e7a8/attachment.html>

Reply by email

JoshyFun
to José Luis Vassallo

Hello Jos�,

Thursday, January 8, 2009, 2:50:40 AM, you wrote:

JLV> Mil perdones gente por ser tan pesado, para variar me complicaron la vida, JLV> ahora en ves de ser un archivo chico, tiene que ser un archivo html al que JLV> se le van a ir agregando texto, abajo un ejemplo. Encima ahora no van a ser JLV> 30 registros si no X registros, alguno me puede dar una idea para editarlo JLV> agregarle el dato y que sea rapido y sin perdida de rendimiento (porque al JLV> ir creciendo el archivo cada ves va a tomar mas recursos). JLV> Slds.

Lo l�gico ser�a en este caso que la p�gina importara los datos de un listado m�s sencillo (tipo lineas en txt), pero est�s en el mismo caso de antes, esto es, si tienes que modificar lineas en cualquier parte del archivo, la �nica soluci�n es reescribir todo. Si s�lo tienes que agregar lineas al final te bastar�a con a�adir el texto X bytes antes del final de fichero y a�adiendo las etiquetas finales del HTML al final.

Antes de hacer nada tienes que tener bien claro lo que quieren que hagas o al final volver�s a reescribir el mismo c�digo una y otra vez, hasta el infinito y nunca har� exactamente lo que quieren.

En este caso las cosas a saber son:

1) Se necesita variar informaci�n ya escrita en el HTML ?
2) El fichero tiene que estar a disposici�n constantemente (on-line) o bien s�lo es necesario generarlo de vez en cuando (off-line) ?
3) Cada cuanto varia y/o se amplia informaci�n ?
4) Tama�o m�nimo y m�ximo que puede alcanzar el fichero (aprox.).

Best regards, JoshyFun

Reply by email

José Luis Vassallo
to JoshyFun

Sobre tus preguntas JoshyFun:

1) Se necesita variar informaci�n ya escrita en el HTML ? Si constantemente.
2) El fichero tiene que estar a disposici�n constantemente (on-line) o bien s�lo es necesario generarlo de vez en cuando (off-line) ? El fichero esta on-line todo el tiempo.
3) Cada cuanto varia y/o se amplia informaci�n ? 10 a 30 segundos.
4) Tama�o m�nimo y m�ximo que puede alcanzar el fichero (aprox.). El maximo no esta definido ya que por minuto se agregaran aprox. de 2 a 6 registros y puede tardar una semana o varias hasta que termina de grabarse la informaci�n y se depura volviendolo a cero.

No encuentro como hacer en el html un append teniendo que quedar al final siempre esto "</TABLE>
</BODY>".

Si alguien puede darme una mano se lo agradecere.
El comando TStringList tiene algun limite?
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090108/ca16fe97/attachment.html>

Reply by email

Raistware
to José Luis Vassallo

Jos� Luis Vassallo escribi�:

Show quoted text 21 lines
Sobre tus preguntas JoshyFun: 1) Se necesita variar informaci�n ya escrita en el HTML ? Si constantemente. 2) El fichero tiene que estar a disposici�n constantemente (on-line) o bien s�lo es necesario generarlo de vez en cuando (off-line) ? El fichero esta on-line todo el tiempo. 3) Cada cuanto varia y/o se amplia informaci�n ? 10 a 30 segundos. 4) Tama�o m�nimo y m�ximo que puede alcanzar el fichero (aprox.). El maximo no esta definido ya que por minuto se agregaran aprox. de 2 a 6 registros y puede tardar una semana o varias hasta que termina de grabarse la informaci�n y se depura volviendolo a cero. No encuentro como hacer en el html un append teniendo que quedar al final siempre esto "</TABLE> </BODY>". Si alguien puede darme una mano se lo agradecere. El comando TStringList tiene algun limite?

Tu mejor aliado es unar un TStringList, los procedimientos LoadFromFile y SaveToFile te ser�n de gran utilidad, y es bastante r�pido.

Reply by email

Guillermo Martínez Jiménez

Hola.

Show quoted text 10 lines
From: " Jos� Luis Vassallo " Subject: Re: [Lazarus-es] Consulta Archivos TXT Mil perdones gente por ser tan pesado, para variar me complicaron la vida, ahora en ves de ser un archivo chico, tiene que ser un archivo html al que se le van a ir agregando texto, abajo un ejemplo. Encima ahora no van a ser 30 registros si no X registros, alguno me puede dar una idea para editarlo agregarle el dato y que sea rapido y sin perdida de rendimiento (porque al ir creciendo el archivo cada ves va a tomar mas recursos). Slds.

Si tienes que manejar archivos HTML entonces te recomiendo que busques un componente que facilite el manejo de archivos XML, ya que b�sicamente son lo mismo, en especial a partir de HTML 4. Hay varios componentes y bibliotecas para manejar XML con Free Pascal y no creo que te cueste encontrar una en Internet.

Saludos.

Guillermo "�u�o" Mart�nez

Reply by email

JoshyFun
to José Luis Vassallo: Sobre tus preguntas JoshyFun: 1) Se necesita variar informaci�n ya escrita en el HTML ?…

Hello Jos�,

Friday, January 9, 2009, 2:32:30 AM, you wrote:

JLV> 1) Se necesita variar informaci�n ya escrita en el HTML ? JLV> Si constantemente.

Esto implica que hay que reescribir el archivo al 100% siempre.

JLV> 2) El fichero tiene que estar a disposici�n constantemente (on-line) o bien JLV> s�lo es necesario generarlo de vez en cuando (off-line) ? JLV> El fichero esta on-line todo el tiempo.

Esto es un problema para el dise�o del sistema debido a que se entiende que si el fichero est� on-line siempre es por que va a ser leido por otra aplicaci�n o un operario cada X tiempo, con lo cual no encontramos con un problema de colisi�n y/o integridad. Si en el momento de grabar el fichero la otra aplicaci�n intenta leerlo se producir� o bien un "sharing error" o un problema de integridad de datos seg�n el modo en que ambas aplicaciones abran los ficheros.

Resumiendo que una de las dos aplicaciones puede dar un error de apertura de vez en cuando, y si ese error no est� controlado se puede caer todo.

JLV> 3) Cada cuanto varia y/o se amplia informaci�n ? JLV> 10 a 30 segundos.

Tiempo de sobras...

JLV> 4) Tama�o m�nimo y m�ximo que puede alcanzar el fichero (aprox.). JLV> El maximo no esta definido ya que por minuto se agregaran aprox. de 2 a JLV> 6 registros y puede tardar una semana o varias hasta que termina de grabarse JLV> la informaci�n y se depura volviendolo a cero.

Generar� un archivo grande, pero no enorme, se podr� manejar en memoria perfectamente.

JLV> No encuentro como hacer en el html un append teniendo que quedar al final JLV> siempre esto "</TABLE>
JLV> </BODY>".

No puedes hacer un append tal cual, tienes que mover el puntero de grabaci�n un poco hacia atr�s y grabar, pero como tienes que reescribir todo el fichero, esto no te sirve de nada.

JLV> Si alguien puede darme una mano se lo agradecere. JLV> El comando TStringList tiene algun limite?

En teor�a la memoria disponible, en realidad es menos, pero no deber�as de tener problema, yo tengo hechos TStringList de 500 megas sin problemas, y la cantidad de lineas es de 2000 millones (si hay memoria claro).

Lo m�s sencillo, contruye el HTML en memoria con un TStringList y gr�balo todo de golpe de cada vez con ".SaveToFile" y recuerda que esta operaci�n puede generar una excepci�n de vez en cuando as� que controlala con un try...except...end para reintentar la operaci�n pasadas unas d�cimas de segundo (La otra aplicaci�n puede tener el fichero abierto por alg�n motivo).

Best regards, JoshyFun

Reply by email

Maximiliano

Para que complicarse, lo que tenes que usar es un TClientdataSet y configurarlo para escribir en un XML o .CDS(Binario solo con Delphi /Lazarus lo podes abrir) y lo manejas como una tabla con append, delete, locate y todo lo que quieras hacer con sus registros. Despues lo podes majejar con PHP, Java, Html o cualquier cosa que lea XML

Show quoted text 42 lines
Message: 1 Date: Thu, 8 Jan 2009 19:21:10 +0100 From: JoshyFun <joshyfun en gmail.com> Subject: Re: [Lazarus-es] Consulta Archivos TXT To: Spanish version of Lazarus List <lazarus-es en lazarus.freepascal.org> Message-ID: <543734205.20090108192110 en gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Hello Jos�, Thursday, January 8, 2009, 2:50:40 AM, you wrote: JLV> Mil perdones gente por ser tan pesado, para variar me complicaron la vida, JLV> ahora en ves de ser un archivo chico, tiene que ser un archivo html al que JLV> se le van a ir agregando texto, abajo un ejemplo. Encima ahora no van a ser JLV> 30 registros si no X registros, alguno me puede dar una idea para editarlo JLV> agregarle el dato y que sea rapido y sin perdida de rendimiento (porque al JLV> ir creciendo el archivo cada ves va a tomar mas recursos). JLV> Slds. Lo l�gico ser�a en este caso que la p�gina importara los datos de un listado m�s sencillo (tipo lineas en txt), pero est�s en el mismo caso de antes, esto es, si tienes que modificar lineas en cualquier parte del archivo, la �nica soluci�n es reescribir todo. Si s�lo tienes que agregar lineas al final te bastar�a con a�adir el texto X bytes antes del final de fichero y a�adiendo las etiquetas finales del HTML al final. Antes de hacer nada tienes que tener bien claro lo que quieren que hagas o al final volver�s a reescribir el mismo c�digo una y otra vez, hasta el infinito y nunca har� exactamente lo que quieren. En este caso las cosas a saber son: 1) Se necesita variar informaci�n ya escrita en el HTML ? 2) El fichero tiene que estar a disposici�n constantemente (on-line) o bien s�lo es necesario generarlo de vez en cuando (off-line) ? 3) Cada cuanto varia y/o se amplia informaci�n ? 4) Tama�o m�nimo y m�ximo que puede alcanzar el fichero (aprox.).

Reply by email