Em alguns cenários de programação no Natural, principalmente quando o programa precisa montar comandos de sistema, parâmetros externos ou trechos de JCL, é necessário utilizar aspas duplas dentro de uma string. Isso acontece porque alguns ambientes — como JCL, FTP, utilities de sistema e scripts — exigem que determinados valores estejam entre aspas duplas para que sejam interpretados corretamente.
No Natural, as constantes de texto normalmente são definidas com aspas simples. Por isso, quando precisamos incluir aspas duplas dentro da string, devemos escrevê-las como parte do conteúdo. A forma mais simples é incluir o caractere de aspas duplas normalmente dentro da string delimitada por aspas simples, por exemplo:
O Natural depende do valor da opção do compilador TQMARK, como o Natural interpreta as " (aspas duplas). Execute o comando COMPOPT em uma linha de comando e você verá suas opções do compilador.
TQMARK=ON: Cada aspa dupla dentro de uma constante de texto é exibida como um apóstrofo simples. Este é o valor padrão.
TQMARK=OFF: Aspas duplas dentro de uma constante de texto não são traduzidas; elas são geradas como aspas duplas.
Se a opção do compilador deve ser aplicada a todo o programa:
Outra possibilidade é traduzir o apóstrofo simples para aspas duplas:
Foi utilizado a primeira opção no programa abaixo
//AACCDCSA JOB (AACS,SCH),CLAUD,CLASS=S,MSGCLASS=A //*UQ ALLOW //* --------------------------------------------------------------- //* BACKUP DO INFOPRINT //* --------------------------------------------------------------- //AOPBATCH EXEC PGM=AOPBATCH,PARM='/pidu -c "export //DD:INVENT;"' //INVENT DD DSN=AOP.INV.BACKUP(+1), // DISP=(NEW,CATLG), // DCB=(RECFM=VB,LRECL=32756,BLKSIZE=32760), // UNIT=SYSDA,SPACE=(CYL,(11,10),RLSE), // VOL=SER=PRD902 //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDENV DD * //* --------------------------------------------------------------- //* REFRESH NO FILE 492 PARA FAZER UMA NOVA CARGA //* --------------------------------------------------------------- //ADADBS EXEC AAFAU240 //DDCARD DD * //DDKARTE DD * //* ----------------------------------------------------------------
O Natural depende do valor da opção do compilador TQMARK, como o Natural interpreta as " (aspas duplas). Execute o comando COMPOPT em uma linha de comando e você verá suas opções do compilador.
TQMARK=ON: Cada aspa dupla dentro de uma constante de texto é exibida como um apóstrofo simples. Este é o valor padrão.
TQMARK=OFF: Aspas duplas dentro de uma constante de texto não são traduzidas; elas são geradas como aspas duplas.
Se a opção do compilador deve ser aplicada a todo o programa:
DEFINE DATA LOCAL 1 #STRING (A10) INIT <'ABC"DEF'> END-DEFINE ** OPTIONS TQMARK=OFF ** WRITE #STRING * END
Outra possibilidade é traduzir o apóstrofo simples para aspas duplas:
DEFINE DATA LOCAL 1 #STRING (A10) INIT <'ABC"DEF'> END-DEFINE * WRITE #STRING EXAMINE #STRING FOR H'7D' REPLACE H'7F' WRITE #STRING * END
Foi utilizado a primeira opção no programa abaixo
> > + Program INFO0108 Lib NATURAL
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0610 1 #CSA (A80) INIT <'//AOPBATCH EXEC PGM=AOPBATCH,PARM='>
0620 1 #CSB (A80) INIT <'/pidu -c '>
0630 1 #CSC (A80) INIT <'export //DD:INVENT;'>
0640 1 #CSE (A80) INIT <'/pidu -c "export //DD:INVENT;"'>
0650 1 #1-QUOTE (A1)
0660 1 #2-QUOTE (A1) /* INIT <'"'>
0670 END-DEFINE
0680 * ==================================================================== *
0690 FORMAT KD=ON
0700 SET KEY
0710 PF3 = PGM NAMED 'EXIT'
0720 OPTIONS TQMARK=OFF
0730 * ==================================================================== *
0740 MOVE "'" TO #1-QUOTE
0750 MOVE '"' TO #2-QUOTE
0760 REPEAT
0770 * ==================================================================== *
0780 COMPRESS
0790 #CSA
0800 #1-QUOTE
0810 #CSB
0820 #2-QUOTE
0830 #CSC
0840 #2-QUOTE
0850 #1-QUOTE
0860 INTO #C06
0870 LEAVING NO
0880 * ==================================================================== *
0890 * COMPRESS #CSA '"' #CSB '|' #CSC '|' '"' INTO #C06 LEAVING NO
0900 COMPRESS '//STEP01 EXEC NATURAL,PARM1='
0910 "'SYS=P,MT=0,STACK=(LOG NATURAL)'"
0920 INTO #C28 LEAVING NO
0930 * ==================================================================== *
0940 COMPUTE #TOT = 33 * 80
0950 CALL 'RJE' #RC #C01 #TOT
0960 CALL 'GETJOB' #JOBNUM #CALLER
0970 * ==================================================================== *
0980 FORMAT KD=OFF
0990 DEFINE WINDOW NUMJOB
1000 SIZE 08 * 50 BASE 07/17 TITLE ' NUMERO DO JOB '
....+....1....+....2....+....3....+....4....+....5....+... S 110 L 61



0 comentários:
Enviar um comentário