sábado, 12 de dezembro de 2009

Acucobol - exportando dados CSV

Utilizar ferramentas de escritório (office) como editor de textos e planilhas eletrônicas é uma prática comum nas empresas, e a integração dessas ferramentas com os sistemas de gestão é um ganho de produtividade bem significativo. Neste post irei demostrar como exportar informações para um arquivo CSV (Comma-separated values), que é um padrão de arquivos onde as colunas são delimitadas por ";" (por default), podendo ser outro caracter delimitador. É importante ressaltar que não utilizaremos componente ACTIVEX neste exemplo, pois não iremos formatar o CSV na planilha, apenas efetuar uma chamada de sistema do aplicativo da planilha passando como parâmetro o arquivo CSV.

Primeiramente devemos declarar o arquivo CSV, que não deixa de ser um arquivo texto (line sequential).

SELECT SAIDA ASSIGN TO DISK W-ARQ-CSV
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS FILE-STATUS.

FD SAIDA.
01 REG-SAIDA PIC X(300).

A seguir leitura dos registros, e gravação dos mesmos no arquivo CSV.

OPEN INPUT CADASTRO | abertura do arquivo

MOVE SPACES TO REG-SAIDA
MOVE "CODIGO;NOME;ENDERECO;CEP" TO REG-SAIDA | o primeiro registro é o cabeçalho
WRITE REG-SAIDA | grava registro

INITIALIZE REG-CADASTRO | inicializa registro no inicio do arquivo
START CADASTRO KEY IS > CHAVE-CADASTRO INVALID KEY | posiciona para leitura
EXIT PARAGRAPH
END-START
PERFORM UNTIL 1 = 2 | laço infinito
READ CADASTRO NEXT RECORD AT END
EXIT PERFORM | termina laço de repetição infinito (1=2)
END-READ
STRING CAD-CODIGO DELIMITED BY SIZE
";" DELIMITED BY SIZE
CAD-NOME DELIMITED BY " " | delimitado por 2 espaços
";" DELIMITED BY SIZE
CAD-ENDERECO DELIMITED BY " "
";" DELIMITED BY SIZE
CAD-CEP DELIMITED BY SIZE
INTO REG-SAIDA
END-STRING
WRITE REG-SAIDA | grava registro
END-WRITE
END-PERFORM

CLOSE CADASTRO | fecha arquivo


E por final, podemos chamar o aplicativo da planilha diretamente (observar o PATH do sistema).
Este exemplo também é funcional utilizando acuconnect(thinclient).
STRING "excel.exe /r " DELIMITED BY SIZE
W-ARQ-SAIDA DELIMITED BY SIZE
INTO W-AUX
END-STRING
CALL "C$SYSTEM" USING W-AUX, 129. | 128=CSYS-DESKTOP + 1=CSYS-ASYNC (chama excel e segue programa)
Grato pela oportunidade.

Nenhum comentário:

Postar um comentário