-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathURL_ZIP_TABLE.sas
51 lines (46 loc) · 1.13 KB
/
URL_ZIP_TABLE.sas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
%let zipfile="~/saida.zip";
%let csvfile="~/arquivo.csv";
%let csf="arquivo.csv"; /*necessario nome do arquivo sem path*/
%let zipurl="http://url/download/saida.zip";
/* baixa o zip com o csv */
filename saida &zipfile;
proc http out=saida
url=&zipurl
method="get";
run;
/* Lista o conteudo do zip */
filename saida ZIP &zipfile;
data conteudo(keep=memname isFolder);
length memname $200 isFolder 8;
fid=dopen("saida");
if fid=0 then
stop;
memcount=dnum(fid);
do i=1 to memcount;
memname=dread(fid, i);
isFolder=(first(reverse(trim(memname)))='/');
output;
end;
rc=dclose(fid);
run;
/* exibe o conteudo da listagem */
title "Arquivos no zipfile";
proc print data=conteudo noobs N;
run;
/* extrai arquivo especifico do zip */
filename saida ZIP &zipfile;
filename extrai &csvfile;
data _null_;
infile saida(&csf) lrecl=256 recfm=F length=length eof=eof unbuf;
file extrai lrecl=256 recfm=N;
input;
put _infile_ $varying256. length;
return;
eof:
stop;
run;
/* carrega o csv numa tabela */
filename extrai &csvfile encoding="latin1";
proc import file=extrai out=CSVTABLE dbms=csv replace;
delimiter=';';
run;