Como: |
Linguagens Disponíveis: MODIFY, Maintain
A função FIND determina se um valor de dados se encontra em um campo de fonte de dados sendo pesquisado. A função define um campo temporário como 1 (um valor diferente de zero para MODIFY) se o valor dos dados for encontrado no campo da fonte de dados, e 0 se não for. FIND não altera a posição do banco de dados atual do arquivo pesquisado. Um valor maior que zero confirma a presença do valor de dados, não o número de ocorrências no campo da fonte de dados.
Você também pode utilizar FIND em um comando VALIDATE para determinar se um campo de transação existe em outra fonte de dados FOCUS. Se o valor de campo não estiver na fonte de dados, a função exibe o valor 0, fazendo com que o teste de validação falhe e a solicitação rejeite a transação.
Você pode utilizar qualquer número de FINDs em um comando COMPUTE ou VALIDATE. No entanto, mais FINDs aumenta o tempo de processamento e exige mais espaço para buffer na memória.
Limite: FIND não funciona em arquivo com senhas DBA diferentes.
O oposto de FIND é NOT FIND. A função FIND define um campo temporário como 1 se o valor de entrada não estiver na fonte de dados, e como 0 se o valor de entrada estiver na fonte de dados.
FIND(fieldname [AS dbfield] IN file);
onde:
É o nome do campo que contém os valores de dados recebidos.
É o nome do campo da fonte de dados cujos valores são comparados aos valores do campo recebido.
Para o Maintain - o campo AS é obrigatório e o nome deve estar qualificado.
É o nome da fonte de dados FOCUS .
Para o Maintain - o arquivo IN não é necessário já que o nome do campo AS é obrigatório e deve ser qualificado.
Comunicado:
No exemplo a seguir, FIND determina se um valor de dados foi encontrado em outra fonte de dados.
MAINTAIN FILE MOVIES AND VIDEOTRK FOR ALL NEXT MOVIES.MOVIECODE INTO FILMSTK TYPE "RC SHOULD BE 1 WHERE MOVIECODE EXISTS IN BOTH FILES"; TYPE " " COMPUTE RC/I1; COMPUTE I/I1=1; REPEAT FILMSTK.FOCCOUNT COMPUTE RC= FIND(FILMSTK(I).MOVIECODE AS VIDEOTRK.MOVIECODE) TYPE "FOR MOVIECODE = <<FILMSTK(I).MOVIECODE , RC = <<RC" COMPUTE I=I+1; ENDREPEAT END
A saída é:
RC SHOULD BE 1 WHERE MOVIECODE EXISTS IN BOTH FILES FOR MOVIECODE = 001MCA, RC = 1 . . . FOR MOVIECODE = 387PLA, RC = 0 . . . FOR MOVIECODE = 963CBS, RC = 1 TRANSACTIONS: COMMITS = 1 ROLLBACKS = 0 SEGMENTS : INCLUDED = 0 UPDATED = 0 DELETED = 0
No exemplo a seguir, FIND determina se um valor de dados foi encontrado na mesma fonte de dados.
MAINTAIN FILE CAR COMPUTE RETAIL_COST=31500; COMPUTE CHECK/I1; COMPUTE CHECK= FIND (RETAIL_COST); IF CHECK = 1 THEN GOTO FOUND1 ELSE GOTO NOT1; CASE FOUND1 TYPE "THERE IS A CAR WITH A RETAIL_COST OF <<RETAIL_COST" -* .... ENDCASE CASE NOT1 TYPE "THERE IS NO CAR WITH A RETAIL_COST OF <<RETAIL_COST" -*.... ENDCASE -*.... END
A saída é:
THERE IS A CAR WITH A RETAIL_COST OF 31,500 TRANSACTIONS: COMMITS = 1 ROLLBACKS = 0 SEGMENTS : INCLUDED = 0 UPDATED = 0 DELETED = 0
Information Builders |