Friday 2 June 2017

Cobol Picture Clause Binário Opções


Leitura de Layouts COBOL Este tutorial sobre como ler um layout COBOL foi escrito especificamente para nossos clientes que tiveram uma conversão realizada no Disc Interchange e receberam um layout COBOL com os dados. Pretende-se dar-lhe informações suficientes para ler layouts mais simples. Ele não abrange todos os tópicos ou tudo o que você encontraria em um layout complexo, e destina-se a explicar layouts COBOL apenas para que você possa usar seus dados convertidos, não para que você possa escrever programas COBOL. Este artigo começa aqui: Reading COBOL Layouts onde você também vai encontrar um índice de tópico. Parte 4: Campos Numéricos Esta seção descreve vários tipos de dados numéricos ea manipulação de sinais e pontos decimais. Conteúdo desta seção: Necessidade de converter campos numéricos Esse é o nosso negócio COBOL tem vários tipos de campos numéricos. Esses tipos de dados incluem um campo DISPLAY, que é composto de caracteres (os caracteres EBCDIC ou ASCII de 0 a 9), campos binários, campos compactados e campos de ponto flutuante. Há também opções para um separado ou - sinal ou um sinal overpunch, e para real ou implícita decimal. O tipo de dados é especificado pela cláusula USAGE IS. O USO É cláusula Há realmente mais para a declaração de imagem do que weve descrito anteriormente. Existe uma cláusula USAGE IS que especifica o tipo de armazenamento de um campo numérico - display, binário ou computacional. A sintaxe completa, por meio de um exemplo, é: Isto diz para armazenar o campo no formato computacional-3. O uso é parte é opcional e geralmente deixado de fora, e computacional pode ser abreviado COMP, então você verá mais comumente isso escrito Os tipos de campos numéricos que você geralmente verá em layouts COBOL são: Display (incluindo campos assinados) Binary Computational ou Comp Comp-1 Comp-2 Comp-3 Display, incluindo assinado ou Zoned campos, é o mais comum, e comp-3 é o segundo tipo mais comum de campo numérico. Alguns compiladores também podem ter comp-4 e comp-5 tipos de dados, geralmente para emular comp em outro compilador. Uso é Display O formato de exibição é o padrão para números em COBOL. Se nenhuma cláusula use is for especificada, o padrão é use is display, o que significa que o valor é armazenado como caracteres EBCDIC (dígitos), ao contrário de binário. O valor pode ou não ter um decimal - implícito ou real - e pode ser unsigned ou ter um incorporado ou um sinal separado - que pode ser líder ou à direita. O campo de formato de exibição assinado padrão contém um sinal de rastreamento incorporado e é comumente chamado de Signed, IBM Signed ou Zoned. Este tipo de dados é descrito abaixo. Campos assinados Há um tipo de dados numéricos comum usado em COBOL em mainframes IBM chamado Signed (também chamado IBM Signed ou Zoned). COBOL representa este tipo de campo por um S na cláusula de imagem de um campo de formato de exibição, e. PIC S9 (6). Um campo assinado é composto por caracteres numéricos EBCDIC regulares, um caractere por byte, para todos os dígitos, exceto aquele que contém o sinal, ou o dígito mais significativo (sinal que leva) ou o menos significativo Dígito menos significativo. O dígito que contém o sinal combina, ou mais socos o sinal do número para esse dígito. Isso economiza um byte que o sinal ocuparia de outra forma. O valor desse dígito é armazenado como um valor binário e é ORd com o código de sinal, que é D0 hex para números negativos, C0 hex para valores positivos e F0 hex para valores não assinados. Devido ao overpunch, o dígito que contém o sinal não será apresentado como um número quando o campo é visualizado no modo de carácter EBCDIC. Se você tiver o campo e exibir um valor de 1,23 com um editor EBCDIC, ele lerá 0000012C. Os compiladores ASCII COBOL também usam um tipo de dados assinados com um overpunch, mas os bits de sinal são diferentes e não padronizados entre os compiladores. Consulte os nossos campos assinados do Tech-Talk para mais detalhes sobre os campos assinados EBCDIC e ASCII. O sinal é campos COBOL assinados separados incorporam o sinal no valor por padrão (ver campos assinados acima). Mas há uma disposição em COBOL para um sinal separado, e pode ser líder ou à direita. A instrução para isso é Isto pode ser combinado com a cláusula inicial ou final: Esta declaração pode ser aplicada a um item elementar (campo) ou ao registro inteiro. Campos computacionais e binários Como os computadores executam cálculos com números binários, é mais eficiente armazenar esses valores no arquivo em sua forma binária nativa do que armazená-los em uma base 10 legível. Se o número é armazenado em seu formato binário nativo, ele pode ser inserido a partir do arquivo e usado diretamente. Se o seu armazenado em um formato de base dez ele precisa ser convertido em binário antes de executar cálculos sobre ele, em seguida, convertidos de volta para base dez para armazenamento. COBOL define vários tipos de dados binários. Vamos listar um breve resumo aqui, e você pode encontrar mais detalhes em campos computacionais COBOL e em COBOL Comp-3 Packed Fields. Antes de começarmos, há um ponto importante a entender: O padrão COBOL deixa a implementação real da maioria dos tipos de dados até o fornecedor que escreveu o compilador COBOL. A razão para isso é porque diferentes computadores - CPUs - usam diferentes representações binárias internamente e funcionam melhor com seu próprio tipo de números binários. Esta abordagem resulta em compiladores melhores e mais rápidos, mas também causa confusão, porque um tipo de dados comp em uma máquina não é necessariamente o mesmo que comp em outra máquina. A tabela abaixo lista os usos comuns não todos os compiladores seguirão esses tipos. Para mais detalhes sobre ordem de palavras e sinais, veja o link acima. O tipo de dados que um campo usa para armazenamento é determinado pela cláusula use is na definição de campo e, na maioria dos casos, o número de bytes de armazenamento é determinado pelo número de dígitos no PIC. Os números de ponto flutuante seguem formatos binários padrão e, como tal, seus tamanhos não são determinados por um PIC e nenhum PIC é usado na definição de campo. Descrição de como esse tipo de dados é armazenado Embalado decimal geralmente é implementado como comp-3. Ver comp-3. Ao ler uma especificação de campo binário ou comp, o tamanho listado no PIC é o número de dígitos decimais após o número ser convertido de binário para base dez. No caso de um campo embalado, é o tamanho após a desembalagem. Real Decimal A maioria dos programadores de PC tendem a pensar em termos de decimal real em valores numéricos. Em um PC, se você tiver um campo de dólares e centavos para, digamos, o total da fatura, no valor de 123.45, o arquivo conterá os seis bytes 123.45 (e provavelmente um sinal). Em outras palavras, há um ponto decimal real no arquivo. COBOL pode fazer isso, também, através do seguinte: OR: A presença do. No PIC causa um decimal real no arquivo. O decimal implícito, entretanto, é muito mais comum em COBOL. Decimal implícito O decimal implícito significa simplesmente que há um ponto decimal implícito em um local especificado em um campo, mas não realmente armazenado no arquivo. A localização do decimal implícito é indicada por um V no PIC. Usar decimal implícito economiza espaço no arquivo. O decimal implícito pode ser aplicado a qualquer tipo de campo numérico, incluindo um campo compactado ou comp-3. Por exemplo, é um campo decimal implícito. Existem 6 dígitos, então um decimal implícito - o V - e mais dois dígitos, para um total de 8 dígitos. O campo é de 8 bytes de tamanho não há. No arquivo - o local do ponto decimal está implícito entre 9 (6) e 99. Se o campo contiver 00000123 então o saldo da conta é 1.23, porque há um decimal implícito entre os dólares e centavos. Sincronização e Alinhamento Este tópico é um pouco envolvido para este tutorial, mas você deve estar ciente disso. Ao usar o armazenamento binário (binário e comp), alguns compiladores em algumas máquinas podem exigir que um campo numérico começar em algum limite. Por exemplo, em uma máquina de 32 bits, pode exigir que um campo comp começa em um limite de 32 bits. Se você especificar um campo de compilação no meio de um registro e não acontecer de começar em um limite de 32 bits (4 bytes), o compilador alinhá-lo-á a um limite de 32 bits para sincronizá-lo. O que é realmente armazenado no arquivo pode não ser o mesmo que os PICs no layout indicar. Este não é um problema muito comum, em parte porque binário e comp campos não são muito comuns em arquivos, mas você deve estar ciente dela. Informações Adicionais Para obter mais artigos sobre conversão de dados, consulte nosso Índice TechTalk. Nossa Empresa de Serviços de Intercâmbio de Disco de Serviços de Conversão COBOL pode converter a maioria dos tipos de dados numéricos, incluindo todos os tipos de dados IBM mainframe EBCDIC ea maioria dos tipos de dados ASCII dos sistemas PC e UNIX. Nossa biblioteca de rotinas de conversão nos permite lidar com esses trabalhos difíceis que compiladores COBOL padrão não podem converter. USAGE Cláusula A cláusula USAGE especifica o formato de um item de dados na memória do computador ou em um registro de arquivo. Em algumas circunstâncias, um formato de arquivo de registro de itens de dados pode diferir do seu formato de memória de computador conforme especificado pela cláusula USAGE. Isso pode ocorrer quando sistemas de arquivos não COBOL com diferentes formatos de armazenamento de dados estão sendo acessados ​​por meio de uma interface. Por exemplo, o Acu4GL usa o SQL para acessar sistemas de arquivos não-COBOL e, no processo, ocorre uma tradução nos dados. Observação: existem inúmeras opções de compilador para afetar o comportamento de armazenamento de dados. Consulte Opções de armazenamento de dados na seção Compatibilidade do ACUCOBOL-GT. A coluna à esquerda mostra as abreviaturas aceitas para os termos à direita: Uma cláusula USAGE pode ser usada em qualquer entrada de descrição de dados, exceto aquelas com números de nível 66, 78 e 88. Uma cláusula USAGE não pode ser usada com um externo Ponto de ponto flutuante. Se uma cláusula USAGE está na entrada de descrição de dados para um item de grupo, então quaisquer cláusulas USAGE que aparecem para entradas subordinadas devem ser do mesmo tipo. A sequência PICTURE de um item COMP, COMP-1, COMP-2, COMP-3, COMP-4, COMP-5, COMP-6, BINARY ou PACKED-DECIMAL pode conter apenas os símbolos 9, S, V e P. Os itens COMP-6 não podem usar o símbolo S. A cadeia PICTURE de um item COMP-X ou COMP-N pode conter apenas todos os 9 símbolos ou todos os símbolos X. A entrada de descrição de dados para um item de dados USAGE IS INDEX não pode conter nenhuma das seguintes cláusulas: BLANK WHEN ZERO, JUSTIFIED, PICTURE e VALUE IS. Os itens de nível 88 não podem ser especificados para um item de dados USAGE IS INDEX. A entrada de descrição de dados para um item de dados USAGE IS POINTER não pode conter nenhuma das seguintes cláusulas: BLANK WHEN ZERO, JUSTIFIED ou PICTURE. Um item de dados POINTER pode ter uma cláusula de valor especificada para ele, mas o valor deve ser a palavra NULL. A entrada de descrição de dados para um USAGE IS FLOAT ou um USAGE IS DOUBLE não pode conter nenhuma das seguintes cláusulas: BLANK WHEN ZERO, JUSTIFIED ou PICTURE. Os itens de dados FLOAT ou DOUBLE podem ter uma cláusula de valor. O valor pode ser um literal de ponto flutuante, um literal numérico ou a palavra ZERO. Aqui está um exemplo de um item de dados da seção de armazenamento de trabalho: Os seguintes são coletivamente chamados de tipos de dados de estilo C: SIGNED-INT, UNSIGNED-INT, SIGNED-SHORT, UNSIGNED-SHORT, SIGNED-LONG, UNSIGNED-LONG. Esses tipos de dados são semelhantes aos tipos de dados encontrados na linguagem de programação C. A entrada de descrição de dados para um tipo de dados de estilo C não pode conter nenhuma das seguintes cláusulas: BLANK WHEN ZERO, JUSTIFIED ou PICTURE. Control-type é um dos nomes de tipo de controle gráfico conhecidos pelo compilador, como LABEL ou ENTRY-FIELD ou o nome de um ActiveX, COM ou controle. A entrada de descrição de dados para os itens de dados USAGE HANDLE não pode conter nenhuma das seguintes cláusulas: BLANK WHEN ZERO, JUSTIFIED ou PICTURE. Se ele contém uma cláusula VALUE, o valor especificado deve ser a palavra NULL. Font-name é um dos seguintes identificadores: DEFAULT-FONT, FIXED-FONT, TRADITIONAL-FONT, SMALL-FONT, MEDIUM-FONT, LARGE-FONT. Deve-se notar que a opção - Df ou a opção - Cv fará com que o compilador trate COMP-1 e COMP-2 como FLOAT e DOUBLE, respectivamente. Para obter mais informações, consulte a seção 5.4 em Transição para o ACUCOBOL-GT. Layout-name é o nome de um dos gerentes de layout padrão de sistemas. Atualmente, isso só pode ser LM-RESIZE. Uma cláusula USAGE escrita em um nível de grupo se aplica a cada item elementar subordinado a esse item de grupo. Se nenhuma cláusula USAGE for especificada, então USAGE IS DISPLAY está implícita. O formato interno de um item USAGE IS DISPLAY é ASCII. O formato de um item de índice é binário assinado de 32 bits. Seu tamanho é sempre quatro e contém um intervalo de valores de -2147483647 a 2147483647. Ao usar uma opção de compilação para compatibilidade com versões anteriores a 6.0.0 (-Z52, por exemplo) um item de índice é 16 bits não assinado binário, tamanho É sempre dois e contém valores de 0 a 65535. O formato de um item de dados COMP-1 é binário assinado de 16 bits. Os valores legais variam de -32767 a 32767. O tamanho do item de dados é sempre dois bytes ea metade de alta ordem dos dados é armazenada no byte mais à esquerda. A cadeia PICTURE que descreve o item é irrelevante. Ao contrário de outros tipos de dados numéricos, um erro de tamanho ocorrerá em um item de dados COMP-1, COMP-X ou COMP-N somente quando o valor exceder o armazenamento físico do item (ou seja, o número de 9s nos itens PICTURE é ignorado quando o erro de tamanho é determinado). Para COMP-2 (armazenamento decimal), cada dígito é armazenado em um byte em formato decimal. Se o valor é assinado, um byte de arrasto adicional é alocado para o sinal. O armazenamento de COMP-2 é idêntico ao USAGE DISPLAY com os quatro bits de alta ordem removidos de cada byte. Para COMP-3 (armazenamento decimal compactado), dois dígitos são armazenados em cada byte. Um meio byte adicional é alocado para o sinal, mesmo se o valor é unsigned. O sinal é colocado na posição mais à direita e seu valor é 0x0D para negativo, todos os outros valores são tratados como positivos (mas veja a regra 18 abaixo). O tamanho de um item (incluindo um para o sinal implícito) é dividido por dois para chegar ao seu tamanho real (arredondando as frações para cima). O formato de um item COMP-4 é twos-complement binário (o valor sem seu ponto decimal). Os valores de COMP-4 são armazenados em um formato independente da máquina. Este formato coloca a parte de maior ordem do valor na posição mais à esquerda e segue para baixo para a parte de ordem inferior na posição mais à direita. O número de bytes que um item de dados ocupa depende do número de 9s em sua IMAGEM e na presença de várias opções de tempo de compilação. Por exemplo, você pode incluir mais de dezoito anos somente se seu programa tiver sido compilado para suporte de 31 dígitos. Isso é resumido na tabela a seguir: Nota: Quando dois valores são fornecidos, o valor menor aplica-se a itens de dados não assinados eo valor maior se aplica a itens de dados assinados. O COMP-5 é usado principalmente para se comunicar com programas externos que esperam armazenamento de dados nativos. O formato de um item de dados COMP-5 é idêntico a um item de dados COMP-4, exceto que os dados são armazenados em um formato dependente da máquina. Ele é armazenado em uma ordem que é natural para a máquina host. Por exemplo, um item de dados PIC S9 (9) COMP-5 é equivalente a uma palavra binária de 32 bits na máquina host, e um item PIC S9 (20) COMP-5 é equivalente a uma palavra de 64 bits. Nota: Os dados armazenados em um campo COMP-5 podem não ser transportáveis ​​para outras máquinas porque máquinas diferentes possuem diferentes ordens de bytes naturais. Em muitas máquinas (68000, a maioria RISC), COMP-5 é idêntico a COMP-4. Em outros (80x86, VAX), é o mesmo com os bytes na ordem inversa. Uma cláusula VALUE para um item de dados COMP-5 é armazenada em um formato independente da máquina e é ajustada quando é carregada no item de dados. Isso garante que o valor é o mesmo de máquina para máquina. Em aritmética e não-aritmética armazena em itens COMP-5, se truncamento é necessário, por padrão ACUCOBOL-GT trunca em decimal para o número de dígitos fornecidos na cláusula PICTURE. Você pode usar a opção --TruncANSI compilador para forçar o truncamento em binário para a capacidade do armazenamento alocado de itens COMP-5. O - Dz e --noTruncoptions também efeitos truncamento. Consulte o Livro 1, seção 2.1.9, Opções de armazenamento de dados, para obter mais informações. Os itens de dados de nível 01 e 77 que são COMP-5 são sincronizados automaticamente para um limite de máquina apropriado, independentemente de quaisquer configurações de tempo de compilação. Isso permite que você passe esses itens com segurança para subrotinas C sem ter que se preocupar com o alinhamento. Se COMP-5 é usado com um item de dados PIC X (n) e atribuído um valor alfanumérico, os resultados são indefinidos. Por exemplo, o fragmento de código a seguir faz com que NUM tenha um número indefinido e o valor resultante para a última linha será 100: Um item de dados PIC X (n) usado com o COMP-5 não pode ser assinado. O formato de um item COMP-6 é idêntico a um item COMP-3, exceto que ele não é assinado e nenhum espaço é alocado para o sinal. Se o número de dígitos é ímpar, um zero é adicionado à extremidade esquerda do número antes de ser embalado. Assim, existem dois dígitos decimais por byte eo tamanho real do item é determinado dividindo o tamanho da imagem por dois e arredondando para cima. Um item de dados COMP-X deve ser descrito com uma seqüência de imagem composta de apenas 9 ou somente símbolos X. Em ambos os casos, o item de dados é tratado como um inteiro binário não assinado, com armazenamento interno semelhante ao de um item de dados COMP-4. Se os símbolos X são usados ​​para descrever o item, o número de bytes alocados ao item é o mesmo que o número de símbolos X na seqüência de imagem. Se forem utilizados 9 símbolos em vez disso, o número de bytes alocados é o menor número de bytes necessários para manter um número desse tamanho. Por exemplo, um item de dados PIC 99 será alocado 1 byte, um item de dados PIC 9 (9) será alocado 4 bytes. Independentemente do número de 9 símbolos na string de elementos, o valor máximo que pode ser armazenado em um COMP O item - X é determinado pelo número de bytes alocados a ele (até um máximo de 18 dígitos ou um máximo de 31 dígitos se o suporte de 31 dígitos estiver em vigor). Por exemplo, um item COMP-X consistindo em 1 byte pode conter um intervalo de números de 0 a 255. Um número COMP-X de 2 bytes pode conter de 0 a 65535. Um erro de tamanho ocorre em um item COMP-X somente quando O valor é maior do que o item de dados pode manter fisicamente. Quando o COMP-X é usado com um item de dados PIC (X), o máximo é PIC X (8). Um número de dados COMP-N é idêntico a um item de dados COMP-X, exceto que os dados são armazenados no formato nativo das máquinas host, Em vez do formato independente da máquina. Os itens de dados descritos como PACKED-DECIMAL são idênticos a COMP-3. Você pode causar unsigned PACKED-DECIMAL para ser tratado como COMP-6 usando uma opção de tempo de compilação. Por padrão, um item de dados BINARY é idêntico a um item de dados COMP-4. A opção de compilação - D5 trata os itens de dados BINARY como itens COMP-5 em vez disso. No modo de compatibilidade VAXCOBOL, um item de dados COMP é o mesmo que COMP-4 e é tratado como dados binários. No modo de compatibilidade RMCOBOL, COMP é o mesmo que COMP-2. Você pode usar opções de tempo de compilação para alterar o comportamento padrão. Um item de dados ponteiro é tratado como um item de dados numéricos não assinado. O formato interno difere para cada máquina. Itens de dados de ponteiro destinam-se a conter endereços de outros itens de dados (consulte a instrução SET). Um item de dados de ponteiro pode ter uma cláusula VALUE especificada para ele, mas o valor especificado deve ser a palavra NULL. Isso indica que o ponteiro atualmente não apontar para qualquer item. Se um ponteiro não é explicitamente dado um valor inicial, então seu valor inicial é arbitrário. Os itens de dados de ponta ocupam 8 bytes. Isso fornece espaço suficiente para manter um endereço em uma máquina de 64 bits. Se você estiver em uma máquina menor, o tempo de execução usa apenas os primeiros 4 bytes de itens de dados de ponteiro (os 4 bytes de fuga permanecem na memória, eles são apenas deixado sem uso). Você pode usar a opção - Dw tempo de compilação para ajustar o espaço alocado para itens de dados ponteiro. Você pode fazer isso para conservar o armazenamento se souber que não estará executando em uma máquina de 64 bits. Os ponteiros podem ser usados ​​em expressões condicionais, onde podem ser comparados entre si ou com o valor NULL. Uma comparação envolvendo um ponteiro deve ser igual ou não igual (maior e menor que comparações não são permitidas). Os itens de dados de nível 01 e 77 que são itens POINTER são automaticamente sincronizados para um limite de máquina apropriado, independentemente de quaisquer configurações de tempo de compilação. Isso permite que você passe esses itens com segurança para subrotinas C sem ter que se preocupar com o alinhamento. Com exceção da sincronização automática, os itens de dados do USAGE POINTER são tratados em todos os aspectos, como os itens de dados USAGE UNSIGNED-LONG. Isso manipula todas as máquinas atuais corretamente. Esse comportamento pode mudar para atender aos requisitos de alguma máquina futura. Os itens de dados de ponto flutuante são armazenados em um formato dependente da máquina. Os itens USAGE FLOAT têm 4 bytes alocados a eles. Os itens USAGE DOUBLE ocupam 8 bytes. Os itens de nível 01 e 77 que são USAGE FLOAT ou DOUBLE são automaticamente sincronizados com os limites de máquina apropriados, independentemente de quaisquer configurações de tempo de compilação. Isso permite que você passe esses itens com segurança para subrotinas C sem ter que se preocupar com o alinhamento. A definição ANSI do COBOL não indica como os sinais devem ser armazenados em campos numéricos (exceto para o caso de SIGN IS SEPARATE). O ACUCOBOL-GT permite selecionar convenções alternativas de armazenamento de sinal usando as opções de compilação - Dca, - Dcb, - Dci, - Dcm, - Dcn, - Dcr e - Dcv. Especificar uma convenção de armazenamento de sinal por vezes é útil quando você está exportando e importando dados. Para obter informações adicionais, consulte o Guia do Usuário, seção 2.2.10, Opções de Armazenamento de Dados. A convenção de armazenamento afeta como os dados aparecem nos tipos de dados USAGE DISPLAY, COMP-2 e COMP-3. Em USAGE DISPLAY, armazenamento ASCII padrão, se o sinal é incorporado numa posição de dígito, o dígito é codificado de acordo com a seguinte tabela: As entradas de tabela marcadas com um asterisco indicam itens de tamanho fixo. Um item de tamanho fixo tem o mesmo tamanho, independentemente da máquina de destino. As entradas sem um asterisco são variáveis ​​em tamanho. Esses itens ocuparão espaço até o número de bytes listados na tabela. Nota: Os tamanhos listados na tabela acima cobrem todas as máquinas atuais e previstas que executam ACUCOBOL-GT. Arquiteturas futuras podem exigir alterações no tamanho máximo atribuído a esses itens. No ambiente de execução, esses itens agem de todas as formas como se fossem itens de tamanho fixo do tamanho apropriado. Por exemplo, o seguinte fragmento de código: imprimirá 4 quando executado em uma máquina de 32 bits, mas ele imprimirá 8 quando executado em uma máquina de 64 bits. Nos exemplos a seguir, cada byte é representado por dois dígitos hexadecimais ou por um único caractere citado. Cada valor é mostrado nos vários formatos. Também é mostrado USAGE DISPLAY usando as várias opções SIGN. Os exemplos a seguir usam as convenções padrão de armazenamento de sinal ACUCOBOL-GT. Os itens de dados HANDLE compõem sua própria classe de dados e categoria em COBOL. Internamente eles são armazenados como valores inteiros, e se comportam como números quando usados. Um item de dados HANDLE é normalmente usado para armazenar o identificador de um objeto criado dinamicamente, como uma janela flutuante ou um controle gráfico. Os itens de dados HANDLE vêm em duas formas: digitado e genérico. Você cria um identificador genérico quando você omite a frase OF. Você cria um identificador digitado quando você incluir a frase OF. Você pode usar itens de dados HANDLE somente quando explicitamente permitido, ou como parte de uma instrução MOVE, uma instrução CALL (como um parâmetro) ou em uma expressão booleana. As alças genéricas podem ser usadas em qualquer situação em que as alças são permitidas. Quando você usa um manipulador genérico como a origem de uma instrução MODIFY, você não será capaz de usar qualquer propriedade de controle específico ou nomes de estilo nessa instrução. Isso ocorre porque o identificador genérico pode ser associado a qualquer tipo de controle. Nesse caso, o compilador não pode determinar qual conjunto de nomes de estilo e propriedade é válido. Alças digitadas podem ser usadas em instruções onde qualquer identificador é permitido ou quando você está se referindo a um objeto de um tipo correspondente. Por exemplo, um HANDLE OF WINDOW não pode ser usado como o identificador em uma instrução DISPLAY LABEL. Em vez disso, você deve usar um identificador genérico ou um HANDLE OF LABEL. As alças digitadas permitem que o compilador reconheça nomes de estilo e propriedade associados quando apropriado. As alças digitadas também melhoram a legibilidade do seu programa, fornecendo informações adicionais sobre o uso pretendido do identificador, além de fornecer verificação de tempo de compilação para garantir que você está usando as alças em situações apropriadas. As alças podem ser usadas em comparações. Existem apenas duas comparações significativas: verificação de igualdade ou desigualdade para NULL e comparação com outro item de dados identificador. Um valor identificador de NULL sempre indica um identificador inválido. Os identificadores são armazenados internamente como inteiros binários de 4 bytes. Essas informações podem ser úteis quando você está depurando um programa (você pode examinar os valores de identificadores no depurador). Você não deve confiar nesta definição em seu programa, no entanto, porque está sujeito a mudanças no futuro. Manipular itens de dados são automaticamente SYNCHRONIZED em um limite de 4 bytes. Observe que isso ocorre independentemente da configuração da opção - Dl tempo de compilação (que limita a quantidade de sincronização). O sistema de tempo de execução requer esse nível de alinhamento para evitar gerar erros de barramento em algumas máquinas. Se o nome da fonte for especificado, o item de dados descrito pela cláusula USAGE será inicializado na inicialização do programa com o identificador de fonte correspondente. Isso age de forma idêntica à colocação da declaração: no início do seu programa, onde data-item é o item de dados descrito pela cláusula USAGE eo nome da fonte é o mesmo que font-name na cláusula USAGE. A representação interna dos dados pode Ser uma consideração importante para a eficiência do programa. Infelizmente, a representação padrão usada pelo COBOL para itens de dados numéricos pode afetar negativamente a velocidade dos cálculos. Um formato mais eficiente para dados numéricos pode ser especificado usando a cláusula USAGE. Esta unidade introduz o conceito de representações internas de dados, discute a representação padrão usada em COBOL e descreve como essa representação, usada para dados numéricos, pode causar ineficiências. A sintaxe da cláusula USAGE é dada e as várias opções explicadas. A cláusula SYNCHRONIZED é introduzida e um exemplo generalizado dado. Objetivos Ao final desta unidade você deve - Saber que o texto é armazenado em um computador usando alguma seqüência de codificação. Entenda os problemas causados ​​pelo armazenamento de dados numéricos como dígitos ASCII. Podem usar a cláusula USAGE para alterar a forma como os dados numéricos são armazenados no computador. Saiba quando e como usar a cláusula SYNCHRONIZED. Pré-requisitos Introdução ao COBOL Declaração de dados em COBOL Comandos de divisão de procedimento básico Seleção em COBOL Iteração em COBOL Introdução a arquivos seqüenciais Processamento de arquivos sequenciais Leitura de arquivos seqüenciais Fotos editadas Os computadores armazenam seus dados em forma de dígitos binários. Além de números cardinais (inteiros positivos) todos os outros dados armazenados na memória de computadores usam algum tipo de convenção de formatação. Os dados de texto, por exemplo, são armazenados usando uma seqüência de codificação como ASCII ou EBCDIC. Um sistema de codificação é simplesmente uma convenção que especifica que um determinado conjunto de bits deve ser usado para representar um caractere particular. Por exemplo, o diagrama abaixo mostra a configuração de bits utilizada para representar uma maiúscula em As sequências de codificação ASCII e EBCDIC. Os dados numéricos podem ser mantidos como dígitos de texto (dígitos ASCII) ou como números binários puros (no caso dos valores cardinais), ou como dois números binários complementares (no caso de números inteiros) ou como números decimais (usando BCD) ou Como números reais (usando um formato de número real, como a especificação IEEE para números de ponto flutuante). A cláusula USAGE é usada para especificar como um item de dados deve ser armazenado na memória do computador. Cada variável declarada em um programa COBOL tem uma cláusula USAGE - mesmo quando nenhuma cláusula explícita é especificada. Quando não há nenhuma cláusula USAGE explícita, o padrão - USAGE IS DISPLAY - é aplicado. Problemas com USAGE IS DISPLAY A velocidade de computadores modernos significa que não vale a pena o esforço de usar a cláusula USAGE a menos que o item de dados vai ser usado em milhares de cálculos. Por motivos de portabilidade, a cláusula USAGE nunca deve ser usada em descrições de registros. Se o arquivo for lido em uma marca diferente do computador, não temos garantia de que os dados serão interpretados corretamente. Mesmo na mesma marca de computador, usar a cláusula USAGE em descrições de registro significa que os dados no arquivo provavelmente não serão compreendidos por outras linguagens de programação ou por programas utilitários ou por editores de texto. Para itens de texto ou para itens numéricos que não serão usados ​​em uma computação (Números de conta, Números de telefone, etc.), o padrão de USAGE IS DISPLAY não apresenta problemas, exceto para itens numéricos sobre os quais algum cálculo deve ser executado. O uso padrão não é a forma mais eficiente de armazenar os dados. Quando itens numéricos (PIC 9 itens) têm um uso de DISPLAY. Eles são armazenados como dígitos ASCII (consulte os dígitos ASCII 0-9 na tabela ASCII abaixo). Considere o seguinte fragmento de programa. O que aconteceria se os cálculos fossem feitos diretamente em números armazenados neste formato Uma vez que nenhum dos itens de dados tem uma cláusula USAGE explícita, eles são padrão para - USAGE IS DISPLAY. Isso significa que os valores nas variáveis ​​Num1, Num2 e Num3 são armazenados como dígitos ASCII. Como é que este efeito calcula Se você examinar a tabela ASCII abaixo você verá que o dígito 4 (o valor em Num1) é codificado como 00110100 eo dígito 1 é codificado como 00110001. Quando estes números binários são adicionados em conjunto, o resultado é 01100101, que é o código ASCII para as letras minúsculas. A soma 4 1 e não calcula. Quando os cálculos são feitos com itens de dados numéricos cujo USAGE IS DISPLAY, o computador tem que converter os valores numéricos para seus equivalentes binários antes do cálculo pode ser feito. Quando o resultado foi computado o computador tem que reconverter isto aos dígitos ASCII. Conversão para e de dígitos ASCII diminui computações. Por esta razão, os dados que são fortemente envolvidos na computação é muitas vezes declarado usando um dos usos otimizados para computação como USAGE IS COMPUTATIONAL. Os itens de grupo são sempre tratados como alfanuméricos e isso pode causar problemas quando há itens COMP subordinados. Por exemplo, suponha que tivéssemos uma declaração como - MOVE ZEROS TO GROUP2. No programa oposto. Na superfície parece que esta instrução está movendo o valor numérico 0 para NumItem1 e NumItem2, mas o que realmente é movido para esses itens é o dígito ASCII quot0quot. Quando uma tentativa é feita para usar NumItem1 ou NumItem2 em um cálculo o programa irá falhar porque esses dados-itens contêm dados não-numéricos. A cláusula USAGE pode ser usada com qualquer entrada de descrição de dados, exceto aquelas com números de nível de 66 ou 88. Quando a cláusula USAGE é declarada para um item de grupo, o uso especificado é aplicado a cada item do grupo. The group item itself is still treated as an alphanumeric data-item (see example program below).USAGE IS COMPUTATIONAL or COMP or BINARY are synonyms of one another. The USAGE IS INDEX clause is used to provide an optimized table subscript. When a table is the target of a SEARCH statement it must have an associated index item (see the Search Tutorial). Any item declared with USAGE IS INDEX can only appear in: - A SEARCH or SET statement - A relation condition - The USING phrase of the PROCEDURE DIVISION - The USING phrase of the CALL statement The picture string of a COMP or PACKED-DECIMAL item can contain only the symbols 9, S, V andor P. The picture clause used for COMP or PACKED-DECIMAL items must be numeric. 1QuadWord (8 Bytes) PACKED-DECIMAL Data-items declared as PACKED-DECIMAL are held in binary-coded-decimal (BCD) form. Instead of representing the value as a single binary number, the binary value of each digit is held in a nibble (half a byte). The sign is held in a separate nibble in the least significant position of the item (see diagram below). General USAGE notes The USAGE clause is one of the areas where many vendors have introduced extensions to the COBOL standard. It is not uncommon to see COMP-1. COMP-2. COMP-3. COMP-4. COMP-5 and POINTER usage items in programs written using these extensions. Even though COMP-1 and COMP-2 are extensions to the COBOL standard, vendors seem to use identical representations for these usages. COMP-1 is usually defined as a single precision, floating point number, adhering to the IEEE specification for such numbers (Real or Float in typed languages) and COMP-2 is usually defined as a double precision, floating point number (LongReal or Double in typed languages). The SYNCHRONIZED clause The SYNCHRONIZED clause is sometimes used with USAGE IS COMP or USAGE IS INDEX items. It is used to optimize speed of processing but it does so at the expense of increased storage requirements. Many computer memories are organized in such a way that there are natural addressing boundaries - such as word boundaries. If no special action is taken some data items in memory may straddle theses boundaries. This may cause a processing overhead as the CPU may need two fetch cycles to retrieve the data from memory. The SYNCHRONIZED clause is used to explicitly align COMP and INDEX items along their natural word boundaries. Without the SYNCHRONIZED clause, data-items are aligned on byte boundaries. The word SYNC can be used instead of SYNCHRONIZED . The effect of the synchronized clause is implementation dependant. You will need to read your vendor manual to see how it works on your computer (in some cases it may have no effect). For the purpose of illustrating how the SYNCHRONIZED clause works let us assume that a COBOL program is running on a word-oriented computer where the CPU fetches data from memory a word at a time. In this program we want to perform a calculation on the number stored in the variable TwoBytes (as declared in the diagram below). Because of the way the data items have been declared, the number stored in TwoBytes straddles a word boundary. In order to use the number, the CPU has to execute two fetch cycles - one to get the first part of the number in Word2 and the second to get the second part of the number in Word3. This double fetch slows down calculations. Now consider the impact of using the SYNCHRONIZED clause. The number in TwoBytes is now aligned along the word boundary, so the CPU only has to do one fetch cycle to retrieve the number from memory. This speeds up processing but at the expense of wasting some storage (the second byte of Word2 is no longer used). Copyright Notice These COBOL course materials are the copyright property of Michael Coughlan. Todos os direitos reservados. No part of these course materials may be reproduced in any form or by any means - graphic, electronic, mechanical, photocopying, printing, recording, taping or stored in an information storage and retrieval system - without the written permission of the author. (c) Michael CoughlanIBM VS Cobol II Compiler Options This section contains information on the IBM VS Cobol II compiler and library. It contains information on compiler options. For information on Compiler Directing Statements check this page out. Note: The defaults listed with the options below are the VS COBOL II defaults shipped with the product. They may have been changed by the installation. The minimum abreviation is the part that is capitialized. Note: The EXIT option cannot be specified in a PROCESS (CBL) statement. It can only be specified at invocation in the PARM field of JCL (under TSO, specify it in a command argument), or at installation time. INEXIT(str1,mod1) The compiler reads source code from a user-supplied load module (where mod1 is the module name), instead of SYSIN. LIBEXIT(str2,mod2) The compiler obtains copy code from a user-supplied load module (where mod2 is the module name), instead of library-name or SYSLIB. For use with either COPY or BASIS statements. PRTEXIT(str3,mod3) The compiler passes printer destined output to the user-supplied load module (where mod3 is the module name), instead of SYSPRINT. The module names mod1, mod2, mod3, can refer to the same module. The suboptions str1, str2, str3, are optional. They are character strings up to 64 characters in length and enclosed in apostrophes, that are passed to the exit module. Any character is allowed, but included apostrophes must be doubled, and lowercase characters are folded to uppercase. For more details on using EXIT to provide user-exits, see Using EXIT to Provide User-Exits in topic 5.2.2.9. Use NOFLAG to suppress error flagging. NOFLAG will not suppress error messages for compiler options. If you experience a problem with this page, please send a message to JTateJaTomes including a description of the problem.

No comments:

Post a Comment