Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2006
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 22
jonmendi Va por buen camino
gracias Lepe,
es lo que he intentado, pero existe el siguiente problema. Si abro con reset el archivo es solo de lectura (ya que es de texto), por lo que aunque lea las líneas y me posiciones en la que yo quiero, a la hora de escribir tendré que hacer un rewrite, con lo que me borrará el archivo y me creará uno vacío.
¿Alguna ideas más?

Muchas gracias,
Jon
Responder Con Cita
  #2  
Antiguo 07-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Quizás fuera conveniente leer todo el archivo en memoria ¿es muy grande?

Si no lo es, 2000 o 3000 registros, puedes usar un TStringList y quitarte de todos esos problemas:

Código Delphi [-]
var Archivo:TStringList;
begin
  Archivo := TStringList.Create;
  Archivo.LoadFromFile('c:\mio.txt');
  if Archivo.Count > 129 then // si tiene más de 129 líneas
    Archivo[128] := 'Por la cara modifico el texto';
  if Archivo.Count > 0 then
    Archivo[0] := Archivo[0] + ' Añado texto a la primera fila';

  if Archivo.Count > 3 then
    Archivo.Insert(2,'inserto en la posición 3, recuerda empieza en cero');
  Archivo.Add('añado al final este texto');
  Archivo.Delete(0); // borro la primera linea
  Archivo.SaveToFile('c:\mio.txt');
  FreeAndNil(Archivo);
end;

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 07-06-2006
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 22
jonmendi Va por buen camino
muchas gracias lepe, pero (parezco el hombre de los peros) me temo que en turbo pascal no existe TStringList (o al menos yo no lo conozco). Lo único que se me ocurre es antes de escribir leer todo, añadir en el sitio adecuado la ristra que quiero y volver a escribir todo. Pero no me convence en absoluto.

Un saludo
Jon
Responder Con Cita
  #4  
Antiguo 07-06-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 21
luisgutierrezb Va por buen camino
porque no pruebas a bajar el FreePascal? si mal no recuerdo ya tiene la clase de TStrings o TStringList,

otra opcion seria que hicieras el guardado de registros a mano, pero guardandolos como texto delimitado por comas, y donde cada registro es un renglon por ejemplo
"reg1campo1","reg1campo2","reg1Campo3","etc"
"reg2campo1","reg2campo2","etc","etc"

lo que si, es que es mas chamba, sin embargo, no dudo que haya por ahi una unidad ya hecha para leer y guardar datos en este formato...
Responder Con Cita
  #5  
Antiguo 08-06-2006
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 22
jonmendi Va por buen camino
gracis luisgutierrezb.
El free pascal ya lo tengo bajado, pero el problema es que el programilla que estoy haciendo yo lo tengo que importar a un proyecto bastante grande que está hecho en turbo pascal 7.0. Este proyecto he intentado pasarlo a free pascal, pero es más trabajo que matar una burra a pellizcos. por eso desistí.
Lo de los campos separados con comas tampoco me sirve, ya que tengo que dejar un fichero solo con los datos que yo le paso, pero sin comas ni nada. Si el registro es
Código:
  tRegistro = record
    nombre : string[15];
    apellido1 : string[30];
    telefono : string[9];
  end;
yo tengo que escribir en el fichero de texto
Código:
nnnnnnnnnnnnnnnaaaaaaaaaaaaaaaaaaaaaaaaaaattttttttt
y nada más que eso. Sin espacios ni comas ni nada de nada. El problema es que si tengo 2000 líneas de estas, y quiero modificar una, por distintos problemas de permisos y demás no puedo leer y escribir todo, por lo que no me srive un fichero de texto y usar readln writeln.
Muchas gracias a los que estáis mostrando tanto interés.
Un saludo
Jon
Responder Con Cita
  #6  
Antiguo 08-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Pues se acabó lo que se daba, esto tiene que funcionar en Turbo pascal, ya que usa las funcionies de bajo nivel del sistema operativo.

Edito: Las funciones las pillo de SysUtils, pero estarán en otra unidad de Turbo Pascal. THandle es un Entero largo.

Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
var F:THandle;
    s: string[10];
    i:Integer;
begin
  if not sysutils.FileExists('c:\mio.txt') then
    F:= sysutils.FileCreate('c:\mio.txt')
  else
    f:= sysutils.FileOpen('c:\mio.txt',fmOpenReadWrite);

  if f>0  then
    ShowMessage('archivo abierto');

  s := 'texto 1';
  FileWrite(F,s,SizeOf(s));
  s := 'texto 2';
  FileWrite(F,s,SizeOf(s));
  s := 'texto 3';
  FileWrite(F,s,SizeOf(s));
  FileSeek(f,-(SizeOf(s)*2),1); // ir atrás en el fichero
{
  Al movernos tenemos que ir sumando los bytes que hay escritos
  realmente en el fichero. Multiplico por 2 para irme 2 "registros"
  hacia atrás, el primero es el "Texto 3", y al retroceder otro más
  me situo al principio de "texto 2", que se debe mostrar en el último
  ShowMessage
}
  FileRead(f,s,SizeOf(s));
  ShowMessage(s);
  FileClose(f);
end;
Espero que sea viable .

SAludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 08-06-2006 a las 11:39:15.
Responder Con Cita
  #7  
Antiguo 08-06-2006
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 22
jonmendi Va por buen camino
muchas gracias lepe, pero.... me pasa solo a mi o en el archivo que crea escribe
Código:
texto 18@ texto 28@ texto 38@
a todo el mundo?
Precisamente son los "cuadraditos", las arrobas y demás signos los que quiero evitar.
No sé, estoy liado.
Un saludo y muchas grcias
Jon
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ayudaaaa!!! Tabla ASCII: El carácter Ñ vs. carácter ¥ Berto2003 Varios 5 26-07-2005 15:37:48
mainmenu y barritas de separación unreal4u Varios 2 22-04-2005 21:19:46
Caracter \r\n FRANKER Varios 3 03-06-2004 10:02:43
busqueda caracter a caracter Irina SQL 3 20-05-2003 13:12:53
sql a file jsanchez SQL 2 13-05-2003 21:34:03


La franja horaria es GMT +2. Ahora son las 02:31:41.


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
Copyright 1996-2007 Club Delphi