Cita:
Empezado por Chaja
Ahora emtiendo por que no soy millonario.... Bucanero es es exelente....no entiendo como sabe, de que debe bajar el ultimo archivo... me doy cuenta que solo soy un simple Mortal.... y ya que esta te pregunto... no es posible listar los archivos disponibles ... por si uno quiere bajar uno anterior... gracias que existen personas que saben.... gracias Maestro Yoda
Ahora me queda descomprimirlo .....
|
Pues con lo de millonario... ya te digo que yo tampoco lo soy
Y maestro... pues tampoco lo creo, solo se trata de aportar en algunos temas de los que pueda conocer un poco
En cuanto a tu pregunta de como saber cual es el ultimo fichero que se ha subido y por tanto el que hay que descargar, es porque en tu listado HTML los ficheros van ordenados de mas recientes a mas antiguos, por eso el primero que encuentra es el mas reciente y no continua con la búsqueda.
Si lo que deseas es obtener la lista completa de ficheros disponibles, con unas pequeñas modificaciones al código que te propuse se consigue fácilmente:
La función GetURLZip la convierto a procedimiento pasandole un nuevo parámetro de tipo TStrings donde va a devolver toda la lista de ficheros obtenidos
Código Delphi
[-]
procedure GetURLZip(const AContent: string; Alist:TStrings; const Prefijo: string = '''../zips/cheques/'; const Sufijo: string = '.zip''');
var
inicio, fin, longitud:Integer;
AFile:string;
begin
Alist.clear;
inicio := 1;
while inicio > 0 do begin
inicio := Pos(Prefijo, AContent, inicio);
if inicio > 0 then begin
fin := Pos(Sufijo, AContent, inicio);
if (fin > inicio) then begin
longitud := (fin + Sufijo.Length) - inicio;
AFile := Copy(AContent, inicio, longitud);
Alist.Add(AFile.Replace('''', '').Replace('../', ''));
end;
inicio := fin + 1;
end;
end;
end;
la función DonwloadZIP tienes que separarla en dos partes:
1.- una la encargada de descargar el HTML y su correspondiente análisis, a esta yo le he cambiado el nombre y queda así:
Código Delphi
[-] function DonwloadListZIP (const APageBase, AURL:string; AList:TStrings):string;
var
HTMLContent, LocalFileZip: string; begin
HTMLContent := GetHTMLContent(APageBase + AURL);
if (HTMLContent = '') then
MessageDlg('No se ha podido realizar la descarga', mtError, [mbOK], 0)
else begin
GetURLZip(HTMLContent, AList);
end;
end;
Inserta un listbox en tu formulario y en el botón de carga
Código Delphi
[-]
procedure TForm2.Button1Click(Sender: TObject);
begin
DonwloadListZIP('http://www.bcra.gob.ar/', 'cheques/actualiza.asp', ListBox1.Items);
end;
2.- y la parte correspondiente a la descarga del propio fichero ZIP, llevala al evento dobleClick del listBox:
Código Delphi
[-]procedure TForm2.ListBox1DblClick(Sender: TObject);
var
LocalFileZip: string;
begin
with ListBox1 do
if ItemIndex >= 0 then begin
LocalFileZip := DescargarFileURL('http://www.bcra.gob.ar/' + items[ItemIndex]);
if LocalFileZip = '' then
MessageDlg('No se ha podido descargar el fichero ZIP desde la URL ', mtError, [mbOK], 0)
else
MessageDlg(LocalFileZip, mtInformation, [mbOK], 0);
end;
end;
En cuanto a descomprimir el fichero ZIP y obtener los datos que contiene, puedes hacerlo:
-Con ShellApi a compresores externos como el propio WINZIP, WINRAR, etc. con sus correspondientes parámetros. Como desventaja, el programa tiene que estar instalado en el equipo del cliente y aquí no puedes controlar casi nada en el proceso de descompresión.
-Con componentes de compresión de ficheros para delphi (yo en particular utilizo el componente TZIPMASTER) funciona aunque no haya instalado ningún programa de compresión externo, y en este caso si que podrás utilizar las propias herramientas del componente para listar los ficheros contenidos y/o descomprimir selectivamente lo que puedas necesitar.