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 14-12-2008
Avatar de blackpic
blackpic blackpic is offline
Miembro
 
Registrado: ago 2007
Ubicación: Rep Dom
Posts: 11
Poder: 0
blackpic Va por buen camino
Abrir un archivo txt en un StringGrid

Hola tengo el siguiente problema a la hora de abrir un archivo Txt y cargarlo a un StringGrid... Quiero que cuando habra el archivo, visualizarlo en forma de matrix en el StringGrid...
Por ejemplo en contenido del Txt es 'Delphi' y me gustaria verlo en la matrix de esta forma 'D e l p h i'.....
ya realice un pequeño ejemplo de como verlo en un Memo pero para la otra forma no tengo idea de como hacerlo....

Desde ya muchas gracias............
Responder Con Cita
  #2  
Antiguo 14-12-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Tal vez si nos muestras lo que tienes podriamos darnos una idea.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 14-12-2008
Avatar de blackpic
blackpic blackpic is offline
Miembro
 
Registrado: ago 2007
Ubicación: Rep Dom
Posts: 11
Poder: 0
blackpic Va por buen camino
bueno te cuento que con un simplie codigo, usando un button y usando un Opendialog puedo abrir el archivo Txt y visualizarlo en un Memo...

aqui estan las pocas linea del codigo..

procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Execute;
memo1.Lines.LoadFromFile(opendialog1.FileName);
{nose lo que va aqui para tambien cargarlo en el stringgrid}

end;
Responder Con Cita
  #4  
Antiguo 14-12-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 blackpic,
No se si te he comprendido bien. ¿Deseas que el texto leído de un archivo se copie en un TStringGrid, cada letra en una columna distinta?

Si es eso, entonces bastaría con realizar un algoritmo como este, por ejemplo:

1. Establecer la cantidad de columnas adecuadas al tamaño del texto
2. Recorrer el texto y copiar el caracter i_ésimo en la columna i_ésima

Un ejemplo de esto es como sigue:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var i, cant: integer;

begin
  cant := Length(edit1.Text); // la longitud de texto

  StringGrid1.ColCount := cant + 1; // suponemos que la primera columna es "fija"
  for i := 1 to cant do
    StringGrid1.Cells[i,1] := Edit1.Text[i]; // copiamos caracter
end;

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 14-12-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 blackpic Ver Mensaje
bueno te cuento que con un simplie codigo, usando un button y usando un Opendialog puedo abrir el archivo Txt y visualizarlo en un Memo...

aqui estan las pocas linea del codigo..

procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Execute;
memo1.Lines.LoadFromFile(opendialog1.FileName);
{nose lo que va aqui para tambien cargarlo en el stringgrid}

end;
Bueno, eso es un avanze. El tema es que un StringGrid es una matriz. Y como matríz, para acceder a sus elementos, hay que referenciarlos por sus índices.

Para leer un archivo tienes dos opciones: Cargarlo en una fila, o cargarlo en una columna.
El StringGrid tiene dos propiedades del tipo TStrings: Cols, y Rows. Como son TStrings, cuentan con el método LoadFromFile. En resumen lo que pareciera estás buscando es esto:
Código Delphi [-]
StringGrid1.Cols[NumeroColumna].LoadFromFile(...); // O Bien,
StringGrid1.Rows[NumeroFila].LoadFromFile(...);

Pero hay algo que me llama la atención. Cómo debemos interpretar la diferencia entre 'Delphi' y 'D e l p h i'?:

Cita:
Empezado por blackpic Ver Mensaje
Quiero que cuando habra el archivo, visualizarlo en forma de matrix en el StringGrid...
Por ejemplo en contenido del Txt es 'Delphi' y me gustaria verlo en la matrix de esta forma 'D e l p h i'.....
Si es como yo me lo imaginé en el post anterior, entonces deberás implementar tu propia rutina "LoadFromFile" para que a medida que lees el contenido del archivo, copies caracter a caracter ya sea en filas o en columnas.

Aconsejo leer la ayuda que proporciona Delphi sobre el componente que estamos tratando.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 14-12-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Aqui hay un ejemplo que hace mas cosas de las que necesitas, seguro te guiara.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 14-12-2008
Avatar de blackpic
blackpic blackpic is offline
Miembro
 
Registrado: ago 2007
Ubicación: Rep Dom
Posts: 11
Poder: 0
blackpic Va por buen camino
bueno sigo con mis avances gracias a ustedes intentendo hacer algo con estas linea
Código Delphi [-]
 StringGrid1.Cols[NumeroColumna].LoadFromFile(...); // O Bien, 
StringGrid1.Rows[NumeroFila].LoadFromFile(...);


hice esta parte haver como podria verce el Txt en las columnas
y lo que sale en cada columna es
|Delphi| |Delphi| |Delphi| |Delphi| |Delphi| |Delphi|,
6 veces ya que en el contenido del Txt hay 6 lectras.. estoy buscano la manera de visualizarlo como el ejemplo que me puso el amigo Delphius con el Edit...

este es lo poco que tengo realizado...
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject); 
var i, cant: integer;
begin 
opendialog1.Execute;  
cant := Length(opendialog1.FileName); // la longitud de texto  
StringGrid1.ColCount := cant + 1; // suponemos que la primera columna es "fija"   
for i := 1 to cant do  
stringgrid1.Cols[i].LoadFromFile(opendialog1.FileName);
 end;

ah amigo Delphius cuando me referia a escribir 'Delphi' y 'D e l p h i'?: era a representarlo ya sea en las columnas o en las filas de la matriz... y disculpa no se por que salio mal cuando lo publique ya que le di vista previa y vi el post bien...

Última edición por blackpic fecha: 14-12-2008 a las 22:46:42.
Responder Con Cita
  #8  
Antiguo 14-12-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 blackpic Ver Mensaje
bueno sigo con mis avances gracias a ustedes intentendo hacer algo con estas linea
Código Delphi [-]StringGrid1.Cols[NumeroColumna].LoadFromFile(...); // O Bien, StringGrid1.Rows[NumeroFila].LoadFromFile(...);


hice esta parte haver como podria verce el Txt en las columnas
y lo que sale en cada columna es
|Delphi||Delphi||Delphi||Delphi||Delphi||Delphi|, 6 veces ya que en el contenido del Txt hay 6 lectras.. estoy buscano la manera de visualizarlo como el ejemplo que me puso el amigo Delphius con el Edit... este es lo poco que tengo realizado...
Código Delphi [-]procedure TForm1.Button2Click(Sender: TObject); var i, cant: integer; begin opendialog1.Execute; cant := Length(opendialog1.FileName); // la longitud de texto StringGrid1.ColCount := cant + 1; // suponemos que la primera columna es "fija" for i := 1 to cant do stringgrid1.Cols[i].LoadFromFile(opendialog1.FileName); end;


ah amigo Delphius cuando me referia a escribir 'Delphi' y 'D e l p h i'?: era a representarlo ya sea en las columnas o en las filas de la matriz...

blackpic, la verdad es que no logro entender nada de lo que escribiste.
Por favor edita el mensaje y emplea correctamente la etiqueta DELPHI:
[ DELPHI ]el código aqui[ /DELPHI ]

(Sin los espacios entre los corchetes)
Para que el código se resalte.

¿Cómo que te sale 6 veces, seis letras? Yo veo que por lo que comentas: tienes escrito 6 veces "Delphi" en tu archivo.
Ha, por cierto, cuando uno invoca al LoadFromFile() debe, previamente, establecerse la cantidad de filas o columnas. Al menos en D6, no se añaden las filas o columnas necesarias para que todo el contenido del archivo entre. Desconozco si en otras versiones el comportamiento es similar, o si se ha modificado.

¿Podrías aclararte por favor?
Cuanto más detalles nos aportes más fácil será ayudarte. No te vamos a cobrar por la cantidad de palabras. No ahorres, se más descriptivo y prolijo al momento de postear. Por favor.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 14-12-2008
Avatar de blackpic
blackpic blackpic is offline
Miembro
 
Registrado: ago 2007
Ubicación: Rep Dom
Posts: 11
Poder: 0
blackpic Va por buen camino
Disculpa pero ya esta el post correjido
Responder Con Cita
  #10  
Antiguo 15-12-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 blackpic,
Ahora si se entiende.

El motivo de porqué te aparece Delphi repetido en las filas o columnas se debe a que estás abriendo el archivo en todas las filas o columnas.

Los ejemplos que te he dado son simples. Se supone que tu en base a esos ejemplos los adaptaras a tus necesidades.

En el primer código que te he mostrado, dado el contenido de un TEdit, se "crean" las columnas necesarias para contener todo el texto, y luego caracter a caracter se va copiando el contenido.

En el segundo ejemplo he dado a conocer la forma en como se puede leer un archivo de texto, y mostrarlo en una fila o columna (según sea el caso).

Estás confundiendo las propiedades Cells, Rows, y Cols.

En resumen es:
Cells: para acceder a una celda dada una posición determinada.
Cols: para acceder a una columna determinada.
Rows: para acceder a una fila determinada.

Cuando te recomendé ir a la ayuda, no es por vago, sino porque allí está bien aclarado el uso de cada propiedad. No te enojes pero cuando uno hace uso de un componente, es mejor ir a la ayuda y documentarse un poco de su uso.

El problema es que el TStringGrid no cuenta con un método, procedimiento o función que lea el contenido de un archivo y lo escriba en el TStringGrid, caracter a carácter en una fila o columna distinta. Necesariamente debes implementar tu la rutina que haga lo que necesitas.

Y disculpa que sea insistente, pero tu explicación está muy floja.
¿Cuántas líneas tiene el texto? ¿Sólo se lee una? ¿10? ¿200?

Nos comentabas que el archivo tiene el texto "Delphi". ¿Sólo eso? ¿Esa única línea? ¿O es que lo hiciste a modo de ejemplo?

Si el archivo tiene muchas líneas, y se debe volcar el contenido caracter a caracter, habrá que recorrer cada línea y traspasar el contenido de forma similar al primer ejemplo. Pero hay que considerar algo fundamental: la cantidad de columnas (o fila, según sea el caso) debe ser del largo de la línea más larga de todo el archivo.

Es decir, que dado un archivo con un texto así:
Código:
Texto1
UnTexto
Otro texto más largo
En un StringGrid, por lo que parecieran ser tus breves escritos, debería quedar así:
Código:
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| T | e | x | t | o | 1 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| U | n | T | e | x | t | o |   |   |   |   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| O | t | r | o |   | t | e | x | t | o |   | m | á | s |   | l | a | r | g | o |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Si eso es correcto, me parece más apropiado leer el archivo desde un TStringList, y luego trabajar linea a linea y copiando el contenido.

Algo así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var lista: TStringList;
    cant, max, i,j: integer;
begin
  lista := TStringList.Create;
  lista.LoadFromFile('C:\Documents and Settings\Administrador\Escritorio\la oreja.txt');

  // calcular la cantidad de columnas a necesitar
  max := 0;
  for i := 0 to lista.Count - 1 do
    if max < Length(lista[i])
       then max := Length(lista[i]);

  StringGrid1.ColCount := max + 1; // supuesto: columna 0 es "fija"
  StringGrid1.RowCount := lista.Count + 1; //supuesto: fila 0 es "fija"

  // linea a linea del archivo, vamos a copiando...
  for i := 0 to lista.Count - 1 do
    begin
      for j := 1 to Length(Lista[i]) do
        StringGrid1.Cells[j,i + 1] := lista[i][j];
    end;

  lista.Free;
end;

Notarás que ya sea que en el archivo exista una o más líneas el código funciona.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 16-12-2008
Avatar de blackpic
blackpic blackpic is offline
Miembro
 
Registrado: ago 2007
Ubicación: Rep Dom
Posts: 11
Poder: 0
blackpic Va por buen camino
Hola
Gracias amigo Delphius por tus aporte y colavoracion ya pude salir adelante...
ya sigo a vanzando en esta aplicacion..
Responder Con Cita
  #12  
Antiguo 18-04-2009
Avatar de JUANCBARRETO
JUANCBARRETO JUANCBARRETO is offline
Registrado
 
Registrado: mar 2007
Posts: 7
Poder: 0
JUANCBARRETO Va por buen camino
Abrir Txt En String Grid

ABRIR TXT EN STRING GRID SEPARADO POR ALGUN TIPO DE CARACTER COMO COMA U OTRO, EN ESTE CASO POR |

Procedure Tform1.CargaTabla(Ruta:String;Tabla:TStringgrid);
var Let : File of Char;
dat : char;
n,col,fil:integer;
s : string;
begin
n:=0;
col:=0;
fil:=0;
AssignFile(Let,Ruta);
Reset (Let);
while (n <= FileSize(Let)-1) do
begin
Seek(Let,n);
Read(Let, Dat);
if (dat <> '|') and (dat<>#13)and (dat<>#10) then
begin
s:=s+dat;
end;
if (dat = '|') OR (n = FileSize(Let)-1)OR (dat=#10) then
begin
s:=TRIM(s);
S:=StringReplace(s,'"','',[rfReplaceAll]);
tabla.Cells[col,fil]:=S;
col:=col+1;
s:='';
end;
if(dat=#10)then
begin
fil:=fil+1;
col:=0;
end;
tabla.ColWidths[0]:=150;
tabla.ColWidths[1]:=80;
n:=n+1;
end;
tabla.RowCount:=fil;
CloseFile(let);
end;
Responder Con Cita
  #13  
Antiguo 25-07-2013
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola JUANCBARRETO, estoy haciendo un pequeño validador... y necesito exactamente la solución que planteas así que probé y me fue bien, pero hay un pequeño detalle... la rutina no me carga la última línea del archivo y no he podido dar con la solución

Gracias de antemano por tu tiempo


Gustavo Cruz
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
no puedo abrir un archivo con ShellExecute si el archivo es variable belpab API de Windows 2 28-11-2007 16:24:22
STringGrid: cargar archivo previamente guardado. amadis OOP 4 01-05-2007 23:52:30
Abrir .INI en StringGrid Iskariote0087 Varios 3 04-08-2006 17:58:58
Abrir archivo Ivan_25 C++ Builder 8 09-11-2005 12:28:20
Exportar un StringGrid a un Archivo.TxT kokoyweb Varios 1 24-08-2004 22:04:26


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


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