Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Abrir un archivo txt en un StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=62272)

blackpic 14-12-2008 18:05:47

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............

Caral 14-12-2008 18:52:56

Hola
Tal vez si nos muestras lo que tienes podriamos darnos una idea.
Saludos

blackpic 14-12-2008 19:10:11

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;

Delphius 14-12-2008 19:16:40

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 14-12-2008 19:29:48

Cita:

Empezado por blackpic (Mensaje 330852)
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 (Mensaje 330848)
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,

Caral 14-12-2008 20:21:21

Hola
Aqui hay un ejemplo que hace mas cosas de las que necesitas, seguro te guiara.
Saludos

blackpic 14-12-2008 20:36:01

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...

Delphius 14-12-2008 22:07:15

Cita:

Empezado por blackpic (Mensaje 330864)
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...

:confused::confused::confused:
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,

blackpic 14-12-2008 22:47:39

Disculpa pero ya esta el post correjido

Delphius 15-12-2008 00:51:27

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,

blackpic 16-12-2008 03:08:44

Hola
Gracias amigo Delphius por tus aporte y colavoracion ya pude salir adelante...
ya sigo a vanzando en esta aplicacion..

JUANCBARRETO 18-04-2009 21:08:15

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;

GustavoCruz 25-07-2013 19:44:22

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


La franja horaria es GMT +2. Ahora son las 07:14:50.

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