Arquivo de comando com sistema de cartão em Fortran90

Dezembro 2016


Resumo


I. Introdução


Em um código de computador, quando os dados digitais precisam ser modificados para executar várias simulações, ao invés de gravar esses dados "brutos" no código, modificá-los e recompilar o código a cada simulação, usa-se o método habitual, que consiste em passar por um arquivo de comando que é lido pelo código, durante a execução.
Porém, os dados digitais gravados no arquivo de comando devem sempre ser escritos na mesma ordem, principalmente por que para um número importante de variáveis modificáveis, pode ser difícil de se situar.

Veja, então, um método que consiste em passar por um arquivo de comando organizado em forma de cartão, que pode ser modificado e comentado.

II. Exemplo de arquivo de comando


Veja o exemplo de um arquivo de comando que queremos implementar; suponhamos que o nosso programa trate de dados sobre a população:
#HABITANTES 
295012 
#CRIANÇAS 
1098

Gostaríamos de organizar os dados na ordem que quisermos (eventualmente, colocar o número de crianças antes do número total de habitantes) e, adicionar cartões podendo ser comentados com um determinado caractere (no exemploa seguir apenas o último cartão HABITANTES não comentado por ! será lido).
Por exemplo:
# CRIANÇAS
1567 
!#HABITANTES 
124590 
!#HABITANTES 
290745 
#HABITANTES 
104968

III. Função para encontrar o cartão desejado


Veja a função para ler os cartões e selecionar o que nos interessa:
FUNCTION PROCURAR_CARTÃO(CARTÃO_PROCURADO,INFORMAÇÃO) 

    IMPLICIT NONE 
    CHARACTER*(*), INTENT(IN) ::  CARTÃO_PROCURADO
    INTEGER, INTENT(OUT) :: INFO 
    !! LOCAIS !! 
    CHARACTER*100 :: CARTÃO 

    REWIND(66) 

    DO 
       READ(66,210,ERR=200,END=200) CARTÃO
       IF(CARTÃO(1:1).EQ.'#') THEN 
          CARTÃO = CARTE(2:100)   
          IF(TRIM(CARTÃO).EQ.TRIM(CARTÃO_PROCURADO)) THEN 
             INFO=0 
             RETURN 
          END IF 
       END IF 
    END DO 
200 CONTINUE 
    INFORMAÇÃO=-1 
210 FORMATO(A100) 
    RETURN 
END FUNCTION PROCURAR_CARTÃO

IV. Função para ler o cartão desejado


A função anterior retorna INFORMAÇÃO =- 1 se o cartão não for encontrado e INFORMAÇÃO=0 se o cartão for encontrado.
Para ler o número de habitantes, por exemplo, basta executar a seguinte função:
FUNCTION LER_NUMERO_HABITANTES(NUMERO_HABITANTES) 
    INTEGER, INTENT(OUT) :: NUMERO_HABITANTES
    !! LOCAIS !! 
    CHARACTER*(*) :: CARTÃO 
    INTEGER :: INFORMAÇÃO     

CARTÃO='HABITANTES'  
CALL PROCURAR_CARTÃO(CARTÃO,INFORMAÇÃO) 

IF(INFO.EQ.0) THEN 
       READ(66,*,ERR=123,END=123) NUMERO_HABITANTES
ELSE 
       WRITE(*,*) 'O cartão ', TRIM(CARTÃO), ' não foi encontrado, você deve'  
       WRITE(*,*) 'l''incluir no arquivo de comandos.' 
       STOP 
END IF 
RETURN 
123 CONTINUE 
    WRITE(*,*) 'Erro durante a leitura do número de habitantes no cartão' 
    WRITE(*,*) TRIM(CARTÃO), ' do arquivo de comandos.' 
    STOP 
END FUNCTION LER_NUMERO_HABITANTES

V. Fonte


Este método foi tirado dos códigos Fortran de Francis Collino, CERFACS.

Saiba mais aqui


Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 9 de novembro de 2011 às 16:18 por pintuda.
Este documento, intitulado 'Arquivo de comando com sistema de cartão em Fortran90', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.