Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-03-2012
kirios kirios is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 27
Poder: 0
kirios Va por buen camino
Escribir en un texto desde cierta posición

Hola, una duda rápida.

Tengo un archivo de texto, el cual abro para reescribir (Assignfile,rewrite,etc)

Necesitaria escribir un dato en cada linea, pero no desde el principio, sino desde mas adelante, por ejemplo, escribir un 4 en la posicion 20 de la primera linea; un 7 en la posicion 20 de la segunda linea, y asi.

Alguna idea?

Graciaass
Responder Con Cita
  #2  
Antiguo 23-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si el archivo no es demasiado grande podrías leerlo en un TStringList y así acceder a las líneas del archivo como si fuera un arreglo de cadenas.

// Saludos
Responder Con Cita
  #3  
Antiguo 23-03-2012
kirios kirios is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 27
Poder: 0
kirios Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Si el archivo no es demasiado grande podrías leerlo en un TStringList y así acceder a las líneas del archivo como si fuera un arreglo de cadenas.

// Saludos
Esta buena la idea, pero ya tengo casi todo el código armado, se me complica empezar a cambiarlo ahora. Necesito algo que me deje acceder a la posicion x de la primera linea y asi, que escriba a partir de esa posicion.

seria algo como un writeln(archivo, texto) pero a partir de una dada posicion.

Gracias!
Responder Con Cita
  #4  
Antiguo 24-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por kirios Ver Mensaje
Hola, una duda rápida.

Tengo un archivo de texto, el cual abro para reescribir (Assignfile,rewrite,etc)

Necesitaria escribir un dato en cada linea, pero no desde el principio, sino desde mas adelante, por ejemplo, escribir un 4 en la posicion 20 de la primera linea; un 7 en la posicion 20 de la segunda linea, y asi.
No sé si entiendo bién lo que buscas, pero ajustandome lo que comentas arriba tendrías que poner tantos caracteres delante del dato como posicion desees que este.

A modo de ejemplo, para poner un asterisco en 40 líneas en las posiciónes 1 / 40 sucesivamente sería:
Código Delphi [-]
var
  Arch: TextFile;
  i: Integer;
  Dato: string;
begin
  AssignFile(Arch,'C:\ARCHIVO.TXT');
  Rewrite(Arch);
  Dato:= '*';
  for i:= 1 to 40 do
    Writeln(Arch, StringOfChar(' ', i) + Dato);
  CloseFile(Arch);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 24-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Y una vez abierto, ¿qué haces con él?
Responder Con Cita
  #6  
Antiguo 24-03-2012
kirios kirios is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 27
Poder: 0
kirios Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
No sé si entiendo bién lo que buscas, pero ajustandome lo que comentas arriba tendrías que poner tantos caracteres delante del dato como posicion desees que este.

A modo de ejemplo, para poner un asterisco en 40 líneas en las posiciónes 1 / 40 sucesivamente sería:
Código Delphi [-]
var
  Arch: TextFile;
  i: Integer;
  Dato: string;
begin
  AssignFile(Arch,'C:\ARCHIVO.TXT');
  Rewrite(Arch);
  Dato:= '*';
  for i:= 1 to 40 do
    Writeln(Arch, StringOfChar(' ', i) + Dato);
  CloseFile(Arch);
end;

Saludos.
Hola! Para verlo mas claro, estoy buscando la manera de escribir en un texto pero no alineado a la izquierda, sino en el centro, o en este caso, tantos caracteres mas a la derecha como yo quiera. Ej

Tengo el archivo siguiente:

ProductoA
ProductoB
ProductoC

Mi idea es hacer lo siguiente

ProductoA 4
ProductoB 2
productoC 5

ect. Los productos tienen diferentes longitudes y espacios. La idea es que los numeros que re-escribo queden alineados.

Gracias!
Responder Con Cita
  #7  
Antiguo 24-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Tengo el archivo siguiente:

ProductoA
ProductoB
ProductoC
Eso es lo que no entiendo, si en el archivo tenés datos, al hacer Rewrite estos se borrarán.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 24-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Me quedé pensando si lo que buscas no será modificar un archivo de texto existente y estás confundido con la funcionalidad del procedimiento Rewrite.

Al ser estos archivos de acceso secuencial sólamente te quedaría leer sobre el archivo origen, realizar los cambios, guardarlos en otro archivo destino y al finalizar, borrar el primero y renombrar el último como el primero.

Para darte una idea te pongo un ejemplo que numera cada línea de un archivo de texto:
Código Delphi [-]
procedure NumerarLineas(AName: string);
var
  Ori,Des: TextFile;
  Cont: Integer;
  TempName: string;
  Linea: string;
begin
  AssignFile(Ori, AName);
  AssignFile(Des, ExtractFileName(AName)+'@@@@'+ExtractFileExt(AName));
  Reset(Ori);
  Rewrite(Des);
  Cont:= 0;
  while not eof(Ori) do
  begin
    Readln(Ori, Linea);
    Insert(IntToStr(Cont)+ ') ', Linea, 1);
    Writeln(Des, Linea);
    Inc(Cont);
  end;
  CloseFile(Ori);
  CloseFile(Des);
  Erase(Ori);
  Rename(Des,AName);
end;
Llamada:
Código Delphi [-]
  NumerarLineas('C:\ARCHIVO.TXT');

Ahora vamos a hacer lo mismo del modo que te sugiere roman:
Código Delphi [-]
procedure NumerarLineas(AName: string);
var
  TS: TStrings;
  Cont: Integer;
  s: string;
begin
  TS:= TStringList.Create;
  try
   TS.LoadFromFile(Aname);
    for Cont:= 0 to TS.Count -1 do
    begin
      s:= TS[Cont];
      Insert(IntToStr(Cont+1)+')', s,  1);
      TS[Cont]:= s;
    end;
    TS.SaveToFile(AName);
  finally
    TS.Free;
  end;
end;
Mirá que sencillo ! ¿ Cuál es el inconveniente de hacerlo de esa forma ?, no tendrías que alterar tu código en absoluto.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-03-2012 a las 01:49:48.
Responder Con Cita
  #9  
Antiguo 24-03-2012
kirios kirios is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 27
Poder: 0
kirios Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Me quedé pensando si lo que buscas no será modificar un archivo de texto existente y estás confundido con la funcionalidad del procedimiento Rewrite.

Al ser estos archivos de acceso secuencial sólamente te quedaría leer sobre el archivo origen, realizar los cambios, guardarlos en otro archivo destino y al finalizar, borrar el primero y renombrar el último como el primero.

Para darte una idea te pongo un ejemplo que numera cada línea de un archivo de texto:
Código Delphi [-]
procedure NumerarLineas(AName: string);
var
  Ori,Des: TextFile;
  Cont: Integer;
  TempName: string;
  Linea: string;
begin
  AssignFile(Ori, AName);
  AssignFile(Des, ExtractFileName(AName)+'@@@@'+ExtractFileExt(AName));
  Reset(Ori);
  Rewrite(Des);
  Cont:= 0;
  while not eof(Ori) do
  begin
    Readln(Ori, Linea);
    Insert(IntToStr(Cont)+ ') ', Linea, 1);
    Writeln(Des, Linea);
    Inc(Cont);
  end;
  CloseFile(Ori);
  CloseFile(Des);
  Erase(Ori);
  Rename(Des,AName);
end;
Llamada:
Código Delphi [-]
  NumerarLineas('C:\ARCHIVO.TXT');

Ahora vamos a hacer lo mismo del modo que te sugiere roman:
Código Delphi [-]
procedure NumerarLineas(AName: string);
var
  TS: TStrings;
  Cont: Integer;
  s: string;
begin
  TS:= TStringList.Create;
  try
   TS.LoadFromFile(Aname);
    for Cont:= 0 to TS.Count -1 do
    begin
      s:= TS[Cont];
      Insert(IntToStr(Cont+1)+')', s,  1);
      TS[Cont]:= s;
    end;
    TS.SaveToFile(AName);
  finally
    TS.Free;
  end;
end;
Mirá que sencillo ! ¿ Cuál es el inconveniente de hacerlo de esa forma ?, no tendrías que alterar tu código en absoluto.

Saludos.
Hola! Si, me explique mal. En el archivo tengo datos, y lo que hago es copiarlos, modificarlos, y volver a escribirlos, pero con los numeros adelante, es como para iniciar un conteo de productos. Voy a probar esa solucion! Graciaaas!!
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
Escribir un texto en la pantalla? Alejo15x API de Windows 4 10-11-2010 21:43:07
Obtener posicion de Texto en un Memo (fila de texto) JuanErasmo Varios 2 26-06-2007 23:47:41
Ajustar la posición al tamaño del texto Carmelo Cash Impresión 2 12-07-2006 23:40:24
escribir texto en pantalla fcoprz Gráficos 5 26-08-2005 06:28:04
Imprimir en cierta posición con el Canvas BlueSteel Impresión 4 19-01-2005 15:47:33


La franja horaria es GMT +2. Ahora son las 15:00:27.


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