FORTRAN 95 - TEXTO
LENZI, Orlando
ARQUIVO EXTERNO: LEITURA, ESCRITA (sem formato e com formato)
CONCEITO
Os programas de computador, muitas vezes necessitam de dados externos que poderão ser obtidos a partir de arquivos
ou pelo teclado. Esta operação é denominda de "ENTRADA" ou entrada de dados.
Também os programas de computador podem gerar informações que deverão ser guardadas para outros programas
impressas ou mostradas para o usuário para controle. Esta operação é denominada de "SAÍDA" ou saída de dados.
As operações acima podem ocorrer via teclado, vídeo, disco, etc. Elas poderão ser em formatadas ou não. O FORTRAN
trata estes dispositivos e seus arquivos como sendo externos.
Adiantando um pouco, somente para despertar a curiosidade: O FORTRAN já incorporou o conceito de arquivo interno, ou
seja, uma variável onde se escreve (entrada) ou de onde se lê (saída). Esta variável é normalmente do tipo CHARACTER e
pode ser utilizada pelo próprio programa no controle de sua execução. Nos comandos READ e WRITE, codifica-se o nome
de uma variável como o local de entrada ou saída. Maiores detalhes em futuras páginas N3.
Os arquivos externos são conjuntos de registros que serão armazenados em discos, fitas e tornam-se disponíveis no
ambiente operacional do computador. O acessso pode ser: sequencial ou randômico (direto).
O acesso sequencial localiza os registros na ordem de gravação, ou seja, para processar um registro qualquer somente
será possível se lermos todos os anteriores, mas sua visualização ou impressão são possíveis a partir de editores comuns
de arquivos no formato texto.
O acesso randômico permite localizar um registro diretamente pelo seu índice (número de ordem) sem ter que ler os
registros anteriores, porém sua impressão ou visualização não poderá ser feita pelos editores comuns, uma vez que o
formato não será compatível com o formato de textos.
Os arquivos FORMATADOS especificam rigidamente o tamanho das informações e isto deverá ser respeitado nas futuras
leituras. Tem uso mais indicado na geração de arquivos de relatórios.
Os arquivos NÃO FORMATADOS ou EM FORMATO LIVRE são preferencialmente utilizados na entrada de dados, pois os
valores que devem ser lidos devem ser apenas separados por caracteres como: espaço (BARRA DE ESPAÇOS), tabulação
(TECLA TAB), nova linha (TECLA ENTRA). A quantidade de caracteres separando as informações é qualquer uma, de
acordo com a opção ou necessidade do usuário.
ABERTURA DE ARQUIVOS
Para acessarmos um arquivo externo é necessário criar uma associação entre ele e uma unidade física. Para isso
atribuímos um número ao arquivo e lhe damos um nome. O número ou unidade é tratado internamente pelo programa e o
nome é tratado externamente ao programa, ou seja, tornar-se-á disponível para o sistema operacional. O número ou
unidade tem uma tabela de associação que é dependente da versão do FORTRAN. Para uso geral, para disco, podemos
especificar números ou unidades superiores a 20.
Não é necessário abrir a unidade padrão de entrada que normalmente é o teclado.
A sintaxe do comando FORTRAN é: OPEN (unidade,[outros parâmetros de controle],file="nome_arquivo"]
Exemplo: OPEN (41,file="dados_hidrograficos.txt")
OPEN(42,file="C:\engenharia\hidraulica\rios\dados_hidrograficos.txt")
ATUALIZADO: ago/2013
1
TODO CONHECIMENTO É UMA CONCESSÃO. TRANSMITA-O.
olenzi @ orlandolenzi . eng. br
FORTRAN 95 - TEXTO
LENZI, Orlando
ARQUIVO EXTERNO: LEITURA, ESCRITA (sem formato e com formato)
O número 41, que é a unidade será utilizado no programa em todos os comandos (leitura, escrita, etc) que se refiram ao
arquivo denominado "dados_hidrograficos.txt".
O nome fará referência ao diretório ou pasta onde estamos trabalhando. Neste caso ela é uma referência relativa. Se o
usuário desejar uma referência absoluta deverá colocar todo o caminho, desde a raiz do sistema de arquivos, como no
segundo exemplo. O nome do arquivo pode ser definido como o valor de uma variável do tipo CHARACTER.
Alguns dos parâmetros, todos opcionais, permitem definir: tipo de acesso (SEQUENTIAL ou direct), operação no arquivo
(read, write ou READWRITE), formato (formatted,UNFORMATTED),controle do estado do arquivo na abertura, existência do
arquivo (old, new, scratch, replace, UNKOWN). Normalmente nas aplicações práticas dos usuários (engenheiros,
mestrandos, etc) todos esses parâmetros e outros mais que existem satisfazem perfeitamente as necessidades. Assim os
usuários somente se preocupam com sua aplicação e não precisam se aprofundar em detalhes de informática ou de
sistemas operacionais.
FECHAMENTO DE ARQUIVOS
Após criar um arquivo, para que o mesmo tenha todos os seus dados ou registros efetivamente gravados na unidade de
saída é necessário fechá-lo.
A sintaxe do comando FORTRAN é: CLOSE (unidade, [parâmetros de controle]).
Exemplo: CLOSE (41) ; close (42)
Parâmetros opcionais podem ser especificados, mas repete-se aqui a mesma observação do comando de abertura.
LEITURA
A entrada ou leitura de dados é o modo de obter informações em ambiente ou unidades externas ao programa.
A sintaxe do comando FORTRAN é: READ (unidade,formato,[parâmetros]) {lista de variáveis | variáveis e literais}
Exemplo: READ (41,*) a,b,c -> lê o arquivo referenciado pelo número 41 (ver open) com formato livre. O primeiro valor
será associado à variável 'a', o segundo à 'b' e o terceiro à 'c'.
READ (*,*) total -> lê a partir da unidade padrão de entrada (normalmente teclado) em formato livre e associa
o valor à variável 'total'
READ (42,17) x,y,z -> lê o arquivo referenciado pelo número 42 usando o formato (FORMAT) número 17 e de
acordo o formato faz-se as associações, na ordem, dos valores às variáveis 'x', 'y' e 'z'
READ (*,'(2I3)') a,b -> lê a partir do teclado com formato de 3 dígitos os valores de 'a' e 'b'. Neste caso
considera-se sempre 3 algarismos para os valores.
Exemplo: (^20^^3). A variável 'a' tem o valor 20 e 'b' o valor 3. (Obs: ^ = espaço)
ATUALIZADO: ago/2013
2
TODO CONHECIMENTO É UMA CONCESSÃO. TRANSMITA-O.
olenzi @ orlandolenzi . eng. br
FORTRAN 95 - TEXTO
LENZI, Orlando
ARQUIVO EXTERNO: LEITURA, ESCRITA (sem formato e com formato)
GRAVAÇÃO
A saída ou gravação de dados é o modo de guardar ou mostrar as informações produzidas pelo programa em unidades
externas ao mesmo.
A sintaxe do comando FORTRAN é: WRITE (unidade,formato,[parâmetros]) {lista de variáveis | variáveis e literais}
Exemplo: WRITE (41,*) a,b,c -> grava no arquivo referenciado pelo número 41 (ver open) com formato livre, os valores
das variáveis 'a', 'b', 'c'.
WRITE (*,*) total -> grava a partir da unidade padrão de saída (normalmente vídeo) em formato livre o valor
da variável 'total'
WRITE (42,17) x,y,z -> grava, no arquivo referenciado pelo número 42, usando o formato (FORMAT) número
17, os valores das variáveis 'x', 'y' e 'z'.
WRITE (*,'("TOTAL DE VENDAS: Quantidade=",I5,"
Valor=",F10.2)') venda_qtde,venda_valor,
mostra no vídeo o texto entre " " intercalando os valores das variáveis, por exemplo:
TOTAL DE VENDAS: Quantidade= 1473 Valor= 138454.20
Aqui vale a pena indicar um parâmetro que melhora a estética quando são digitadas informações pelo teclado.
Codifica-se o parâmetro ADVANCE="NO", para poder digitar qualquer valor na mesma linha em que o mesmo foi pedido.
Exemplo: WRITE (*,'("Digite o valor máximo =")',advance="no")
FORMATO
Nos parágrafos e exemplos acima vimos que podemos indicar como as informações serão lidas ou gravadas dos
seguintes modos:
1) formato livre: indicado pelo "*" --> Ex: read (41,*) a, b, c
2) formatado: indicado por um número (label do comando FORMAT) --> Ex: write (42,17) a,b,c
Neste caso devemos especificar um comando FORMAT com o label 17 --> Ex: 17 FORMAT (3I5,2F8.7)
3) formatado: codificando diretamente o formato --> write (*.'("Disciplinas=",I3,"Média="F5.2)') nd,med
A sintaxe do comando FORMAT é: label FORMAT ( lista de descritores e/ou literais )
As expressões literais em um comando FORMAT são caracteres que delimitados por "....." ou '....'.
Exemplos: "Digite o número inicial=" ; "soma" ; "*------nome-------- ----data---- ----salário------*" ; "/" ; "01 02 03 04 05"
Os descritores de formato permitem definir o tipo de dados (inteiro, real, binário, etc), o número total de algarismos, o
número de casas decimais, o formato (decimal, científico, etc), o espaçamento, a tabulação, o agrupamento e repetições, a
mudança ou não de linha ou registro.
ATUALIZADO: ago/2013
3
TODO CONHECIMENTO É UMA CONCESSÃO. TRANSMITA-O.
olenzi @ orlandolenzi . eng. br
FORTRAN 95 - TEXTO
LENZI, Orlando
ARQUIVO EXTERNO: LEITURA, ESCRITA (sem formato e com formato)
Alguns descritores:
I - valor inteiro - Formato: I n[.z] - Ex: I3, I5, I12, I3.3 (n-total algarismos ; z-zeros à esquerda)
F - valor real
- Formato: F n.m - Ex: F10.2, F8.0, F14.10 (precisão simples ; m-decimais)
D - valor real
- Formato: D n.m - Ex: D21.12 , D14.7 (precisão dupla)
E - valor real
- Formato: E n.m - Ex: E15.4 , E12.1 (EN, ES)
P - escala
- Formato: j P
- Ex: -1P, 0P, 5P (10 elevado à j)
A - caracter
- Formato: A n
- Ex: A9, A1, A4 (n - quantidade de caracteres)
S - sinal
- Formato: S -> padrão ; SP -> força sinal + ; SS -> suprime sinal +
X - espaços
- Formato: n X
- Ex: 17X , 3 x
(n - quantidade de espaços)
T - tabulação
- Formato: T n
- Ex: T10, T72
(TR n)
B - binário
- Formato: B n
- Ex: B7, (n - quantidade de algarismos)
O - octal
- Formato: O n
- Ex: O3
(obs: O --> letra O, não é o zero)
Z - hexadecimal
- Formato: Z n
- Ex: Z2
/ - mudança linha - Formato: /
- Ex: / , ///
(...) agrupamento - Ex: (I2,3X,"MES-",A9,/)
v(...) ou v descritor - repetição - Ex: 5I3 , 3/ , 12(I2,3x,"MES-",A9/)
Exemplos de formatação de acordo com os descritores especificados:
Obs: Usaremos: "^" para representar os espaços (brancos) nas posições do formato, tornando visível os alinhamentos e
"*" para indicar que o valor da variável é maior do que o valor que a especificação permite representar
Escrevendo os valores de LL=-51 e LE=1951
Sem formato......
(I5,I8)..........
(I5.4,3X,I8.8)...
(5X,I3,7X,I4)....
(5X,I5.5,7X,I3)..
(T31,I3,T22,I4)..
0
1
2
3
4
1234567890123456789012345678901234567890
-51 1951
^^-51^^^^1951
-0051^^^00001951
^^^^^-51^^^^^^^1951
^^^^^*****^^^^^^^***
^^^^^^^^^^^^^^^^^^^^^1951^^^^^-51
Escrevendo os valores de FL=-51.1954 e FE=1951
Sem formato........
(F7.0,F7.0)........
(F10.4,2X,F8.3)....
(3X,F8.4,2X,F5.0)..
(3x,F7.4,2X,F4.0)..
(2P,F9.3,2X,F9.2)..
(T31,F8.4,T22,F5.0)
0
1
2
3
4
1234567890123456789012345678901234567890
-51.1954 1951.
^^^-51.^^1951.
^^-51.1954^^1951.000
^^^-51.1954^^1951.
^^^*******^^****
-5119.540^^195100.00
^^^^^^^^^^^^^^^^^^^^^1951.^^^^-51.1954
Escrevendo os valores de FL=-51.1954
Sem formato...
(E12.2).......
(D12.3).......
(E12.5E3......
(E20.0).......
(D9.4)........
(3P,E9.3).....
(T17,EN12.4)..
(T17,ES12.2E1)
0
1
2
3
4
1234567890123456789012345678901234567890
-51.1954
^^^-0.51E+02
^^-0.512D+02
-.51195E+002
********************
*********
-512.E-01
^^^^^^^^^^^^^^^^-51.1954E+00
^^^^^^^^^^^^^^^^^^^^-5.12E+1
ATUALIZADO: ago/2013
4
TODO CONHECIMENTO É UMA CONCESSÃO. TRANSMITA-O.
olenzi @ orlandolenzi . eng. br
FORTRAN 95 - TEXTO
LENZI, Orlando
ARQUIVO EXTERNO: LEITURA, ESCRITA (sem formato e com formato)
Escrevendo valor de MENS = "BOM DIA MESMO"
Sem formato.........
(A13,5X,A3).........
(A16)...............
(T25,A7)............
0
1
2
3
4
1234567890123456789012345678901234567890
BOM DIA MESMO
BOM DIA MESMO^^^^^BOM
(Obs: write (*,'(a13,5x,a3)') mens,mens)
^^^BOM DIA MESMO
^^^^^^^^^^^^^^^^^^^^^^^^^BOM DIA
Escrevendo o valor de LI=127 em decimal com sinal, binário, octal, hexadecimal
write (*,10) LI,LI,LI,LI
10 format ("Decimal com sinal=", SP, I4 / "Binario..........=", B7 / &
"Octal............=",
03 / "Hexadecimal......=", Z2 )
(lembrar: & continuação)
Decimal com sinal=+127
Binario..........=1111111
Octal............=177
Hexadecimal......=7F
ATUALIZADO: ago/2013
5
TODO CONHECIMENTO É UMA CONCESSÃO. TRANSMITA-O.
olenzi @ orlandolenzi . eng. br
Download

CONCEITO ABERTURA DE ARQUIVOS