Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   filesize (https://www.clubdelphi.com/foros/showthread.php?t=78429)

gusspagano 19-04-2012 07:10:52

filesize
 
Tengo un *.txt con 418 lineas, y la función filesize me dice que tengo 114 lineas nada más, alguien sabe por que?

Gracias.

Neftali [Germán.Estévez] 19-04-2012 09:50:26

¿Puedes poner un ejemplo cómo estás utilizando esa función?
Según la ayuda FileSize retorna el número de registros de un fichero, que no es lo mismo que el número de líneas.

gusspagano 19-04-2012 17:36:30

ahh, entonces no es lo mismo linea que registro!!

esto es lo que hago:


Código Delphi [-]
procedure TForm1.btnOkClick(Sender: TObject);
var
  origen,destino,archivo: string;
  lista: textfile;
  lineas,contador,porcentaje: integer;
begin
  origen:=edtOrg.Text;
  destino:=edtDtn.Text;
  assignfile (lista, opdLst.FileName);
  reset (lista);
  lineas:=filesize(lista);
  showmessage (inttostr(lineas));
  contador:=0;
  porcentaje:=0;
  readln (lista,archivo);
  while not Eof (lista) do
  begin
    copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
    readln (lista,archivo);
    contador:=contador+1;
    porcentaje:=trunc(contador*(100/lineas));
    Form1.ProgressBar1.Position:=porcentaje;
  end;
  copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
  closefile (lista);
  form1.ProgressBar1.Position:=0;
  showmessage ('MISSION COMPLETE !!');
end;

gusspagano 19-04-2012 17:44:55

Cita:

Empezado por gusspagano (Mensaje 430447)
ahh, entonces no es lo mismo linea que registro!!

esto es lo que hago:


Código Delphi [-]
procedure TForm1.btnOkClick(Sender: TObject);
var
  origen,destino,archivo: string;
  lista: textfile;
  lineas,contador,porcentaje: integer;
begin
  origen:=edtOrg.Text;
  destino:=edtDtn.Text;
  assignfile (lista, opdLst.FileName);
  reset (lista);
  lineas:=filesize(lista);
  showmessage (inttostr(lineas));
  contador:=0;
  porcentaje:=0;
  readln (lista,archivo);
  while not Eof (lista) do
  begin
    copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
    readln (lista,archivo);
   contador:=contador+1;
    porcentaje:=trunc(contador*(100/lineas));
    Form1.ProgressBar1.Position:=porcentaje;
  end;
  copyfile(pchar(origen+'\'+archivo),pchar(destino+'\'+archivo),true);
  closefile (lista);
  form1.ProgressBar1.Position:=0;
  showmessage ('MISSION COMPLETE !!');
end;

perdón, me faltó decir que según yo, usaría el número de lineas para luego mostrar el avance en una barra de proceso.

Eso es lo que intento hacer, algo sencillo para ustedes seguramente.

ecfisa 19-04-2012 18:42:08

Hola gusspagano.

Para calcular las líneas del archivo de texto podrías hacer:
Código Delphi [-]
function FileNumberLines(Nombre: string): Int64;
begin
  if FileExists(Nombre) then
    with TStringList.Create do
    try
      LoadFromFile(Nombre);
      Result:= Count;
    finally
      Free;
    end
  else
    Result:= -1;
end;

Y si el archivo llegara a ser tan enorme que no fuera viable usar TStrings:
Código Delphi [-]
function BigFileNumberLines(Nombre:string): Longint;
var
  Num: Integer;
  f: TextFile;
  s: string;
begin
  Num:= 0;
  AssignFile(f,Nombre);
  try
    Reset(f);
    while not eof(f) do
    begin
      Readln(f,s);
      Inc(Num);
    end;
    Result:= Num;
    CloseFile(f);
  except
   Result:= -1;
  end;
end;

Saludos.

gusspagano 19-04-2012 19:01:41

Gracias ecfisa, lo voy a intentar...


La franja horaria es GMT +2. Ahora son las 23:31:30.

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