Você está na página 1de 20

Manual de PL/I Bsico

Manual de PL/I Bsico

-1-

1. ESTRUTURA PADRO DE UM PROGRAMA PL/I...................................................................................................................4


2. SINTAXE DO COMANDO PL/I......................................................................................................................................................4
3. IDENTIFICAO DO PROGRAMA.............................................................................................................................................5
PROGRAMA PRINCIPAL..................................................................................................................................................................5
SUB-ROTINA INTERNA OU EXTERNA.........................................................................................................................................5
4. DECLARAES...............................................................................................................................................................................5
5.1. DECLARAO DE ARQUIVOS................................................................................................................................................5
5.2. DECLARAO DE CAMPOS....................................................................................................................................................6
5.3. MSCARA DE EDIO PARA CAMPO NUMRICO ZONADO (PIC)................................................................................8
5.4. CAMPO NUMRICO ZONADO (PIC) COM SINAL................................................................................................................8
5.5. CAMPO DE TAMANHO VARIVEL (VARYING)..................................................................................................................8
5.6. ESTRUTURAS.............................................................................................................................................................................8
5.7. DECLARAO DE ESTRUTURA VIA "LIKE".......................................................................................................................9
5.8. REDEFINIO............................................................................................................................................................................9
5.9. REDEFINIO POSICIONAL....................................................................................................................................................9
5.10. IMPORTANTE / CUIDADO....................................................................................................................................................10
5. COPY-BOOK (INCLUDE).............................................................................................................................................................10
6. TRATAMENTO DE CONDIO DE EXCEO (ON CONDITIONS).................................................................................10
7. MANIPULAO DE ARQUIVO..................................................................................................................................................10
8.1. ARQUIVO TIPO "RECORD"....................................................................................................................................................10
8.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT...........................................................................................11
8. DESVIO INCONDICIONAL..........................................................................................................................................................11
9. ATRIBUIO..................................................................................................................................................................................12
10. EXPRESSES E OPERAES...................................................................................................................................................12
PRIORIDADE DAS EXPRESSES.................................................................................................................................................13
PRIORIDADES DOS OPERANDOS................................................................................................................................................13
11. OPERAES DE COMPARAO............................................................................................................................................13
12. COMANDO "IF"...........................................................................................................................................................................13
13. COMANDO "SELECT"...............................................................................................................................................................14
14. COMANDO "DO".........................................................................................................................................................................14
15. BLOCOS.........................................................................................................................................................................................15
SEQUNCIA DE EXECUO DOS BLOCOS...............................................................................................................................16
MAPA DE BLOCOS/VARIVEIS GLOBAIS E LOCAIS..............................................................................................................17
16. FUNES - BUILTIN...................................................................................................................................................................17
MULTIPLY(A,B,I,J)..........................................................................................................................................................................17
DIVIDE(A,B,I,J)................................................................................................................................................................................17
MOD...................................................................................................................................................................................................17
VERIFY(A,B)....................................................................................................................................................................................18
INDEX(A,B)......................................................................................................................................................................................18
SUBSTR(A,B,C)................................................................................................................................................................................18
LENGTH............................................................................................................................................................................................18
HIGH(N).............................................................................................................................................................................................18
LOW(N).............................................................................................................................................................................................18
LBOUND...........................................................................................................................................................................................18
Manual de PL/I Bsico

-2-

HBOUND...........................................................................................................................................................................................18
PLIRETC............................................................................................................................................................................................19
DATE.................................................................................................................................................................................................19
TIME..................................................................................................................................................................................................19
17. RECURSOS DE DEBUG...............................................................................................................................................................19
SUBSCRIPTRANGE.........................................................................................................................................................................19
CHECK...............................................................................................................................................................................................19
18. PARMETROS DE JOB..............................................................................................................................................................20

Manual de PL/I Bsico

-3-

1. ESTRUTURA PADRO DE UM PROGRAMA PL/I


LABEL:

PROC OPTIONS (MAIN) ;

Identificao do programa

DECLARE

arquivos ,
campos ,
PICTUREs de edio ,
tabelas ,
estruturas ,
inicializaes ,
redefinies ,
funes (BUILT-IN) ,
rotinas externas;

Declarao de variveis

ON CONDITIONS ;

Tratamento de condies

COMANDOS ;
movimentaes ;
expresses ;
concatenao ;
condies ;
LOOPs ;
manipulao de arquivos ;
manipulao de banco de dados ;
chamadas de rotinas internas;
chamadas de rotinas externas;
COMANDOS ;

Comandos / Instrues

ROT-LABEL: PROC ;

Identificao da
Sub-rotina interna

END ROT-LABEL ;

Finalizao da
Sub-rotina interna

END LABEL ;

Finalizao do programa

2. SINTAXE DO COMANDO PL/I


<instruo> ;

Qualquer comando / comentrio PL/I devero ser codificados entre as colunas 2 a 72

O trmino de qualquer comando PL/I identificado por ponto e vrgula (;)

Um comando PL/I poder ser codificado em uma ou mais linhas

No h posio nem caracter para indicar a continuao de um comando PL/I

O comentrio em PL/I dever estar codificado entre os caracteres "/*" (abre comentrio) e os caracteres "*/"
(fecha comentrio)

O comentrio PL/I poder ser condificado em qualquer ponto do fonte e poder ser de uma ou mais linhas

No existem palavras reservadas no PL/I

O ponto decimal no PL/I sempre o ponto (.)

Caracteres minsculos NO so aceitos em comandos e variveis

Manual de PL/I Bsico

-4-

3. IDENTIFICAO DO PROGRAMA
PROGRAMA PRINCIPAL
label : PROC (parmetro) OPTIONS (MAIN);
-- PROGRAMA -END label;
Label:

De 1 a 7 caracteres alfanumricos, iniciando sempre por um caracter alfabtico

SUB-ROTINA INTERNA OU EXTERNA


label : PROC (parmetro);
-- SUB-ROTINA -END label;
Label:

SUB-ROTINA INTERNA: De 1 a 31 caracteres alfanumricos e caracteres especiais ('#', '@', '$' e


'_'), iniciando sempre por um caracter alfabtico
SUB-ROTINA EXTERNA: De 1 a 7 caracteres alfanumricos, iniciando sempre por um caracter
alfabtico

4. DECLARAES
5.1. DECLARAO DE ARQUIVOS
DCL <identificao> FILE <tipo> <operao> ENV (<DCB> <opes>);
IDENTIFICAO
a mesma identificao (DDNAME) utilizada no carto DD do JCL
DCL ARQENT FILE ...;
|
|
//ARQENT DD DSN=...
TIPO
RECORD arquivo tipo registro
STREAM arquivo tipo cadeia
OPERAO

INPUT somente leitura

OUTPUT somente gravao

UPDATE leitura/atualizao

DCB
Formato do Registro que pode ser:
F Fixo
FB - Fixo Blocado
V Varivel
VB - Varivel Blocado
Clusula RECSIZE Define-se o tamanho do registro
Ex.: DCL ARQ FILE RECORD INPUT ENV (F RECSIZE(100));

Manual de PL/I Bsico

-5-

OPES
TOTAL Otimizao das rotinas de leitura e gravao
CTLASA Indica que o caracter de espacejamento est colocado na primeira posio da linha de impresso.
Caracteres Vlidos:
' '
imprime na linha seguinte
'0'
salta uma linha
'-'
salta duas linhas
'1'
salta para a pgina seguinte
'+'
imprime na mesma linha
Ex.: DCL ARQENT FILE RECORD INPUT ENV (FB RECSIZE(100) TOTAL);
Ex.: DCL RELAT FILE RECORD OUTPUT ENV (FB RECSIZE(133) CTLASA);
5.2. DECLARAO DE CAMPOS
DCL <identificao> <ocorrncia> <tipo> (<tamanho><,decimais>)
<alocao> INIT(<inicializao>);
IDENTIFICAO
29 caracteres de nome NO podendo iniciar por nmero
Caracteres alfabticos (A ~ Z), numricos (0 ~ 9) e alguns caracteres especiais ('#', '@', '$' e '_')
TIPO
CHARACTER (CHAR) - alfanumrico
PICTURE (PIC) numrico zonado
DECIMAL FIXED (FIXED) numrico compactado
DECIMAL FLOAT (FLOAT) numrico ponto flutuante
BINARY FIXED (BIN FIXED) numrico binrio
POINTER endereo
TAMANHO
CHAR de 1 32767
Ex.: CHAR(10)
PIC de 1 a 15 (inclusive decimais)
Ex.: PIC '(15)9'
pic '(13)9V99' - 15 dgitos onde 13 inteiras e 2 decimais
FIXED de 1 a 15 (inclusive decimais)
Ex.: FIXED(15)
FIXED(15,2) 15 dgitos onde 13 inteiras e 2 decimais
FLOAT de 1 a 33 (no h decimais)
Ex.: FLOAT(06)
BIN FIXED 15 (2 bytes) ou 31 (4 bytes) (no h decimais)
Ex.: BIN FIXED(15) / BIN FIXED(31)
No utilizar para operaes de multiplicao e diviso com campos que contenham decimais.
POINTER tamanho implicitamente definido (4 bytes)
Ex.: POINTER
BIT utilizado para testes lgico / zero (0) falso e 1 (um) verdadeiro)
Ex.: BIT(01)

Manual de PL/I Bsico

-6-

OCORRNCIA
Definio de tabela (ARRAY)
ndices variando de 32766 a 32767
Unidimensional
Ex.: TAB(10) 10 ocorrncias (de 1 a 10)
TAB(-4:10) 15 ocorrncias (de 4 a 10 inclusive 0)
Multidimensional at 9 dimenses
Ex.: TAB(10,10) / TAB(5,5,5)
TAB(-4:10,5,20,10)
INICIALIZAO
Clusula INIT
Alfanumrico INIT(' ') / INIT('
Ex.: CHAR(15) INIT(' ')

') / INIT((10)' ')

Numrico INIT(0)
Ex.: FIXED(15) INIT(0) / PIC'(09)9' INIT(12345)
BIT INIT('0'B) / INIT('1'B)
Ex.: BIT(1) INIT('0'B) / INIT('1'B)
Tabela alfanumrica
Ex.: TAB(5) CHAR(15) INIT((5)(01)' ') / INIT((05)(' ')) /
INIT('A','B','C','D','E')
Obs: TAB(5) CHAR(15) INIT((5)(01)' ')
|
|
FATOR DE INDEXAO
FATOR DE REPETIO
Inicializao durante execuo: TAB(*) = ' ';
Tabela numrica
Ex.: TAB(5) FIXED(15) INIT((5)0) / INIT(1,2,3,4,5)
Inicializao durante execuo: TAB(*) = 0;
Tabela multidimensional
Ex.: TAB(2,2) FIXED(15) INIT((4)0) / INIT(1,2,3,4)
| | | |
ocorrncia (1,1) | | |
ocorrncia (1,2) | |
ocorrncia (2,1) |
ocorrncia (2,2)
Inicializao durante execuo: TAB(*,*) = 0;
EXEMPLOS DE DECLARAO
DCL AGENCIA
DCL NOME_DA_AGENCIA
DCL TAB$CONTA(10)
@AGENCIA(10)

Tipo do campo
Alfa 10 bytes
Zonado 13 inteiros e
2 decimais
Compactado 13
inteiros e 2 decimais
Manual de PL/I Bsico

PIC '(04)9'
CHAR(45)
FIXED(07)
CHAR(45)

INIT(0);
INIT(' ');
INIT((10)0),
INIT((10)('NOME DA AGENCIA'));

PL/I
CHAR (10)
PIC (13)9V(02)9

Cobol
PIC X(10).
PIC 9(13)V99.

Natural
(A10)
(N13,2)

FIXED (15,2)

PIC 9(13)V99 COMP-3.

(P13,2)
-7-

Binrio 2 bytes

BIN FIXED(15)

PIC 9(04) COMP.

5.3. MSCARA DE EDIO PARA CAMPO


PIC '(4)9' ou PIC '9999'
PIC '99/99/99'
261201 ->
PIC '**.**9,99' 64930 ->
PIC 'ZZ.Z99V,99' - 1649.637 ->
PIC 'ZZ9+'
+37 ->
-37 ->
PIC 'ZZ9-'
+37 ->
-37 ->
PIC 'ZZ9S'
+37 ->
-37 ->

(B02)

NUMRICO ZONADO (PIC)


26/12/01
***649,30
1.649,63
37+
37
37
3737+
37-

5.4. CAMPO NUMRICO ZONADO (PIC) COM SINAL


SEM SINAL (valor absoluto)
PIC '(04)9' ou PIC '9999'
|F|1|F|2|F|3|F|4|
-----------------

1234

COM SINAL
PIC '(03)9T' ou PIC '999T'

4 dgitos e sinal no ltimo dgito


representado pela letra "T"
Contedo : +1234
-1234
|F|1|F|2|F|3|C|4|
|F|1|F|2|F|3|B|4|
--------------------------------|
|
Sinal Positivo
Sinal Negativo

5.5. CAMPO DE TAMANHO VARIVEL (VARYING)


Especifica um campo de tamanho varivel, embora seja declarado pelo mximo de dgitos que possa conter, ele
assume o tamanho do contedo que lhe atribudo. O tamanho do campo controlado internamente por um
campo BIN FIXED(15) colocado antes do campo. Este tamanho pode ser acessado atravs de uma redefinio
do campo.
EX. DCL

X
TAM

CHAR(10) VAR,
BIN FIXED(15) DEF X;

X = 'ABC'
X = 'ABCDE'

-> TAMANHO DE X = 3
-> TAMANHO DE X = 5

5.6. ESTRUTURAS
Os sub-nveis devem descrescer mas no necessita ser de modo sequencial
EX. 1 ENTRADA,
1 ENTRADA,
2 AGENCIA PIC '(4)9',
3 AGENCIA
PIC'9999',
2 CONTA
PIC '(7)9',
3 CONTA
PIC'(07)9',
2 NOME
CHAR (40),
3 NOME
CHAR(40),
2 ENDERECO,
3 ENDERECO,
3 RUA
CHAR (30),
5 RUA
CHAR(30),
3 NUMERO PIC '(6)9',
5 NUMERO PIC'(06)9',
2 DATA
CHAR (6),
3 DATA
CHAR(06),

Manual de PL/I Bsico

-8-

5.7. DECLARAO DE ESTRUTURA VIA "LIKE"


Usado para declarao de estruturas iguais.
EX. 1 ENTRADA,
2 AGENCIA PIC '(4)9',
2 ENDERECO,
3 RUA
CHAR (30),
3 NUMERO PIC '(6)9',
2 DATA
CHAR (6),
1 SAIDA LIKE ENTRADA,
A estrutura "SAIDA" ter os mesmos nomes, atributos e inicializaes de modo idntico da estrutura
"ENTRADA".
EX. 1 ENTRADA,
2 AGENCIA PIC '(4)9',
2 ENDERECO,
3 RUA
CHAR (30),
3 NUMERO PIC '(6)9',
2 DATA
CHAR (6),
1 AUX,
2 CHAVE CHAR (51),
2 END
LIKE ENTRADA.ENDERECO,
A sub-estrutura "END" ter os mesmos campos com atributos e inicializaes de modo idntico ao sub-nvel
"ENDERECO".

5.8. REDEFINIO
EX. C_P_F
PIC '(12)9'
EX. CPF
CHAR (12)
DEF C_P_F,
DATA
CHAR(08),
1 DATAS,
1 DATAS
DEF DATA,
2 DIA
2 DIA
PIC '99',
2 MES
2 MES
PIC '99',
2 ANO
2 ANO
PIC '9999',
DATA
EX. 1 CADASTRO,
2 NOME
CHAR(45),
2 ENDERECO,
3 RUA
CHAR(25),
3 NUMERO
PIC '99999',
2 COMPLEMENTO,
RUA_NUMERO
CHAR(30) DEF ENDERECO,

PIC '99',
PIC '99',
PIC '9999',
CHAR(08) DEF DATAS,

5.9. REDEFINIO POSICIONAL


EX. DATA
CHAR(08),
DIA
CHAR(02)
DEF DATA POS(7),
MES
CHAR(02)
DEF DATA POS(5),
ANO
CHAR(04)
DEF DATA POS(1),
EX. AREA
CHAR (50),
NOME
CHAR (30) DEF AREA POS(11),
EX. 1 CADASTRO,
2 NOME
CHAR(45),
2 ENDERECO,
3 RUA
CHAR(25),
3 NUMERO
PIC '99999',
2 COMPLEMENTO,
RUA_NUMERO
CHAR(30) DEF CADASTRO POS(46),
Manual de PL/I Bsico

-9-

5.10. IMPORTANTE / CUIDADO


Toda e qualquer varivel no declarada explicitamente no programa, o PL/I ir assumir (declarar) implicitamente
de acordo com a seguinte regra: Toda varivel iniciada pela letra "I" a "N" ser assumido como sendo "BIN
FIXED(15),e as outras sero assumidas como "FLOAT(6)".

5. COPY-BOOK (INCLUDE)
SINTAXE
%INCLUDE MAC01 (<nome do COPY-BOOK>);
EX. DCL 1 AGE,
%INCLUDE MAC01 (GEAGEAG);

6. TRATAMENTO DE CONDIO DE EXCEO (ON conditions)


Devem ser condificados preferencialmente aps as declaraes de variveis e antes de qualquer comando
executvel. Pois o tratamento de condio de exceo s ativado quando o fluxo da execuo passar pelas
instrues ON condition. As instrues incorporadas nos comando ON condition sero executadas somente
quando ocorrer a condio de exceo.
ON ENDFILE
Prev condio para fim de arquivo.
EX. ON ENDFILE (ARQUIVO) --COMANDO-- ;
EX. ON ENDFILE (ARQUIVO) BEGIN;
--COMANDOS--;
END;

7. MANIPULAO DE ARQUIVO
8.1. ARQUIVO TIPO "RECORD"
ABRIR/FECHAR
OPEN
OPEN
CLOSE
CLOSE

FILE
FILE
FILE
FILE

(ARQUIVO1);
(ARQUIVO1), FILE (ARQUIVO2);
(ARQUIVO1);
(ARQUIVO1), FILE (ARQUIVO2);

LEITURA
READ FILE (ENTRADA) INTO (AREA);
READ FILE (ENTRADA) SET (P);

(usado para leitura de reas BASED)

GRAVAO
WRITE FILE (SAIDA) FROM (AREA);

Manual de PL/I Bsico

- 10 -

8.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT

GRAVAO
PUT DATA------Imprime o nome e o contedo do campo
EX. PUT DATA (NOME,VALOR);
DADOS: NOME = 'JOAO', VALOR = 339
EX. PUT DATA;
CUIDADO:

Sero listados todos os nomes e contedos de todos os campos do


programa

PUT LIST--------Imprime somente o contedo do campo


EX. PUT LIST (NOME,VALOR);
RESULTADO: JOAO 339

PUT EDIT-------Imprime campos e literais


EX. PUT LIST (NOME,VALOR);
RESULTADO: JOAO 339
EX. PUT EDIT (NOME,'PAGOU',VALOR)
(X(5),A(25),A(10),P'Z9.9');
|
|
|
|
|
NUMERO
|
CARACTER
|
BRANCOS
--->
JOAO CARLOS ARRUDA
PAGOU

83.4

Opes de espacejamento de impresso vlida para todos os tipos acima


SKIP
Mudana de linha
SKIP(n)
Salta "n" linhas
COL(n)
Salta "n" colunas
PAGE
Mudana de pgina
EX. PUT SKIP LIST(NOME,VALOR);
PUT PAGE EDIT(NOME,VALOR)(A(20),SKIP(2),P'ZZZV,9');

8. DESVIO INCONDICIONAL
Comando para fazer um desvio do fluxo de execuo para um LABEL qualquer especificado no comando.
GO TO <LABEL>;
EX. IF CNT > 10 THEN
GO TO ULTRAPASSOU_LIMITE;
...
...
ULTRAPASSOU_LIMITE: --COMANDOS

Manual de PL/I Bsico

- 11 -

9. ATRIBUIO
ATRIBUIO SIMPLES
CAMPO = VALOR;
ATRIBUIO MLTIPLA
PAG, NPAG = NPAG + 1;
ATRIBUIO POR IGUALDADE DE NOME (opo BY NAME)
Movimentao das variveis de uma estrutura para outra que possuam os mesmos nomes de variveis
SAIDA = VALOR, BY NAME;
ATRIBUIO POR QUALIFICAO DE NOME
Movimentao de variveis que possuem o mesmo nome em estruturas ou nveis diferentes.
SAIDA.VALOR = ENTRADA.VALOR * 100;

10.

EXPRESSES E OPERAES
OPERANDOS ARITMTICOS:
Exponenciao:
**
Ex: A = A ** 3
Multiplicao:

*
Ex: A = B * C

Diviso:

/
Ex: A = B / C

Adio:

+
Ex: A = B + C

Subtrao:

Ex: A = B - C

Concatenao:

||
Ex: A = 'AB', B = 'CD', C = A || B
C = 'ABCD'

OPERANDOS DE COMPARAO:
Igual:
=
Ex: IF A = 0 THEN
Negativa:

Ex: IF (A = 0) THEN
BIT STRING: DCL FIMARQ BIT(01) INIT('0'B);
IF FIMARQ THEN

Diferente:

=
Ex: IF A = 0 THEN

Maior que:

>
Ex: IF A > 0 THEN

Menor que:

<
Ex: IF A < 0 THEN

Maior igual que:

>=
Ex: IF A >= 0 THEN

Menor igual que:

<=
Ex: IF A <= 0 THEN

No maior que:

>
Ex: IF A > 0 THEN

No menor que:

<
Ex: IF A < 0 THEN

Manual de PL/I Bsico

- 12 -

E (AND):

&
Ex: IF A = 0 & B = 0 THEN

Ou (OR):

|
Ex: IF A = 0 | B = 0 THEN

PRIORIDADE DAS EXPRESSES


1. Expresses entre parnteses
2. Prioridade dos operandos
3. Dentro da mesma prioridade da esquerda para a direita
4.
PRIORIDADES DOS OPERANDOS
1. **
2. *, /
3. +, -

11.

OPERAES DE COMPARAO
As operaes de comparaes so feitas da esquerda para a direita BIT a BIT.
COMPARAO ENTRE CHARACTER
A comparao feita da esquerda para a direita, sendo um caracter dos operandos menor que o outro o
campo preenchido direita com brancos para comparao.
COMPARAO ENTRE BIT STRING
A comparao feita da esquerda para a direita com dgitos binrios, sendo um dos operandos menor o
campo preenchido direita com zeros binrios.
COMPARAO NUMRICAS
A comparao feita pelo valor nmerico dos operandos.

12.

COMANDO "IF"
Comando para comparao e tomada de ao de acordo com a veracidade da condio. (THEN verdade /
ELSE falso).
SINTAXE
IF --<condio>-- THEN --<comando>--;
ELSE --<comando>--;

Manual de PL/I Bsico

- 13 -

13.

COMANDO "SELECT"
Comando de tomada de deciso e ao em uma estrutura de "CASE" de acordo com o valor ou a veracidade da
condio. (verdade executa / falso testa o prximo valor ou condio).
SINTAXE
SELECT (<campo>);
WHEN (<valor> ou <condio>) --<comando>--;
...
WHEN (<valor> ou <condio>) --<comando>--;
OTHERWISE --<comando>--;
END;
EXEMPLO
SELECT (A);
WHEN (1,2) B = A * 2;
WHEN (3)
B = A / 2;
OTHERWISE B = 0;
END;
SELECT;
WHEN (A = 1 | A = 2) B
WHEN (A = 3)
B = A /
OTHERWISE B = 0;
END;

14.

Executa se A = 1 ou A = 2
Executa se A = 3
Executa se A <= 0 ou A > 3

= A * 2;
2;

COMANDO "DO"
AGRUPAMENTO
IF --CONDICAO- THEN
DO;
--COMANDOS--;
END;
ELSE
DO;
--COMANDOS--;
END;
SELECT
WHEN (...) DO;
--COMANDOS--;
END;
...
OTHERWISE DO;
--COMANDOS--;
END;
END;

REPETITIVO
Executa as instrues vrias vezes quanto definido no limite de repetio especificado no comando onde a
varivel de controle de repetio incrementado de acordo com o valor de incremento definido tambm no
comando. O valor de incremento quando no especificado assume-se o valor 1.
DO I = 0 TO 10 BY 2;
Executa 6 vezes com iterao de 2
--COMANDOS--;
unidades
END;

Manual de PL/I Bsico

- 14 -

VARIAVEL
Executa as instrues vrias vezes quantas definidas pela quantidade de valores de atribuio
especificados no comando.
DO I = 1,7,9,5,11;
--COMANDOS--;
END;

CONDICIONAL WHILE
Executa os comandos enquanto a condio especificada no comando for verdadeira.
DO WHILE (--CONDICAO--);
--COMANDOS--;
END;

CONDICIONAL UNTIL
Executa as instrues at que a condio especificada no comando se torne verdadeira. Executa ao
menos uma vez, pois o teste de validao da condio feita no final.
DO UNTIL (--CONDICAO--);
--COMANDOS--;
END;

CONDICIONAL MISTO
Combinaes dos processos repetitivos descritos anteriormente.
DO COD = 1 TO 10 WHILE (--CONDICAO--);
--COMANDOS--;
END;

15.

BLOCOS
So conjuntos de comandos em PL/I que servem para informar ao compilador a necessidade de tratamento
especial durante a compilao, alm da simples traduo dos comandos que contm.
Os blocos do linguagem a caracterstica de se poder fazer alocao dinmica de memria. As variveis
alocadas no incio da execuo ou ativao de um bloco so desalocadas ao seu trmino.
Existem dois tipos de bloco: "PROCEDURE" e "BEGIN".

BEGIN
O nome (rtulo/LABEL) para estes tipo de blocos opcional pois so ativados na sequncia que
aparecem no programa.

PROCEDURE
Todo programa composto de pelo menos 1 bloco "PROCEDURE", o bloco principal (a MAIN
PROCEDURE).
Obrigatoriamente estes blocos devem ter nome (rtulo/LABEL) para poderem ser ativados. Os blocos que
no sejam o bloco principal so mais conhecidos como sendo uma sub-rotina interna.
Este tipo de bloco pode haver definies de variveis locais e de manipulao de parmetros.
A execuo destes blocos so feitos atravs do comando "CALL". Logo estes blocos no precisam ser
"SALTADOS" pela lgica do programa para atingir o final do programa.

Manual de PL/I Bsico

- 15 -

CHAMADA DE SUB-ROTINA INTERNA


Sem parmetros: CALL SUB_ROTINA_INTERNA;
Com parmetros: CALL SUB_ROTINA_INTERNA(PARM1,PARM2,PARM3);
CHAMADA DE SUB-ROTINA EXTERNA
Sem parmetros: CALL SUBROT1;
Com parmetros: CALL SUBROT2(PARM1,PARM2,PARM3);
RECEPO DE PARMETROS
SUBROT1: PROC(PARM1,PARM2,PARM3);
DCL PARM1
CHAR(10),
PARM2
PIC'9999',
PARM3
FIXED(15,2);
Recomenda-se a utilizao de estrutura como passagem de parmetros, ver abaixo:
SUBROT1: PROC(PARMAMETRO);
DCL 1 PARAMETRO,
2 PARM1
CHAR(10),
2 PARM2
PIC'9999',
2 PARM3
FIXED(15,2);

SEQUNCIA DE EXECUO DOS BLOCOS


ORDEM DE
PROG: PROCEDURE OPTIONS (MAIN);
EXECUCAO
DCL (A,B) ....
01
.
02
CALL PROCESSO;
05
.
06
BLOCO_1: BEGIN;
DCL V(10000) ....
07
.
END;
08
.
09
BEGIN;
10
.
END;
11
.
03
PROCESSO: PROCEDURE;
DCL (X,Y,MAT)....
04
.
END PROCESSO;
12
END PROG;

Manual de PL/I Bsico

- 16 -

MAPA DE BLOCOS/VARIVEIS GLOBAIS E LOCAIS


+----------------------------------------------------------------+
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| P1 OPTIONS (MAIN)
V1
||||||||||||||||||||||||||||||||||||
||||||||+--------------------------------------------------+||||||
||||||||| P11
V11
|||||||
|||||||||
+----------------------------------------+
|||||||
|||||||||
| P111
V111 ||||||||||||||||||||||||||||
|||||||
|||||||||
+----------------------------------------+
|||||||
|||||||||
|||||||
||||||||+--------------------------------------------------+||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||+--------------------------------------------------+||||||
||||||||| P12
V12
|||||||
|||||||||
+----------------------------------------+
|||||||
|||||||||
| P121
V121 ||||||||||||||||||||||||||||
|||||||
|||||||||
+----------------------------------------+
|||||||
|||||||||
|||||||
||||||||+--------------------------------------------------+||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+----------------------------------------------------------------+
P --> BLOCOS PROCEDURE
V --> VARIAVEIS

16.

QUEM CHAMA QUEM: P1


P11
P111
P12
P121

:
:
:
:
:

P11
P111
P12
P121
P12

P12
P12
P11
P11
P11

QUEM USA

:
:
:
:
:

V1
V1
V1
V1
V1

V11
V11 V111
V12
V12 V121

QUEM: P1
P11
P111
P12
P121

P1
P11
P111
P12
P121

FUNES - BUILTIN
ARITMTICAS
MULTIPLY(A,B,I,J)
Fornece o resultado da multiplicao entre "A" e "B" com a preciso de clculo interno de "I" dgitos com "J"
decimais
EX. RESULTADO = MULTIPLY(NUMERO1,NUMERO2,15,5);
DIVIDE(A,B,I,J)
Fornece o resultado da diviso entre "A" e "B" com a preciso de clculo interno de "I" dgitos com "J" decimais
EX. RESULTADO = DIVIDE(NUMERO1,NUMERO2,15,5);
MOD
Fornece o resto de uma diviso.
EX. RESTO = MOD(NUMERO,DIVISOR);
IF MOD(ANO,4) = 0 THEN MENSAGEM = 'ANO BISSEXTO';
ROUND
ROUND(X1,X2) retorna o valor arredondado de X1, X2 indicando em qual casa a direita ser efetuado o
arredondamento

Manual de PL/I Bsico

- 17 -

TRATAMENTO DE STRING
VERIFY(A,B)
Retorna a posio no STRING "A" do primeiro caracter ou BIT que no est no STRING "B". Se todos os
caracteres em "A" esto em "B" o resultado zero.
EX. X = VERIFY(CAMPO,'ABHNR');
SE CAMPO = 'BRANCO' -> X = 5
SE CAMPO = 'BANHA'
-> X = 0
IF VERIFY(NUM,'0123456789') = 0 THEN
MENSAGEM = 'NUM NAO NUMERICO';
INDEX(A,B)
Retorna a posio inicial do STRING "B" dentro do STRING "A", retorna zero se o mesmo no est presente.
EX. DCL LETRA CHAR(10) INIT('ABCDEFGHI'),
X = INDEX(LETRA,'E') -> X = 5
Y = INDEX(LETRA,'DE') -> Y = 4
SUBSTR(A,B,C)
A - CAMPO
B - POSIO INICIAL
C - QUANTIDADE DE DGITOS
Permite o acesso a uma parte de um campo para exame ou modificao do seu contedo. Se "C" omitido o
resto do STRING includo.
EX. DCL CAMPO CHAR(10) INIT('012345ABCD'),
SUBSTR(CAMPO,5,3) = 'XYZ'; --> CAMPO = 01234XYZBCD
LENGTH
LENGTH (X1) retorna um valor igual ao comprimento de X1.
HIGH(N)
Retorna um caracter STRING de tamanho n com o caracter de mais alto valor em hexadecimal "FF".
EX. DCL CAMPO CHAR (06),
CAMPO = HIGH(06);
LOW(N)
Retorna um caracter STRING de tamanho n com o caracter de mais baixo valor em hexadecimal "00".
EX. DCL CAMPO CHAR (06),
CAMPO = LOW(06);

TRATAMENTO DE ARRAYS
LBOUND
LBOUND (X1,N) retorna o valor de limite inferior da "N-esima" dimensao do "array" especificado como
argumento
EX. DCL TAB (-2:13,-5:5) CHAR (06),
CAMPO = LBOUND(TAB,2); -> CAMPO = -5
HBOUND
HBOUND (X1,N) retorna o valor de limite superior da "N-esima" dimensao do "array" especificado como
argumento.
EX. DCL TAB (-2:13,-5:5) CHAR (06),
CAMPO = HBOUND(TAB,1); -> CAMPO = 13

Manual de PL/I Bsico

- 18 -

OUTROS
PLIRETC
Permite ao programa passar um cdigo de retorno para os cartes de controle. Seta o "COND CODE" do STEP
do JOB com o valor especificado.
EX. DCL COND BIN FIXED(31) STATIC INIT(0),
IF --CONDICAO-- THEN COND = 1;
ELSE COND = 2;
CALL PLIRETC (COND);
DATE
Fornece a data do dia no formato ano-ms-dia (CHAR(06) - AAMMDD).
EX. DCL DATA CHAR(06),
DATE BUILTIN;
DATA = DATE;
---> DATA = 010227

********

TIME
Fornece o horrio no formato hora-minuto-segundo-milsimo de segundo (CHAR(09) - HHMMSSMMM).
EX. DCL HORA CHAR(09),
TIME BUILTIN;
HORA = TIME;
---> HORA = 091033683

17.

RECURSOS DE DEBUG
SUBSCRIPTRANGE
Usado para verificar se houve estouro de alguma tabela dentro do programa, quando detectado a invaso de
rea a execuo interrompida.
EX. /*
PROGRAM
PROGRAMA EXEMPLO
USERID */
(SUBRG):
DICONS: PROC OPTIONS (MAIN);
---ON SUBRG BEGIN;
PUT DATA (I,J,K);
---END;
CHECK
Controla variveis do programa, listando-as a cada execuo de instrues onde elas aparecem.
EX. /* PROGRAMA
PROGRAMA EXEMPLO
USERID
*/
(CHECK):
FCINTRV: PROC OPTIONS (MAIN);
/* PROGRAMA
PROGRAMA EXEMPLO
USERID
*/
(CHECK(FATOR,TAXA,RAZAO)):
ABTOTS: PROC OPTIONS (MAIN);

Manual de PL/I Bsico

- 19 -

18.

PARMETROS DE JOB
So informaes passadas ao programa atravs do carto JCL "EXEC" atravs de da opo "PARM"
O parmetro no JCL dever ser informado como mostrado no exemplo seguinte:
//
EXEC PGM=PROGRAMA,PARM='<parmetros>'
|
V
O PARAMETRO DEVER SER INFORMADO AQUI
No programa dever estar codifica como mostrado a seguir, sendo o parmetro declarado obrigatoriamente
como VARYING. O tamanho mximo de parmetro que pode ser enviado do JOB para a aplicao de 100
bytes.
PROGRAMA: PROC (PARAMETRO) OPTIONS (MAIN);
DCL
PARAMETRO
CHAR (10) VAR,
1 PARM_DEF
DEF PARAMETRO,
2 TAMANHO
BIN FIXED(15),
2 CAMPO
CHAR (10);
...
IF TAMANHO = 0 THEN ... /* faltou passar parmetro */
ELSE
IF CAMPO = 'PARAMETRO1' THEN
...

Manual de PL/I Bsico

- 20 -

Você também pode gostar