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