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.