quinta-feira, 29 de outubro de 2009

Convertendo CHARACTER para REAL ou INTEGER

Como esqueço o tempo todo como fazer essas conversões, decidi escrever aqui um resumo do processo.

Tomando-se as seguintes 3 variáveis:


CHARACTER(100) :: TEXTO
REAL*8 :: VALOR_REAL
INTEGER :: VALOR_INTEIRO


Se um "número" é armazenado no TEXTO, por exemplo:
TEXTO = '5.6987'
a conversão pode ser feita utilizando o READ() de forma bem simples.

READ(TEXTO,*) VALOR_REAL
READ(TEXTO,*) VALOR_INTEIRO.




Converter variáveis FORTRAN, conversão de variáveis, texto para número, caracter para real, caracter para inteiro.

7 comentários:

  1. Eu queria conseguir armazenar uma variável do tipo inteira em uma variável do tipo character, tem como?
    Ex.
    integer :: x, y
    character :: concatena
    x=1
    y=2
    concatena=x//y

    Já tentei fazer com o read() como sugere acima, mas imprime em branco.
    Tentei assim:
    integer :: x, y
    character :: concatena
    character(2):: x2, y2
    x=1
    y=2
    read(x,*)x2
    read(y,*)y2
    concatena=x2//y2

    Alguma sugestão?

    ResponderExcluir
  2. Consegui resolver o meu problema usando o WRITE.

    ResponderExcluir
  3. Preciso abrir um arquivo de nome "output_[numero].csv" a medida que o loop vai acontecendo. Minha primeira tentativa foi:

    *****************************************************************
    integer :: i
    character*2 :: nome

    do i = 1, 20

    nome = char(i)
    open(20, file='output_'//trim(nome)//'.csv', status='replace')
    .
    .
    .
    *****************************************************************

    Já tentei converter com o "char", o "read" como explicado acima, o "white" como o Mélory fez... e nada. Já compilei com o ifort e com o gfortran e nunhum dos dois encontra o arquivo por não reconhecer o "nome".

    Alguma sugestão?

    ResponderExcluir
  4. A conversão deve ser feita com o write. No meu caso, foi o seguinte:
    CHARACTER(2) :: VALOR_I

    WRITE(VALOR_I,'(I2)') I
    TEXTO = 'X' // TRIM(ADJUSTL(VALOR_I)) // '.TXT'
    OPEN(11,FILE=TRIM(ADJUSTL(TEXTO)))

    ResponderExcluir
    Respostas
    1. Isso foi para Arquivo?? ou em um programa simples de conversão isso funciona?

      Excluir
  5. Então, escrevi um programa, mas aparece o erro que diz que a expressão deve ser do tipo inteira, e eu não consigo corrigir, como faço?
    não resolveu só trocar o real*8 para o integer. Desculpe, mas sou realmente iniciante nisso.

    ResponderExcluir
  6. Prezados boa noite!

    Estou tentando implementar um código em Fortran para interpretar funções escritas em arquivo de texto.

    Por exemplo:

    g = x(1)-x(2) (função escrita em um arquivo .txt)

    O Fortran deve abrir o arquivo, ler a função e substituir essa função em uma subroutine. Onde g, x(1)..., x(n) são variáveis Reais nessa subroutine.

    Alguém poderia safar o amigo?

    Att.,

    ResponderExcluir