fortran文件操作
- 格式:docx
- 大小:35.77 KB
- 文档页数:8
6 Fortran 程序设计6-文件在Fortran程序设计中,文件操作是非常重要的一部分。
通过文件操作,可以实现数据的读取和写入,以及数据的存储和处理。
本文主要介绍Fortran程序设计中与文件相关的操作。
文件的打开和关闭在Fortran中,可以使用OPEN语句打开一个文件,并使用CLOSE语句关闭文件。
以下是打开文件和关闭文件的示例代码:fortranOPEN(unit=10, file='data.txt', status='old',action='read')! 打开名为data.txt的文件,使用编号为10的单元,以只读方式读取文件内容! 进行读取操作CLOSE(unit=10)! 关闭编号为10的文件单元OPEN语句中的unit参数是文件的编号,file参数是文件的路径和名称,status参数指定文件的打开模式,action参数指定文件的操作方式。
常用的status参数值包括:'old'(读取现有文件)、'new'(创建新文件)、'replace'(替换现有文件)等。
文件的读取和写入在Fortran中,可以使用READ语句从文件中读取数据,使用WRITE语句将数据写入文件。
以下是读取文件和写入文件的示例代码:fortranREAD(unit=10, fmt=) variable1, variable2,! 从编号为10的文件单元中读取数据,并将数据存储到相应的变量中! 进行处理操作WRITE(unit=20, fmt=) variable1, variable2,! 将变量的值写入编号为20的文件单元中READ语句中的unit参数是文件的编号,fmt参数是数据的格式。
通常使用表示自由格式,即根据数据的类型自动判断格式。
WRITE语句的unit参数和fmt参数的含义与READ语句相同。
文件的定位在处理大型文件时,有时候需要跳过一部分数据或者回到文件的开头位置。
6 Fortran 程序设计6-文件6 Fortran 程序设计-文件6.1 引言本章将介绍如何在Fortran程序中处理文件输入和输出。
文件输入和输出是Fortran程序中常见的操作,可以用于读取外部数据、将结果写入文件等。
本章将介绍如何打开、关闭、读取和写入文件,并提供一些常用的文件操作示例。
6.2 文件的打开和关闭在Fortran中,可以使用OPEN语句打开一个文件,使用CLOSE语句关闭一个文件。
打开文件时,需要指定文件名、打开模式和文件单元号。
关闭文件时,只需要指定文件单元号即可。
6.2.1 打开文件打开文件的语法如下:OPEN(unit=, , status=status, iostat=iostat)其中,unit是文件单元号,file是文件名,status是文件的打开模式,iostat是一个可选的参数,用于返回执行结果。
status的取值有以下几种:- 'OLD':打开一个已存在的文件,该文件必须已经存在,否则会报错。
- 'NEW':创建一个新文件,如果文件已存在,则会清空文件内容。
- 'UNKNOWN':打开一个已存在的文件,如果文件不存在,则会创建一个新文件。
- 'REPLACE':创建一个新文件,如果文件已存在,则会替换原文件。
打开文件成功后,文件单元号将被用于后续的文件操作。
6.2.2 关闭文件关闭文件的语法如下:CLOSE(unit=, status=status, iostat=iostat)其中,unit是文件单元号,status是一个可选的参数,用于指定关闭文件时的操作。
status的取值有以下几种:- 'KEEP':保留文件,不清空文件内容。
- 'DELETE':删除文件。
文件关闭成功后,文件单元号将无法再用于文件操作。
6.3 文件的读取和写入在Fortran中,可以使用READ和WRITE语句进行文件的读取和写入操作。
1.建立新的运行空间File>new>workspace>new>prject>console application>new>file>free-form2.建立多个文件可以把子程序文件和主程序文件放在同一个source文件下3.建立外部文件用于读写数据Open(1,file=’ exam.txt ‘)用于打开文件,其中1为设备号——用一整数表示,exam.txt为要打开的文件名,文件有文件名和文件类型构成,文件名可给出路径如file=’ D:\exam\exam.txt ‘Write(1,*)’学生的成绩为:’用于在写在前面打开的1文件里写数据,其中*和0、5、6是系统预定义的设备号由系统隐含规定。
一个文件名只能和一个设备号建立联系,同样一个设备号也只能与一个文件建立联系,一个通过OPEN语句打开并指定了设备号的文件不能再次用OPEN语句打开Read(1,*)表示从文件里面读取数据,一次读取一个数据,数据间用逗号隔开每隔一个read语句或write语句默认的换一行读入或写入Write(1,”(‘输入’)”)=write(1,*) ‘输入’Write(1,”(‘I3,’输出’,I7)”) x,y结果是x以3个整型字符输出,输出,y以7个整型输出Read(1,100)或write(1,100)I,j,k 100 format(I3,I7,F6)表示按照100语句的格式读入或输出顺序读写数据:Read(uint设备号,fmt格式说明,end结束语句转移,eor错误语句转移)输入数据可以按规定的域宽输入,也可以用逗号强制间隔,1.使用read语句读取数据时,read语句输入表中的数据类型和格式应该与当前指针位置数据类型和格式一致。
2.使用read语句读取数据时,从当前文件指针开始读取,完成读取后文件指针自动后移一个记录,使用OPEN和REWIND语句时,文件指针指向第一个记录,从第一个记录开始读取。
6 Fortran 程序设计6-文件6 Fortran 程序设计 6 文件在 Fortran 程序设计中,文件的处理是一个重要且实用的部分。
文件可以帮助我们存储和读取大量的数据,使得程序能够处理复杂和大规模的信息。
首先,让我们来理解一下什么是文件。
简单来说,文件就是在计算机存储设备上存储的数据集合。
在 Fortran 中,文件可以是文本文件,也可以是二进制文件。
文本文件中的数据是以人类可读的字符形式存储的,比如数字、字母和符号。
二进制文件则是以计算机内部的二进制形式存储数据,通常更节省空间并且读取和写入速度更快,但对于人类来说不太直观。
那么,如何在 Fortran 中打开和关闭文件呢?这就需要用到一些特定的语句。
我们使用 OPEN 语句来打开一个文件,并指定一些相关的参数,比如文件的名称、访问模式(读、写、读写等)、文件的格式等。
而当我们完成对文件的操作后,使用 CLOSE 语句来关闭文件,以释放相关的资源并确保数据的正确保存。
接下来,谈谈文件的读取操作。
对于文本文件,我们可以使用READ 语句逐行或者按照特定的格式读取数据。
在读取数据时,需要注意数据的类型和格式与我们程序中的变量相匹配,否则可能会导致读取错误。
而对于二进制文件的读取,通常需要使用专门的二进制读取函数,并要准确地了解文件中数据的存储结构。
写入文件也是常见的操作。
同样,对于文本文件,可以使用WRITE 语句将数据以文本形式写入。
在写入时,可以控制数据的格式和输出的位置。
二进制文件的写入则需要使用相应的二进制写入函数,并且要确保数据的正确转换和存储。
在处理文件时,还需要注意一些错误情况。
比如,文件可能不存在、无法打开、读写权限不足等。
Fortran 提供了一些机制来检测和处理这些错误,通过检查相关的状态变量或者使用特定的错误处理语句,我们可以让程序在遇到问题时能够做出适当的反应,而不是直接崩溃。
另外,文件的访问模式也有多种选择。
只读模式(READONLY)允许我们只能从文件中读取数据;只写模式(WRITEONLY)则只能向文件中写入数据;读写模式(READWRITE)则既可以读也可以写。
6 Fortran 程序设计6-文件1. 文件及其作用在Fortran程序设计中,文件是用于存储和读取数据的一种重要途径。
文件可以是文本文件或二进制文件,可以包含各种类型的数据,如数字、字符或其他格式的数据。
文件的作用主要有以下几个方面:1. 存储数据:文件可以将数据永久地保存在磁盘上,便于以后的使用。
2. 读取数据:文件可以从磁盘上读取数据,供程序使用。
3. 数据传输:文件可以用于将数据从一个程序传输到另一个程序。
2. 文件的创建和打开在Fortran中,可以使用open语句来创建和打开文件。
open语句的语法如下:fortranopen(unit=unit_number, , status=status, action=action, iostat=iostat)其中,unit_number表示文件的逻辑单元号,表示文件的名称,status表示文件的状态(可选参数,默认为'unknown'),action表示文件的操作(可选参数,默认为'read'),iostat表示打开文件的状态码(可选参数,默认为0)。
举个例子,要创建一个名为data.txt的文本文件,并将其打开,可以使用以下代码:fortranopen(unit=10, file='data.txt', status='unknown',action='read', iostat=iostat)3. 文件的读取和写入通过已经打开的文件,我们可以对其进行读取或写入操作。
Fortran中常用的文件读取和写入语句有:read语句:用于从文件中读取数据fortranread(unit=unit_number, format=format) variable1,variable2,其中,unit_number表示文件的逻辑单元号,format表示读取数据的格式,variable1、variable2等表示要读取到的变量。
forrtran中文本文件读写方法
在Fortran中,文本文件的读写可以通过使用OPEN和WRITE函数来实现。
首先,要明确要操作的文件的类型。
文本文件可以显示所有的字符,通常由行通过换行符(CRLF、CR或LF)隔开,列由间隔符(空格、逗号或TAB)隔开。
Fortran中称为有格式文件,有两种读取方式:顺序读取和直接读取。
对于顺序读取,可以使用以下语句打开文件:
```fortran
open(unit=fileid, file=filename, access="sequential")
```
其中,`unit`指定了文件的位置,`file`是文件名,`access`指定了文件的访问方式。
对于直接读取,可以使用以下语句打开文件:
```fortran
open(unit=fileid, file=filename, access="direct", recl=record_length) ```
其中,`recl`指定了每次读取的记录长度。
在写入文件时,可以使用以下语句:
```fortran
write(unit, fmt, nml=namelist) var1, var2, ...
```
其中,`unit`指定了文件的位置,`fmt`是格式化字符串,`nml`是命名列表,`var1, var2, ...`是要写入文件的变量。
需要注意的是,在使用Fortran进行文本文件读写时,需要注意文件的格式和编码方式,以及换行符和间隔符的使用。
此外,Fortran中的文本文件读写通常适用于较小的文件,对于较大的文件,建议使用二进制文件读写的方式。
fortran文件操作From: 《Fortran 95 程序设计》彭国伦1.文件读取的概念:读取:“顺序读取”和“直接读取”。
保存:“文本文件”和“二进制文件”。
二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。
----------------------------------2. 文件的操作:----------------------------------open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。
example:program ex0901impicit noneopen(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file 指定文件名称。
write(10, *) "hello" !在代码为10的文件中写入hellostopend program ex0901open中有很多参数可以使用,详细如下:OPEN(UNIT=number, FILE='filename', FORM='...', STATUS='...', ACCESS='...', RECL=length, ERR=label, IOSTAT=iostat, BLANK='...', POSITION='...', ACTION=action, PAD='...', DELIM='...')UNIT='number': number必须是一个正整数,它可以使用变量或是常量来赋值。
number最好避开1,2,5,6。
因为2,6是默认的输出位置,也就是屏幕。
1,5则是默认的输入位置,键盘。
FILE='filename':指定要打开的文件名称,文件名要符合系统规定。
Fortran 是一种面向科学计算和工程计算的编程语言,它广泛应用于数值分析、科学计算、大气和地球物理学等领域。
在使用 Fortran 进行程序开发时,经常会遇到需要将多个源文件编译为可执行文件的情况。
本文将介绍如何使用不同编译器来编译 Fortran 多个源文件,以及对应的编译命令。
一、使用 gfortran 编译器编译 Fortran 多个源文件1. 编写多个 Fortran 源文件在进行编译之前,首先需要编写多个 Fortran 源文件,这些文件通常以 .f90 或 .f95 作为后缀。
假设我们有三个源文件分别为 m本人n.f90、sub1.f90 和 sub2.f90。
2. 使用 gfortran 进行编译使用 gfortran 进行编译时,可以通过以下命令将多个源文件编译为可执行文件:```gfortran -o program m本人n.f90 sub1.f90 sub2.f90```其中,-o 选项用于指定输出的可执行文件名,后面紧跟着可执行文件名 program,然后列出所有需要编译的源文件名。
3. 运行可执行文件编译完成后,可执行文件 program 就会生成,可以通过以下命令运行该可执行文件:```./program```二、使用 ifort 编译器编译 Fortran 多个源文件1. 编写多个 Fortran 源文件与使用 gfortran 编译器相似,使用 ifort 编译器编译 Fortran 多个源文件也需要首先编写多个源文件,这些文件的后缀通常为 .f90 或 .f95。
假设我们有三个源文件分别为 m本人n.f90、sub1.f90 和 sub2.f90。
2. 使用 ifort 进行编译使用 ifort 进行编译时,可以通过以下命令将多个源文件编译为可执行文件:```ifort -o program m本人n.f90 sub1.f90 sub2.f90```同样地,-o 选项用于指定输出的可执行文件名,后面紧跟着可执行文件名 program,然后列出所有需要编译的源文件名。
摘要:FORTRAN数据文件的结构及用C语言直接对FORTRAN数据文件进行数据读取和处理的方法,并结合实例,给出了完成操作的C语言源程序。
关键词:C语言FORTRAN数据文件数据直接读写FORTRAN语言适用于数值计算,在科学和工程计算方面发挥了重要作用。
C语言具有很强的通用程序设计功能,而且很适于处理图形图像、系统程序方面的问题,但它的数值计算能力不如FORTRAN语言。
如果能在C语言程序中直接调用FORTRAN程序的计算结果,则可充分利用这2种语言的优势。
为此,有必要建立用C语言对FORTRAN数据文件进行直接读取和处理的方法。
1 FORTRAN数据文件的结构在C语言程序中调用FORTRAN程序的计算结果,可通过FORTRAN数据文件来实现,而要用C语言直接存取FORTRAN数据文件,必须首先清楚FORTRAN数据文件的结构。
FORTRAN数据文件按存取方式的不同可分为顺序文件和直接文件。
而不论是顺序文件还是直接文件,按数据在文件中的存放方式的不同,都有2种存放形式,一种是字符形式(即ASCII码形式),另一种是二进制代码形式。
前者称为有格式存放,后者称为无格式存放。
由于对直接文件存取的基本操作步骤与对顺序文件存取的基本操作步骤相同,二者的不同主要体现在操作时是否应顺序进行。
下面以顺序文件为例进行具体分析。
1.1 有格式文件的结构有格式文件全部由有格式的记录组成,有格式的记录是字符的序列,以ASCII码形式存放。
各记录以回车符(0DH)和换行符(0AH)作为结束标志,各记录之间无分隔符,各记录的长度(字节数)可以不等。
1.2 无格式文件的结构无格式文件全部由无格式记录组成,无格式记录是值的序列,即二进制代码序列。
这种格式的文件,其第1个字节是4BH(即十进制的75),最后1个字节为82H(即十进制的130),各无格式记录的数据信息位于这2个字节之间。
每一个无格式记录都由下面3部分组成:(1)记录的首字节,是该记录所有数据所占的字节数;(2)组成该记录的各数据内容。
Fortran中批量处理文件方法总结Fortran中批量处理文件的方法总结—循环读取目录下的所有符合条件的文件一、简单的介绍在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。
对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦!这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。
我总结的批处理方法大概可以用下面这个示意图来说明:|||将文件目录写入一个文本文件,供fortran循环读取|————手动输入文件名|————运行程序之前命令行工具导出文件名|————程序运行后,未开始计算之前,生成文件名| ————调用CMD命令生成| ————GETFILEINFOQQ方法生成| ————调用WIN32API生成||在程序运行时动态生成文件名||对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。
第二种方法主要是说明其思路。
二、方法的介绍1、将文件目录写入一个文本文件,供fortran循环读取1.1、手动输入文件名这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。
1.2、运行程序之前命令行工具导出文件名这是一个既高效又保险的方法,主要思路就是通过强大的CMD命令列出目录下的文件到一个指定的文件中,然后由fortran去循环读取该文件中的文件名信息,从而批量处理。
a、从运行工具打开你的CMD窗口;b、转到要处理的当前目录(可省略):CD /d 路径,如:CD /d e:\test这样可以快速到达e:\test目录c、使用DIR命令列出文件目录信息到指定的文件,通常使用的Dir *.*>新文件名这个命令在这里已经不能满足要求,因为会列出一堆对于我们处理而言无用的信息,现在要使用的命令是:DIR /b filter>newfile注意,其中的filter为文件筛选,必须自己修改为所需的,比如你可以把它改成*.txt,这样,就会列出当前目录下的所有txt结尾的文件了。
第8章 FORTRAN语言的文件操作在前面介绍的程序中,结果都是输出在屏幕上,数据都是通过键盘送入内存单元,实际上数据的输入/输出也可在磁盘上。
如图所示:FORTRAN中对文件的存取以记录为单位,即:输出时:一个输出语句的数据就是一个记录,叫写入文件。
输入时:一个输入语句需要的数据就是一个记录,叫读出文件。
本章讨论FORTRAN程序的文件操作,也就是FORTRAN程序对磁盘数据文件的操作——读/写方式,并描述数据文件的记录结构,以及在程序设计中怎样建立,使用这些数据的记录结构。
8.1文件的概念8.1.1 文件的分类1)按记录存储结构分:顺序文件:文件记录存储按照时间顺序依次存放,记录的逻辑次序与物理顺序是一致的,不能随意读或取某个记录,必须从首记录开始访问。
直接文件:又叫随机文件,记录存放按记录号完成。
2)按记录数据存放格式分:有格式文件:记录以字符形式(或称ASCII码形式)存储,文件的数据流由一个个的字符组成,每个字符占据一个字节,每条记录用回车和换行符作为结束符,可以用文本编辑器(如记事本)直接打开查看。
无格式文件:数据以计算机内部的二进制代码形式存放。
如果用文本编辑器直接打开查看,只能看到乱码符号。
二进制文件:这是Microsoft的一种扩充模式,数据按其在内存中的存储形式存储在文件中,其数据流由二进制代码形式的一个个字节组成,结构最紧凑,适合保存大容量的数据。
用文本编辑器直接打开查看也只能看到乱码。
归纳起来,FORTRAN语言的文件可以分为:有格式(顺序文件、直接文件、二进制文件);无格式(顺序文件、直接文件、二进制文件);8.1.2 文件的操作1)文件记录定位文件在存取过程中,有一个文件指针控制着读写的位置,它总是指向当前进行输入或输出的那个记录,也可以通过语句拨动指针的位置。
2)文件操作的过程打开文件:要求机器分配一个供该文件使用的I/O缓冲区。
读或写文件:将数据通过分配的I/O缓冲区向文件中读写记录。
FORTRAN 不区分大小写,对空格无严格要求;MATLAB区别大小写,系统内置关键字会自动变绿;数组列元素优先,默认下标从1开始;元语言符号和含义:():表示括号内对象一定取其中之一;[]:表示括号内任取一个对象,也可不取;1、创建文件:---创建工作环境(在file中)---创建工程(在左边目录树中右键环境添加工程即可)---创建文件(在file)---工程:FORTRAN CONSOLE APPLYCATION文件:FORTRAN FREE FORMAT SOURCE FILE直接打开.F90文件时,单击编译就可以调出环境和工程目录;2、调试:①---设置断点(手型图标)---单步执行(GO F5)---左下角中locals 中查看变量值变化---退出调试(stop debugging (shift+f5))②双击错误,即可跳到程序中出错的位置;3、常见错误:①1e(-5) --→ 1e-5 (不带括号);2^(3) -→ 2**3 (这是FORTRAN2003新增字符)②SQRT(i):i必须为实型;SQRT(4.0)A=SQRT(4):出错,类型不匹配;J=DSQRT(4.0) 出错,DSQRT为双精度;J=DSQRT(I) 定义时需REAL*8 I,J4、常见1D-7 :1乘以10的-7次方;乘方:2**2 两个*号;一、基础知识①定义符号常量:<1 REAL PIPARAMETER (PI=3.14)<2 REAL,PARAMETER :: PI=3.14②定义字符及字符串CHARACTER 变量名CHARACTER (len) 变量名, 或CHARACTER [ ( [LEN=] len) ] 变量名CHARACTER *len 变量名③定义变量:INTEGER :: I=3 有‘::’可以赋初值,否则不能赋初值;REAL*n 变量名REAL ( [KIND]=n ) 变量名(默认为4单精度,8为双精度)④IMPLICIT REAL*8(A-Z) 说明所有(从A到Z的)变量均为双精度(可以在后续声明中改变部分变量类型)<1有许多变量时可以采用这种声明方法;二、输入输出①输入READ:两种句法格式均可;READ *,x,y,zREAD (*,*) x,y②输出:都仅有一种句法;PRINT: PRINT *,x,yWRITE:WRITE (*,*) ,x,y<1输出文字时,可以用单引号或者双引号;WRITE (*,*) ‘输出’WRITE (*,*) “输出”(第一个逗号可以不写)<2两个*号时,第一个*表示在系统隐含指定的设备上输出;第二个*表示‘表控格式输出(计算机默认格式)’;一个*号时,*表示‘表控格式输出’;格式控制三种方法(用指定格式代替代表格式的*):<1> READ (*,”(I4,I5,I5)”),i,j,k<2>PRINT “(1X,’i=’,I5, 1X,’j=’,I5)”,i,j<3>WRITE (*,100),i,j100 FORMAT(1X,’i=’,I5, 1X,’j=’,I5)1) 5I3 :5和I之间没有*;<M>I3 :前面为常量时需加尖括号;③输出数据的个数必须和数据格式编辑符的个数一致:WRITE (*,100),n,I,j,k100 FORMAT(‘n=’, I2, ’i=’, I3, ’j=’, I4, ’k=’, I3) (4个I编辑符)④数据格式编辑符:<1整型数据:I编辑符;[r] Iw [.m]i:编辑符重复次数;w:字段总宽度;<2实型数据:F编辑符:[r] Fw.dd:实数小数位数;<3字符型数据:A编辑符:[r] Aw1)输出数据为*时,说明指定数据宽度位数不够;⑤控制格式编辑符:nX:空格;Tn:位置编辑符;指明记录的下一个字符输出到本行的第n个字符的位置上;/:换行输入;例:100 FORMAT(T20,'NEWTON迭代计算的方程的根:',//,& 3X,'X=',F15.10,/,&3X,'F(X)=',F15.10,/,&3X,'ITER=',I3)三、选择结构程序设计①执行代码必须另起一行;IF () THENIF执行代码ELSEELSE执行代码END IF<1可以没有ELSE②逻辑IF语句,执行语句可紧跟其后IF (条件表达式) 执行语句此时不需要,ELSE IF,也不需要END IF;四、循环结构程序设计1、循环类型:<1带循环变量:[DO 结构名:] DO i=e1, e2 [,e3]循环体END DO [DO结构名] ([]表示可省略)<2不带循环变量:[DO 结构名:] DO循环体判断条件EXITEND DO [DO结构名]<3DO WHILE语句[DO 结构名:] DO WHILE (逻辑表达式)循环体END DO [DO结构名]<4EXIT 和CYCLEEXIT [DO结构名]:跳出当前循环;CYCLE[DO 结构名]:终止本次循环,重新开始下一次循环;五、数组1、数组的定义:<1类型说明语句定义:类型说明 [::]数组名(维数说明符[,维数说明符,…])[,数组名,…] (1)维数说明符:[下标下界值:]下标上界值REAL a1(1:10), a2(1:5,1:3),a3(5), a4(5,5)注意:①如果声明 INTEGER A(M,N),那么之前必须声明M,N为常量;<2类型说明+DIMENSION语句类型说明,DIMENSION(维数说明符[,维数说明符,…])::数组名[,数组名,···]REAL,DIMENSION(4,5):: x,y2、数组引用:<1整体引用:INTEGER A(4,5),B(10) A=2<2单个元素引用:数组名(下标 [,下标,…])B(2)=1 A(1,2)=1<3片段法引用:(1)连续片段法:数组名(起始下标:终止下标)B(5:8)=1 A(1:1,1:4)第一行的前四列元素(2)下标三元素法:数组名([起始下标]:[终止下标][:不长],...)B(:10:5)=1 !将B(1),B(6)赋值1A(:,1:5:2)=1 !将1,3,5列赋值为13、数组赋值:<1直接赋值:数组对象=数组值A(2,3)=1<2DATA 语句:DATA 变量表1/初值表1/[,变量表2/初值表2/]…INTEGER X,Y,A(9),B(2,5),C(3,9)DATA X,Y/-3,-3/ ;DATA X,Y/2*-3/DATA A/1,2,3,4.../ ;DATA (A(i),i=1,10)/10*1/ <3数组构造器:数组名=(/数组取值列表/)(1)利用数值赋值:A=(/1,2,3,4…/) (仅限于一维) (2)利用数组赋值:A=(/B(1,1:5),C(1:2,8:9)/)A(:,1)=B(:,1)(3)隐式DO循环赋值:A=(/(j,j=1,9)/)4、数组输入输出:<1DO循环输入输出;<2使用数组名或数组片段进行输入输出操作:WRITE (*,200) B(3:5)WRITE (*,200) B<3使用隐含DO循环进行输入输出操作:WRITE (*,200) (c(i),i=1,5,2)WRITE (*,200) ((d(i,j),j=1,5,2),i=1,3)200 FORMAT (3*I)5、动态数组:---定义---空间分配---释放空间---<1动态数组的定义:类型说明,ALLOCATABLE [::] 数组名 1 (维数说明符1)[,数组名2(维数说明符2),…]‘:’表示一维数组;‘:,:’表示二维数组;INTEGER,ALLOCATABLE :: A(:),B(:,:),C(:)<2空间分配:ALLOCATE (数组名1([下界:] 上界) [,数组名2([下界:] 上界,…]…[,STAT=状态值])ALLOCATE (A(-3,3),B(4,4),C(6))<3空间释放:DEALLOCATE (动态数组名1[,动态数组名2,…])DEALLOCATE (A,B,C)6、数组操作语句:<1WHERE语句:提取符合条件要求的数组元素,然后对其进行操作;①WHERE (表达式) 赋值语句WHERE (A/=0) B=A+2②ELSEWHERE[块名:] WHERE (控制表达式1)[块1处理语句][ELSEWHERE (控制表达式2) [块名][块2处理语句]][ELSEWHERE [块名][块3处理语句]]END WHERE[块名]<2FORALL语句:[块名:] FORALL (三元循环下标 [,三元循环下标]…[,三元循环下标][控制表达式])[块处理语句]END FORALL[块名]例:FORALL (j=1:6,(i<j.AND.a(i,j)==0))A(i,j) = i*jEND FORALL。
fortran文件操作From: 《Fortran 95 程序设计》彭国伦1.文件读取的概念:读取:“顺序读取”和“直接读取”。
保存:“文本文件”和“二进制文件”。
二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。
----------------------------------2. 文件的操作:----------------------------------open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。
example:program ex0901impicit noneopen(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file 指定文件名称。
write(10, *) "hello" !在代码为10的文件中写入hellostopend program ex0901open中有很多参数可以使用,详细如下:OPEN(UNIT=number, FILE='filename', FORM='...', STATUS='...', ACCESS='...', RECL=length, ERR=label, IOSTAT=iostat, BLANK='...', POSITION='...', ACTION=action, PAD='...', DELIM='...')UNIT='number': number必须是一个正整数,它可以使用变量或是常量来赋值。
number最好避开1,2,5,6。
因为2,6是默认的输出位置,也就是屏幕。
1,5则是默认的输入位置,键盘。
FILE='filename':指定要打开的文件名称,文件名要符合系统规定。
windows下不区分大小写,unix下则会区分大小写,最好不要使用中文文件名。
FORM='FORMATTED' OR 'UNFORMATTED'FORM字段只有两个值可以设置:FORM='FORMATTED' “文本文件”格式来保存FORM='UNFORMATTED' “二进制文件”格式保存这一栏不给定时候的默认值是: FORM='FORMATTED'STATUS='NEW' or 'OLD' or 'SCRATCH' or 'UNKNOWN' 用来说明打开一个新的文件或已经存在的旧文件。
STATUS='NEW' 打开一个原本不存在的新文件STATUS='OLD' 打开一个原来已经存在的文件STATUS='REPLACE' 若文件已经存在则重新创建一次,原来的内容消失;若不存在则会创建新文件。
STATUS='SCRATCH' 表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是FILE这个一栏可以忽略。
因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。
STATUS='UNKNOWN' 由各编译器自定义。
通常会同REPLACE的效果。
!这一栏不给定时,默认为STATUS='UNKNOWN'。
ACCESS='SEQUENTIAL' or 'DIRECT' 设置读写文件的方法:ACCESS='SEQUENTIAL' 读写文件的操作会以“顺序”的方法来做读写,“顺序读取文件”。
ACCESS='DIRET' 读写文件的操作可以任意指定位置,“直接读取文件”。
!不赋值时候,默认为: ACCESS='SEQUENTIAL'。
RECL=length 在顺序读取文件中,RECL字段值用来设置一次可以读取多大容量的数据。
打开“直接读取文件”,RECL=length的length值是用来设置文件中每一个模块单元的分区长度。
length的单位在文本根式下为1个字符,也就是1 byte。
在二进制格式下则由编译器自行决定,一般可能为1 byte (G77) 或 4 byte (Visual Fortran)。
ERR=LABEL 这个字段用来设置当文件打开发生错误时,程序会跳跃到LABEL所指定的行代码处来继续执行程序。
IOSTAT=var 这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态,数值会有下面三种情况:var>0 表示读取操作错误var=0 表示读取操作正常var<0 表示文件终了BLANK='NULL' or 'ZERO' 用来设置输入数字时,当所设置的格式字段中有空格存在时所代表的意义。
BLANK='NULL'时,空格代表没有东西。
BLANK='ZERO'时,空格部分会自动以0代入。
以下是Fortran 90添加的功能:POSITION='ASIS' or 'REWIND' or 'APPEND' 设置文件打开时候的读写位置:POSITION='ASIS' 表示文件打开时的读取的位置不特别指定,通常就是在文件的开头。
是默认值。
POSITION='REWIND' 表示文件打开时的读取位置移到文件的开头。
POSITION='APPEND' 表示文件打开时的读取位置移到文件的结尾。
ACTION='READ' or 'WRITE' or 'READWRITE' 设置打开文件的读写权限:ACTION='READWRITE' 表示所打开的文件可以用来读取及写入,这是默认值。
ACTION='READ' 表示所打开的文件只能用来读取数据。
ACTION='WRITE' 表示所打开的文件只能用来写入数据。
PAD='YES' or 'NO'PAD='YES' 在格式化输入时,最前面的不足字段会自动以空格填满,默认值是PAD='YES'。
PAD='NO' 在格式化输入时,不足的字段不会自动以空格填满。
DELIM='APOSTEROPHE' or 'QUOTE' or 'NONE'DELIM='NONE' 纯粹输出字符串内容DELIM='QUOTE' 输出字符串内容会在前后加上双引号DELIM='APOSTEROPHE' 输出字符串内容会在前后加上单引号-----------------------------------------WRITE & READ的使用(详细):WRITE/READ(UNIT=number, FMT=format, NML=namelist, REC=record, IOSTAT=stat,ERR=errlabel, END=endlabel, ADVANCE=advance, SIZE=size)UNIT=number 指定read/write所使用的输入输出的位置。
FMT=format 指定输入输出格式的使用。
NML=namelist 指定读写某个NAMELIST的内容(后续介绍)。
REC=record 在直接读取文件中,设置所要读写的文件的模块位置。
IOSTAT=stat 会设置一个数值给在它后面的变量,用来说明文件的读写状态。
stat>0 表示读取操作发生错误。
stat=0 表示读取操作正常。
stat<0 表示文件终了。
ERR=errlabel 指定在读写过程中发生错误时,会转移到某个行代码来继续执行程序。
END=endlabel 指定在读写到文件末尾时,要转移到某个行代码来继续执行程序。
以下是fortran 90添加功能:ADVANCE='YES' or 'NO' 设置在文本格式下的顺序文件中,每一次的READ,WRITE命令完成后,读写位置会不会自动想下移动一行。
ADVANCE='YES' 是默认的状态,每读写一次会向下移动一行。
ADVANCE='NO' 会暂停自动换行的操作。
!使用这个字段时候一定要设置输出入格式,在屏幕输出时可以使用这个设置来控制write命令是否会自动换行。
SIZE=count 在ADVANCE='NO'时,才可以使用这个字段。
它会把这一次输出入的字符数目设置给后面的整型变量。
----------------------------------查询文件的状态INQUIRE:在使用open打开文件的前后,都可以通过inquire命令来查询文件目前的情况,inquire 命令中的各个字段和第一小节中open的字段很类似。
example: !检查某个程序是否存在program ex0903implicit nonecharacter(len=20) :: filename = "ex0903.f90"logical aliveinquire(file=filename, exist=alive)if(alive) thenwrite (*, *) filename, " exist."elsewrite (*, *) filename, "doesn't exist."end ifstopedn program ex0903详细介绍inquire的使用方法:INQUIRE(UNIT=number, FILE=filename, IOSTAT=stat, ERR=label, EXIST=exist, OPENED=opened, NUMBER=number, NAMED=named, ACCESS=access, SEQUENTIAL=sequential, DIRECT=direct, FORM=form, FORMATTED=formatted, UNFORMATTED=unformatted, RECL=recl)UNIT=number 文件代号FILE=filename 文件名IOSTAT=stat 查询文件读取情况,会设置一个整数给后面的变量:stat>0 文件读取操作错误stat=0 文件读取操作正常stat<0 文件终了ERR=errlabel 发生错误时会转移到复制的代码行继续执行程序。