A instrução START no COBOL é utilizada para posicionar a leitura em um arquivo indexado ou relativo, com base em uma chave, preparando-o para uma leitura sequencial a partir do ponto encontrado. É fundamental quando você precisa iniciar uma leitura a partir de uma posição específica no arquivo.

📌 Para que serve

  • Posicionar o ponteiro de leitura em um registro específico.

  • Permitir leitura sequencial a partir de uma chave (principal ou alternativa).

  • Utilizar condições como EQUAL, GREATER THAN, NOT LESS THAN, etc., para definir o ponto de início.

  • Trabalhar com arquivos de acesso sequencial ou dinâmico.

🧾 Sintaxe básica

START nome-arquivo
    KEY IS [NOT] <condição> chave-de-busca
    [INVALID KEY instrução-erro]
    [NOT INVALID KEY instrução-sucesso]
END-START

📌 Exemplo com EQUAL TO:

START ARQ-CLIENTES
    KEY IS EQUAL TO CHAVE-CLIENTE
    INVALID KEY DISPLAY "Registro não encontrado"
END-START

📌 Exemplo com GREATER THAN:

START ARQ-CLIENTES
    KEY IS GREATER THAN CHAVE-CLIENTE
    NOT INVALID KEY PERFORM LER-SEGUINTES
END-START

✅ Exemplo prático completo

FD ARQ-CLIENTES
   RECORD KEY IS CHAVE-CLIENTE.

01 REG-CLIENTE.
   05 CHAVE-CLIENTE     PIC 9(5).
   05 NOME-CLIENTE      PIC X(30).

WORKING-STORAGE SECTION.
01 CHAVE-BUSCA         PIC 9(5) VALUE 12345.

PROCEDURE DIVISION.
    START ARQ-CLIENTES
        KEY IS GREATER THAN CHAVE-BUSCA
        INVALID KEY DISPLAY "Cliente não encontrado"
        NOT INVALID KEY DISPLAY "Posicionado com sucesso"
    END-START.

⚙️ Como funciona internamente

  • A instrução compara a chave informada (data-name) com os registros do arquivo.

  • Se for encontrada uma posição correspondente, o ponteiro do arquivo é movido para aquele ponto.

  • Um READ NEXT (ou READ) subsequente começará a partir desse ponto.

  • Pode utilizar as condições: EQUAL TO, GREATER THAN, NOT LESS THAN, >=, etc.

  • Funciona com a RECORD KEY (principal) ou ALTERNATE RECORD KEY (chave alternativa).

  • Se não encontrar, executa INVALID KEY, se presente.

⚠️ Regras importantes

  • O arquivo deve estar aberto em modo INPUT ou I-O.

  • START não funciona com arquivos de tipo SORT.

  • A comparação é feita como se os campos fossem alfanuméricos (mesmo que sejam numéricos).

  • A PROGRAM COLLATING SEQUENCE não se aplica à instrução START.

  • A instrução START não recupera dados — apenas posiciona para uma leitura futura.

🧠 Dicas práticas

  • Use START quando precisar localizar um ponto específico em arquivos indexados.

  • Sempre trate a possibilidade de erro com INVALID KEY para evitar comportamentos inesperados.

  • Após um START bem-sucedido, você pode usar READ NEXT para continuar a leitura a partir do ponto posicionado.

  • Quando o arquivo é relativo, a chave deve ser a RELATIVE KEY.

✅ Conclusão

A instrução START é essencial em programas que trabalham com arquivos indexados ou relativos, permitindo iniciar a leitura a partir de uma chave específica. É uma ferramenta poderosa quando combinada com READ NEXT, pois oferece flexibilidade e controle total sobre a navegação nos dados.