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 10-03-2009
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
Question Catidad de Filas de un archivo

Hola gente del foro, estoy realizando una aplicación la cual toma cierta información de un archivo csv, y tengo que ingresarla a un TStringGrid la cantidad de columnas las conozco pero la cantidad de filas, para leer la información lo hago como archivo de texto normal, lo que quisiera saber es si hay alguna forma de conocer la cantidad de filas que tiene el archivo para así mostrar con un TProgressBar el progreso de la carga.

Este es el código que utilizo para cargar el archivo:

Código Delphi [-]
function CsvToStringGrid(AGrid: TStringGrid; ACSVFile: String): Boolean;
var
  Archivo: TextFile;
  i,j,Columnas: integer;
  aux,aux2: String;
  p: TfrmProgress;
begin
  AssignFile(Archivo,ACSVFile);
  Reset(Archivo);
  Readln(Archivo,aux);
  Columnas:= ContarColumnas(aux);
  AGrid.ColCount:= Columnas;
  p:= TfrmProgress.Create(nil);
  p.pbPrincipal.Min:= 0;
//  p.pbPrincipal.Max:= {?};
  for i := 1 to Columnas - 1 do
    AGrid.Cells[i,0]:= GetColumna(i); // Función que devuelve el título de la columna
  j:= 1;
//  p.Show;
  while (not Eof(Archivo)) and (p.Seguir = True) do // P.Seguir es una variable tipo Boolean que cambia su estádo Con un botón Cancelar
  begin
    i:= 1;
    AGrid.Cells[0,j]:= IntToStr(j);
    while Pos(';',aux) > 0 do
    begin
      aux2:= Copy(aux,1,Pos(';',aux)-1);
      AGrid.Cells[i,j]:= aux2;
      Delete(aux,1,Pos(';',aux));
      i:= i + 1;
    end;
    Readln(Archivo,aux);
    j:= j + 1;
    AGrid.RowCount:= j + 1;
//    p.pbPrincipal.Position:= {?}; // Mostrar progreso
  end;
  p.Free;
  CloseFile(Archivo);
end;

Saludos.
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS
Responder Con Cita
  #2  
Antiguo 10-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola totote, para saber el numero de filas directamente de la forma que estas leyendo no se puede, solo si recorres todo "while (not Eof(Archivo)).." y guardandolo en algún acumulador puedes obtenerlo osea al final, en ese caso también te serviría el StringGrid.RowCount que tienes al salir del While, pero creo que tu quieres obtenerlo antes para eso puedes utilizar un StringList y cargarlo ahí, inclusive puedes leer desde ahí.

Código Delphi [-]
  sl := TStringList.Create;

  sl.LoadFromFile('TuArchivo');
  showmessage('La cantidad de líneas es: '+IntToStr(sl.Count));

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 10-03-2009
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
Talking

Caro muchas gracias me funcionó perfectamente, al final resultó más facil que de la forma en que lo estaba haciendo, ya que tomo los valores directamente del TStringList

Así quedó el código

Código Delphi [-]
function CsvToStringGrid(AGrid: TStringGrid; ACSVFile: String): Boolean;
var
  i,j,Columnas: integer;
  aux: String;
  p: TfrmProgress;
  sl: TStringList;
begin
  Result:= False;
  sl:= TStringList.Create;
  sl.LoadFromFile(ACSVFile);
  aux:= sl[0];
  Columnas:= ContarColumnas(aux);
  AGrid.ColCount:= Columnas;
  p:= TfrmProgress.Create(nil);
  p.pbPrincipal.Min:= 0;
  p.pbPrincipal.Max:= sl.Count;
  for i := 1 to Columnas - 1 do
    AGrid.Cells[i,0]:= GetColumna(i); // Función que devuelve el título de la columna
  j:= 0;
  p.Show;
  while (j < sl.Count ) and (p.Seguir = True) do // P.Seguir es una variable tipo Boolean que cambia su estádo Con un botón Cancelar
  begin
    i:= 1;
    AGrid.Cells[0,j]:= IntToStr(j+1);
    aux:= sl[j];
    while Pos(';',aux) > 0 do
    begin
      AGrid.Cells[i,j]:= Copy(aux,1,Pos(';',aux)-1);
      Delete(aux,1,Pos(';',aux));
      i:= i + 1;
    end;
    j:= j + 1;
    AGrid.RowCount:= j + 1;
    Result:= True;
    p.pbPrincipal.Position:= j; // Mostrar progreso
    p.Caption:= 'Completado: ' + IntToStr((j * 100) div sl.Count) + '%';
  end;
  p.Free;
end;

Saludos y muchas gracias
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS
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
Filas y Columnas pmcastilla Varios 2 07-12-2007 20:22:01
Filas del datagrid Mariolarr .NET 0 18-09-2007 16:36:18
Filas a columnas nightynvid MS SQL Server 0 31-05-2006 16:22:44
Formar Filas D-MO Humor 8 25-11-2005 21:48:02
No de Filas en datagrid VB.NET pzhero .NET 3 08-06-2004 21:01:47


La franja horaria es GMT +2. Ahora son las 09:53:42.


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