Discussões sobre a linguagem COBOL e suas melhores práticas.

ASSIGN Clause

Mais
1 semana 4 dias atrás - 1 semana 4 dias atrás #82 por Philippe
ASSIGN Clause foi criado por Philippe
Olá a todos,
Sou iniciante em COBOL e vi com interesse o site de vocês.
Gostaria de executar um pequeno programa em Cobol com o mvs 3.8j tk5 que leia alguns dados em um conjunto de dados (sem membros). Não tenho dificuldades específicas para escrever o código, mas não consigo usar a cláusula ASSIGN na INPUT-OUTPUT SECTION. A seguir, um trecho do código na seção de ambiente:


INPUT-OUTPUT SECTION.
FILE-CONTROL.
         SELECT MYFILE ASSIGN TO PHYSDATA
              ORGANIZATION IS SEQUENTIAL.


e a seguir o link no jcl :

//PHYSDATA DD DSN=HERC02.COBOL.DATA,DISP=SHR

Quando executo o programa sempre recebo a mensagem de erro informando :

« Device class invalid in system-name »
« external-name not present in system-name »

O conjunto de dados está bem criado e parece ser bom.
Alguma ideia? Eu sei que algo está errado, mas realmente não vejo

Philippe
Ultima edição: 1 semana 4 dias atrás por Philippe.
Os seguintes usuário(s) disseram Obrigado: bopnet

Por favor Entrar ou Registrar para participar da conversa.

Mais
1 semana 2 dias atrás #83 por bopnet
Respondido por bopnet no tópico ASSIGN Clause
Fala, Philippe!

Você trombou num detalhe clássico de “mundo legado”: no MVS 3.8J (TK5), muita coisa ainda segue a gramática do OS/VS COBOL, que é mais antiga. Resultado? Alguns ASSIGN que funcionam no Enterprise COBOL mais novo não batem com o dialeto do TK5.

O erro

“Device class invalid in system-name”

“external-name not present in system-name”
aparece quando o COBOL do MVS antigo não reconhece o system-name do ASSIGN — ele espera um prefixo de classe de dispositivo no nome do sistema.

Como corrigir no TK5 (OS/VS COBOL)

Para arquivo sequencial em disco (QSAM), use o padrão com prefixo UT-S- (ou DA-S-, dependendo do dialeto instalado; no TK5, UT-S- costuma atender bem para sequenciais):

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT MYFILE ASSIGN TO UT-S-PHYSDATA
ORGANIZATION IS SEQUENTIAL.

E no JCL, mantenha o DD assim (DDNAME em maiúsculas e até 8 chars):

//PHYSDATA DD DSN=HERC02.COBOL.DATA,DISP=SHR


Por que isso?
No OS/VS COBOL, o ASSIGN usa um mapeamento por classe de dispositivo (UT-, DA-, PRT-, etc.) + o DDNAME. Já no Enterprise/VS COBOL II, o ASSIGN TO ddname “puro” é aceito. Como o TK5 é MVS 3.8J, ele puxa o jeito antigo — legado raiz.

Abraço e bem-vindo ao Forum COBOL Dicas! 🦖

COBOL is not DEAD!

Por favor Entrar ou Registrar para participar da conversa.

Mais
1 semana 2 dias atrás #84 por Philippe
Respondido por Philippe no tópico ASSIGN Clause
Ok, obrigado pela sua resposta, isso me ajuda a prosseguir com a depuração.
Os seguintes usuário(s) disseram Obrigado: bopnet

Por favor Entrar ou Registrar para participar da conversa.

Powered by Fórum Kunena