Usando os comandos de entrada/saída REXX

Isenção de Responsabilidade para Conteúdo da KB Desativado

Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e não será mais atualizado.

Sumário

Este artigo lista os recursos de entrada e saída da linguagem de programação REXX e fornece exemplos.

Mais informações

Isenção de RESPONSABILIDADE: Neste artigo é fornecido para usuários com capacidade de desenvolver programas com as informações apresentadas; não é um tratamento abrangente do idioma, mas em vez disso, uma referência rápida para ajudar alguém a escrever rotinas simples. Microsoft não oferece suporte a esforços além de reprodução e envio de problemas com a implementação da linguagem de programação. Se você precisar de assistência adicional, consulte REXX referências como "O REXX idioma, um método prático de programação" M. F. Cowlishaw, Prentice-Hall, Englewood Cliffs, 1985.


Exemplos são fornecidos na parte inferior da lista. Chaves ({}) são usadas para indicar os comentários.


CHARIN (arquivo | input_stream | kbd, start_read, number_to_read) {retorna number_to_read caracteres começando com a posição do arquivo especificada por start_read (start_read não pode ser especificado para input_streams como COM1). Especificar zero para number_to_read reposiciona atual "ponto de leitura" para start_read. Se o número de bytes solicitado não está disponível, mas se tornam disponível (ou seja, COMn) e CHARIN aguarda neles, caso contrário, os resultados de uma condição NOTREADY. }


CHAROUT (output_stream | arquivo | tela, dados, start_write) {grava caracteres para o destino especificado. Para arquivos, se os dados não for especificados, em seguida, "gravação ponto" é movido para start_write. Normalmente o ponto de gravação é no final do arquivo, para que os dados são sempre acrescentados ao arquivo por uma CHAROUT. Se nem 'dados' ou start_write, em seguida, o arquivo é fechado). O processamento para até CHAROUT completa ou uma condição de erro é retornada. }


CHARS(input_stream|File|Kbd) {retorna o número de caracteres disponíveis para ler. Para STDIN sempre retorna 1 se houver dados (zero caso contrário). Ela sempre retorna 1 para dispositivos dos / 2. }


Entrada de LINHA (from_this_source, top_of_source?, number_of_lines) {retorna a linha que lê ou zero (from_this_source é aberta automaticamente). Se top_of_source for especificado como 1 (o único valor válido) atual ler ponto é redefinido para o primeiro byte na origem. Number_of_lines é zero (para reposicionar o ponto de leitura) ou 1. }


SAÍDA (to_this_target, this_data, top_of_target?) {Retorna o número de linhas restantes para serem gravados (geralmente um erro) após a gravação de this_data para to_this_target, se top_of_target? é definido como 1 e a posição de gravação é definida como o primeiro byte do destino, se nem this_data nem top_of_target for especificado, o to_this_target está fechado.}


LINES(Source) {retorna 1 se não houver mais dados disponíveis da fonte, zero caso contrário.}


RECEPÇÃO var1 var2... var? {Retorna a entrada para as variáveis especificadas. Se 'palavra' mais que as variáveis é especificada, as palavras em uma linha à direita são colocadas na última variável. O efeito de RECEPÇÃO, com ou sem variáveis especificadas, é esvaziar a fonte de entrada. }


ENVIO var1 var2... var? {coloca o conteúdo das variáveis para a fonte de entrada. Cada ENVIO à parte representa uma linha em uma fonte de entrada. Exemplo: ENVIO c b cria uma linha em uma fonte de entrada que contém o conteúdo de a, b e c enquanto ENVIO a; ENVIO b; ENVIO c coloca três linhas na fonte de entrada, uma com o conteúdo de um segundo com o conteúdo de b e uma terceira com o conteúdo de c.}


FILA var1 var2... . var? {coloca as variáveis no final da fila atual. Cada FILA separada coloca uma linha separada na fonte de entrada. Usando o exemplo acima de ENVIO, um feito após 'ENVIO c' 'xyz FILA' deve colocar conteúdo da xyz a fonte de entrada como se 'xyz ENVIO' tinha sido feito antes de ' ENVIO um '. }


QUEUED() {retorna o número de linhas na fila REXX atual.}


Digamos QUE a expressão {é como o comando do MS-DOS @echo mas avalia uma expressão antes de sua exibição na tela.}


SOURCELINE(n) {retorna ' n' número de linha do programa atual ou, se ' n' não for especificado, o número total de linhas de código-fonte do programa.}


FLUXO (I/O_stream, type_of_action, specific_command) {retorna informações de um fluxo (dados) com base no type_of_action que pode ser: ' C'ommand (requer um specific_command), ' D'escription (um superconjunto do ' S'tate possivelmente retornando informações adicionais) e ' S'tate (que retorna o estado atual, como ERRO, NOTREADY, PRONTO, que é normalmente em um arquivo aberto), são specific_commands: OPEN e CLOSE , SEEK offset, EXISTE CONSULTA, TAMANHO de CONSULTA, CONSULTA DATETIME. Os três últimos retornarem um fluxo caminho, tamanho e data e hora se existe o fluxo. }


Exemplo (explicação a seguir):


(Você é incentivado a extrair o código abaixo e executá-lo. Se você fizer isso, lembre-se de incluir o comentário de início para que reconheça OS/2-lo como um arquivo REXX. Para fazer isso, você precisa criar dois arquivos: PEDIDOS e EMESTOQUE. Também, certifique-se de que você não tenha um arquivo chamado RÓTULOS no diretório em que você executar o programa. PEDIDOS possui o seguinte layout de registro sem registros de separação de carro-retorno/alimentação de linha:
temp_line = STREAM('instock','C','QUERY EXISTS')IF temp_line = '' THEN
DO
SAY Stock exhausted
EXIT
END
temp_line = STREAM('orders','C','QUERY EXISTS')
IF temp_line = '' THEN
DO
SAY No orders
EXIT
END
temp_line = SOURCELINE(1)
PUSH "Labels produced by " temp_line
PULL temp_line
n = LINEOUT('labels',temp_line)
n = LINEOUT('labels','')
DO WHILE ((CHARS('instock') > 0) & (LINES('orders') > 0))
lname = CHARIN('orders',,8)
fname = CHARIN('orders',,5)
initial = CHARIN('orders',,1)
PUSH fname initial lname
cust_addr = CHARIN('orders',,10)
city_st_zip = CHARIN('orders',,16)
QUEUE cust_addr
QUEUE city_st_zip
part_desc = LINEIN('instock',,1)
PULL first_line
n = CHAROUT('labels',first_line)
n = LINEOUT('labels',part_desc)
DO WHILE queued() > 0
PULL temp_line
n = LINEOUT('labels', temp_line)
END
END

Linhas de doze primeiro usam o comando de FLUXO para testar a existência dos arquivos sendo usados e exibir mensagens de erro usando o comando de DIZER se não forem encontrados. Temp_line é usado como uma sequência de trabalho de armazenamento.


Linha de 13 a 17 use o comando SOURCELINE para obter a primeira linha do código-fonte do programa. Tudo o que for colocada nele será gravada como a primeira linha do arquivo de ETIQUETAS. O ENVIO combina de forma eficiente o resultado de SOURCELINE com um prefixo explicativo que é puxado de volta para temp_line e, em seguida, gravado em RÓTULOS com o comando de SAÍDA. ENVIO e RECEPÇÃO usam uma fila interna de REXX interna como armazenamento temporário. Cada ENVIO cria uma linha de carro retorno/linha-delimitado na fila e cada RECEPÇÃO remove uma linha.


Linha 18 usa os CARACTERES e as LINHAS de comandos para fazer com que o loop terminar ao final das ORDENS ou EMESTOQUE for encontrado.


Linhas de 19 a 21 três variáveis usando CHARIN desde ORDENS de leitura não é um arquivo delimitado por linha. O ENVIO na linha 22 reorganiza essas três variáveis para saída.


As variáveis lidas em linhas 23 e 24 são enfileiradas em linhas 25 e 26 para colocar o endereço e a cidade/estado/CEP após o nome da fila interna REXX. Isso permite que o endereço completo ser colocado na ordem desejada, simplesmente puxando da parte superior da fila interna.


Linha de ENTRADA é usada na linha 27 porque EMESTOQUE é um arquivo delimitado por linha. RECEPÇÃO é usada na linha 28 para obter o nome que é saído usando CHAROUT na linha 29. CHAROUT é usado porque ela não adiciona uma carro-retorno/alimentação de linha e isso é necessário para colocar a descrição INSTOCK ao lado do nome do arquivo de ETIQUETAS. Isso é seguido pela SAÍDA na linha 30 para completar a linha.


Na linha 31 do comando em FILA é usado para testar os dados restantes na fila e grave-os em RÓTULOS.
Propriedades

ID do Artigo: 99063 - Última Revisão: 12 de jan de 2017 - Revisão: 1

Comentários