Lendo arquivo localmente com ABAP
Problema
Criar um programa para ler um arquivo local e mostrar o seu conteúdo em um relatório simples.
Um exemplo de arquivo a ser lido está neste link e ele possui o seguinte formato:
| Campo | Descrição | Tipo | Posição Inicial | Tamanho |
|---|---|---|---|---|
| CARRID | Airline Code | Char | 1 | 3 |
| CONNID | Flight Connection Number | Chara | 4 | 4 |
| FLDATE | Flight date | Char | 8 | 8 |
| PLANETYPE | Plane type | Char | 16 | 10 |
| SEATSMAX | Maximum capacity in economy class | Char | 26 | 10 |
| SEATSOCC | Occupied seats in economy class | Char | 36 | 10 |
O programa deve ter uma tela de seleção onde o usuário entra com o diretório e nome do arquivo e daí executar o programa.
Solução
1 – Criar um programa tipo executável.
2 – Tela de seleção:
PARAMETERS: p_file TYPE filename-fileextern.
Nota: É possível fazer uma search help para que o usuário possa buscar o arquivo na sua máquina. Mas isso será assunto para outro post
.
3 -Declarar uma tabela com apenas um campo para receber as linhas do arquivo e outra tabela interna com a estrutura do arquivo (descrita acima).
TYPES: BEGIN OF ty_line, line(50) TYPE c, END OF ty_line. TYPES: BEGIN OF ty_sflight, carrid TYPE sflight-carrid, connid TYPE sflight-connid, fldate TYPE sflight-fldate, planetype TYPE sflight-planetype, seatsmax TYPE sflight-seatsmax, seatsocc TYPE sflight-seatsocc, END OF ty_sflight. DATA: it_file TYPE TABLE OF ty_line, wa_line LIKE LINE OF it_line, wa_sflight LIKE LINE OF it_sflight.
4 – Chamar a Function Module GUI_UPLOAD.
CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = v_filename filetype = 'ASC' TABLES data_tab = it_file.
5 – Imprimir o relatório que é baseado no conteúdo do arquivo.
Execução e Teste
Para executar o programa apenas rode, preencha a tela de seleção com a localização do arquivo, por exemplo: C:\TEMP\upload.txt
Discussão
Como você pode verificar, a FM GUI_UPLOAD usa uma tabela interna para receber os dados do arquivo. A função devolve a tabela interna preechida com as linhas do arquivo. Por isso, eu criei a tabela interna com apenas um campo, de 49 posições, que é o tamanho máximo das linhas do arquivo em questão.
Outro ponto interessante é como eu criei a estrutura ty_sflight, com todos os campos tipo char. Isso por que a estrutura ty_line é char e como estou em um ambiente unicode, ele não aceita assign de estruturas com tipos diferentes.
MOVE wa_line TO wa_sflight.
Anexos
zfdownload – Programa completo.
Veja Também
Upload e download de arquivos.
