fortran文件读取技巧
6 Fortran 程序设计6-文件
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语句相同。
文件的定位在处理大型文件时,有时候需要跳过一部分数据或者回到文件的开头位置。
fortran中read
fortran中readFortran是一种广泛使用的编程语言,尤其在科学计算和工程领域得到广泛应用。
在Fortran中,读取输入数据通常使用read语句实现。
在本文中,我们将探讨Fortran中read语句的用法,以及一些相关的注意事项。
首先,我们需要了解read语句的语法。
在Fortran中,read语句的语法如下:read(*,*)其中"*"表示通配符,代表任何数据类型。
第一个星号表示读取输入数据的格式,第二个星号表示读取输入数据的来源。
因此,如果我们想要从标准输入读取一个整数,我们可以使用以下代码:program read_exampleimplicit noneinteger :: nread(*,*) nwrite(*,*) nend program read_example在这个示例程序中,read语句的第一个星号表示我们希望读取一个整数,而第二个星号表示我们希望从标准输入读取数据。
读取的数据将存储在变量n中,最后我们使用write语句将结果输出到标准输出。
除了通配符外,我们还可以使用Fortran中定义的数据类型来读取特定的数据。
例如,如果我们想要读取一个字符串,我们可以使用以下代码:program read_string_exampleimplicit nonecharacter(len=10) :: sread(*,*) swrite(*,*) send program read_string_example在这个示例程序中,我们定义了一个长度为10的字符型变量s,然后使用read语句读取输入的字符串,并使用write语句输出结果。
除了基本数据类型外,read语句还可以用于读取数组和格式化的输入数据。
例如,如果我们想要读取一个5x5的矩阵,我们可以使用以下代码:program read_matrix_exampleimplicit noneinteger :: i, jinteger, dimension(5,5) :: matrixdo i = 1, 5read(*,*) matrix(i,:)end dodo i = 1, 5do j = 1, 5write(*,'(I3)') matrix(i,j)end dowrite(*,*)end doend program read_matrix_example在这个示例程序中,我们先定义了一个5x5的整型数组matrix,然后使用do循环和read语句逐行读取输入的数据。
6 Fortran 程序设计6-文件
6 Fortran 程序设计6-文件6 Fortran 程序设计 6 文件在 Fortran 程序设计中,文件的处理是一个重要且实用的部分。
文件可以帮助我们存储和读取大量的数据,使得程序能够处理复杂和大规模的信息。
首先,让我们来理解一下什么是文件。
简单来说,文件就是在计算机存储设备上存储的数据集合。
在 Fortran 中,文件可以是文本文件,也可以是二进制文件。
文本文件中的数据是以人类可读的字符形式存储的,比如数字、字母和符号。
二进制文件则是以计算机内部的二进制形式存储数据,通常更节省空间并且读取和写入速度更快,但对于人类来说不太直观。
那么,如何在 Fortran 中打开和关闭文件呢?这就需要用到一些特定的语句。
我们使用 OPEN 语句来打开一个文件,并指定一些相关的参数,比如文件的名称、访问模式(读、写、读写等)、文件的格式等。
而当我们完成对文件的操作后,使用 CLOSE 语句来关闭文件,以释放相关的资源并确保数据的正确保存。
接下来,谈谈文件的读取操作。
对于文本文件,我们可以使用READ 语句逐行或者按照特定的格式读取数据。
在读取数据时,需要注意数据的类型和格式与我们程序中的变量相匹配,否则可能会导致读取错误。
而对于二进制文件的读取,通常需要使用专门的二进制读取函数,并要准确地了解文件中数据的存储结构。
写入文件也是常见的操作。
同样,对于文本文件,可以使用WRITE 语句将数据以文本形式写入。
在写入时,可以控制数据的格式和输出的位置。
二进制文件的写入则需要使用相应的二进制写入函数,并且要确保数据的正确转换和存储。
在处理文件时,还需要注意一些错误情况。
比如,文件可能不存在、无法打开、读写权限不足等。
Fortran 提供了一些机制来检测和处理这些错误,通过检查相关的状态变量或者使用特定的错误处理语句,我们可以让程序在遇到问题时能够做出适当的反应,而不是直接崩溃。
另外,文件的访问模式也有多种选择。
只读模式(READONLY)允许我们只能从文件中读取数据;只写模式(WRITEONLY)则只能向文件中写入数据;读写模式(READWRITE)则既可以读也可以写。
如何用Fortran批量读取文件
复杂的方法可以是:自己写个子程序,进行自己需要的转换。(略
1. 如何加大Stack size?
选Project => Settings => Link => Category: Output =>
Stack allocations
Reserve: 这里填新值(默认为1M,若需要10M,则填10000000)
open(12,file=FILENAME(L))
read(12,*) .......
enddo
法2
do i=1,number of files
file_name=ቤተ መጻሕፍቲ ባይዱhar(i+48)//'.dat'
file_number=i+100
open(fileid=file_number,file=file_name)
write(form,*) "(",num,"f10.3)"
write(*,form) data
stop
end
4. 如何用F90/95生成随机数?
注意:
现在计算机产生的随机数都是伪随机数。
random_number(x) 产生一个0到1之间的随机数(x可以是向量),但是每次总是那几个数。
read(fileid=file_number,*) vars
close(fileid)
enddo
需要读取大批量的数据,文件有一定的规律,特别是按照数字的顺序排列的,现给出读取文件名的方法:
简单方法:
Character*40 fname
integer m
fortran获取文件行数和列数的程序 -回复
fortran获取文件行数和列数的程序-回复Fortran获取文件行数和列数的程序是一个非常有用的工具,特别是在处理大量数据文件时。
该程序可以帮助我们快速准确地确定文件的维度,从而更好地进行数据分析和处理。
接下来,我们将逐步解释如何编写此程序,并解释其实现的原理和作用。
步骤1:打开文件首先,我们需要使用Fortran的文件处理函数打开待处理的文件。
使用内建的OPEN函数,我们可以指定文件的路径和访问模式。
例如,我们可以使用以下代码打开一个名为“data.txt”的文本文件:open(1, file='data.txt', status='old', action='read')这里,'1'是文件句柄,file参数指定了文件的路径和名称,而status 参数定义了访问模式为“old”,action参数指定以只读模式打开文件。
步骤2:获取文件行数要获取文件的行数,我们需要逐行读取文件内容,并计算累积的行数。
为了实现这一点,我们可以使用一个计数器变量,并在每次读取新行时将其增加1。
以下是一个简单的代码示例:integer :: numRows = 0character(len=500) :: linedo while (.true.)read(1, *, iostat=ios) lineif (ios /= 0) exitnumRows = numRows + 1end do在这个示例中,我们使用一个无限循环来读取文件的每一行。
read函数用于读取下一行的内容,并通过iostat参数返回读取状态。
如果读取状态不等于0(即不是成功读取),则退出循环。
否则,行数计数器将增加1。
步骤3:获取文件列数要获取文件的列数,我们需要解析文件的每一行,并计算每行包含的字段数量。
为了实现这一点,我们可以使用字符串处理函数和循环进行字段计数。
以下是一个简单的代码示例:integer :: numCols = 0integer :: i, startPosdo i = 1, len(line)if (line(i:i) == ' ') thenstartPos = i + 1do while (line(startPos:startPos) == ' ')startPos = startPos + 1end doif (startPos <= len(line)) numCols = numCols + 1 end ifend donumCols = numCols + 1在这个示例中,我们首先初始化列数计数器为0。
FORTRAN 读取二进制文件
FORTRAN 读取二进制文件两种打开方式:直接打开(access='direct')、流(access='stream',老版FORTRAN没有)1、直接打开方式把二进制文件看成一个一个的记录,每个记录的大小为RECL*4字节,READ 中的REC是指读第几个记录,每次只能读RECL*4字节的数据(即一个记录大小)。
程序中RECL=4,READ(2,REC=806)是只读第806个记录,每个记录大小为16字节,那个第806个记录的起始位置是805*16+1=12881。
定位错误,所以读出的数据也是错的。
SEGY的卷头和道头,以及地震道数据,每个数据的长度为2字节或4字节,所以16字节的记录长度不太合适,所以把RECL改为1,即记录大小为4字节,这个时候第806个记录起始位置为805*4+1=3221。
program maininteger*2 num1,num2open(2,file='test.sgy',status='old',access='direct',recl=1)read(2,rec=806) num1,num2print*,num1,num2endnum1即为采样点数。
如果使用RECL=4,即每个记录大小为16字节,3220/16=201.25,也就是要读的目标数据在第202个记录上,但不是第202个记录的起始位置。
16*201=3216,即第202个记录的起始位置是3217,所以要读三个INTEGER*2,第三个才是目标数据。
program maininteger*2 num1,num2,num3open(2,file='test.sgy',status='old',access='direct',recl=4)read(2,rec=202) num1,num2,num3print*,num1,num2,num3endnum3才是采样点数,而num1应该就是采样间隔。
fortran文件读取技巧
最近专业课海洋要素计算作业需要用fortran编程读取验潮站资料(如下,是txt,其中数据是有62行,限于篇幅,我只截取了前5行数据外加验潮站的4行头信息)!要注意的是最后一列数据后面没有空格program ex1!**********************************************!* written by 潘海东, 2015,3,20!*一次性读取744个数据,放入一维数组中!*(如果一次性读取太多的话可能会对系统造成某些影响)!**********************************************INTEGER :: b(62*12),icharacter(len=20) time,location,u1,u2open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old')!********读取头信息read(10,"(A3)") u1read(10,"(A18)") timeread(10,"(A13)") locationread(10,"(A2)") u2!********读取数据read(10,100) b(:)100 format(61(11(I4,1x),I4,/),11(I4,1x),I4) !在fortran的输入输出中'/'代表换行close(10)endprogram ex2!**********************************************!* written by 潘海东, 2015,3,20!*读取第3列至第11列!**********************************************INTEGER :: a(62,9),icharacter(len=20) time,location,u1,u2open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old')!***读取头信息read(10,"(A3)") u1read(10,"(A18)") timeread(10,"(A13)") locationread(10,"(A2)") u2!***读取验潮站数据do i=1,62read(10,100) a(i,:)write(*,99) a(i,:)end do99 format(9(I4,1x))100 format(10x,9(I4,1x),4x)close(10)end!!!!这些技巧总结起来就是利用nX跳过不想要的东西。
fortran读文件教学课件
openif: If(status == 0) then
! open was OK. Read values
readloop: do
read(3, *, iostat = status) value
if(status /= 0) Exit
nvals = nvals + 1
write(*, 20) nvals, value
開啟檔案
開啟檔案的設定參數
設定參數說明
a) unit = int_expr
開啟一個檔案時要給定這個檔案一個讀取的編號,以後使用 write, read時使用這個編號就可以對這個檔案來讀寫了 int_expr = 數字 → 最好避開1, 2, 5, 6
2, 6是指內定的輸出位置,也就是螢幕 1, 5則是指內定的輸入位置,也就是鍵盤
8-1 The open statement
範例
a) opening a file for input
<error open (unit = 8, file = ‘a.dat', status = 'OLD', action = 'read', iostat = ierror)
8-1 The open statement
設定參數說明
f) access = char_expr
‘sequential’, ‘direct’設定讀取檔案的方式 char_expr = ‘sequential’ →讀取檔案的動作會以“循序”的方
法 來做讀取
‘direct’ →讀取檔案的動作可以任意指定位置
20 format(1x, 'Line', I6, ': Value = ', F10.4)
nc格式数据fortran读取方法(netcdf库使用图解)
1、首先保证有一个somelibs文件夹。
此文件夹下游三个子文件夹,分别为dlls,include,
lib;dlls文件夹下有名为netcdf.dll的dll文件;include文件夹下有netcdf.h和netcdf.inc 头文件;lib文件夹下有netcdf.lib和netcdfs.lib的lib文件。
将此文件夹放在你绝对不会误删的地方,建议放在C盘根目录下。
2、将netcdf.dll拷贝到“C:\WINDOWS\system32\”下。
(注意:此乃windows系统文件夹)
3、以CVF 6.6为例,作一说明。
(1)首先,打开tools下options;
A)选择Dircetories;
B)按照下面三幅图分别设置:Include files、Executable files、Library files。
(注意红色下划线标注的地方)。
(目前netcdf库还不能用于64位系统,2010-12-13)
(2)以下步骤,每一次重新打开程序,编译之后都要重复的步骤。
A)写好程序,首先编译程序(Ctrl+F7),快捷图标见下图红色下划线标注;
B)编译之后应该是下图所示;
C)右击红色线加框部分,选择setting,并选择link选项;
D)在B处添加netcdf.lib;
E)回车确定后,设置结束。
Fortran读取二进制文件
一).一般问题二进制文件与我们通常使用的文本文件储存方式有根本的不同。
这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。
因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。
这样的编辑器有很多,在我们的 CVF 附带的集成开发环境下就可以(将二进制文件拖动到 IDE 窗口后松开)。
Visual Studio 2005 也是可以的。
(不过需要在 File 菜单下 Open,File)另外推荐一款使用较多的软件,叫做 UltraEdit(以下简称 UE)。
是很不错的文本编辑器,也能做十六进制编辑器使用。
为什么要用十六进制编辑器?而不用 2 进制呢?因为 2 进制实在太小,书写起来会很长,很不直观。
而我们的计算机把 8 位作为一个字节。
刚好 2 ** 8 = 256 = 16 ** 2。
用 8 位 2 进制表达的数,我们用 2 个十六进制数据来表达,更直观和方便。
二).文件格式所有文件,笼统意义上将可以区分为两类,一类是文本文件,一类是二进制文件。
1).文本文件文本文件用记事本等文本编辑器打开,我们可以看懂上面的信息。
所以使用比较广泛。
通常一个文本文件分为很多很多行,作为数据储存时,还有列的概念。
实际上,储存在硬盘或其他介质上,文件内容是线一样储存的,列是用空格或 Tab 间隔,行是用回车和换行符间隔。
以 ANSI 编码(使用较多)的文本文件来说,例如我们储存如下信息:引用:101112需要的空间是:3 行 ×每行 2 个字符 + 2 个回车符 + 2 个换行符 = 10 字节。
文本文件储存数据是有格式,无数据类型的。
比如 10 这个数据,并不指定是整型还是实型还是字符串。
它有长度,就是 2,两个字节。
储存时计算机储存它的 ASCII 码:31h,30h。
(十六进制表示)。
回车符是:0Dh,换行符:0Ah。
因此,这个数据储存是这样的:引用:31 30 0D 0A 31 31 0D 0A 31 32(红色为回车符和换行符) 31h 30h 就是 10,31h 31h 就是 11,31h 32h 就是 12。
forrtran中文本文件读写方法
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获取文件行数和列数的程序
一、概述Fortran是一种用于科学计算和工程计算的高级编程语言,广泛应用于数值模拟、数据分析和科学计算等领域。
在Fortran中,获取文件的行数和列数是一个常见的需求,特别是在处理大量数据时。
本文将介绍如何在Fortran中编写程序来获取文件的行数和列数。
二、获取文件行数的程序在Fortran中,我们可以使用以下程序来获取文件的行数:```program count_linesimplicit nonecharacter(len=100) :: filenameinteger :: num_lines, unit_num, ios! 获取文件名print*, "请输入文件名:"read(*, '(A)') filename! 打开文件open(unit=unit_num, file=trim(filename), status='old', action='read', iostat=ios)if (ios /= 0) thenprint*, "错误:无法打开文件"stopendif! 循环读取文件行数num_lines = 0doread(unit_num, '(A)', iostat=ios)if (ios /= 0) exitnum_lines = num_lines + 1end do! 关闭文件close(unit_num)! 输出结果print*, "文件", trim(filename), "共有", num_lines, "行"end program count_lines```以上程序首先提示用户输入文件名,然后打开文件并循环读取文件行数,直到读取完整个文件。
最后输出文件的行数。
三、获取文件列数的程序在Fortran中,我们可以使用以下程序来获取文件的列数:```program count_columnsimplicit nonecharacter(len=100) :: filenameinteger :: num_columns, unit_num, ioscharacter(len=100) :: line! 获取文件名print*, "请输入文件名:"read(*, '(A)') filename! 打开文件open(unit=unit_num, file=trim(filename), status='old', action='read', iostat=ios)if (ios /= 0) thenprint*, "错误:无法打开文件"stopendif! 读取第一行read(unit_num, '(A)', iostat=ios) linenum_columns = 0! 循环读取每个字符do while (ios == 0)num_columns = num_columns + 1read(line, '(A)', iostat=ios) lineend do! 关闭文件close(unit_num)! 输出结果print*, "文件", trim(filename), "共有", num_columns, "列" end program count_columns```以上程序首先提示用户输入文件名,然后打开文件并读取第一行,循环读取每个字符直到读取完整个文件。
fortran读取硬盘系列号的方法
fortran读取硬盘系列号的方法Fortran作为一种历史悠久的编程语言,在科学计算领域仍有着广泛的应用。
在某些情况下,我们可能需要读取计算机硬盘的系列号来进行特定的数据处理或设备管理。
本文将详细介绍如何使用Fortran语言来读取硬盘系列号。
### Fortran读取硬盘系列号的方法#### 1.使用系统调用Fortran可以通过系统调用与操作系统交互,从而实现读取硬盘系列号的功能。
以下是一个基于Unix-like系统的示例代码:```fortranprogram get_harddisk_serialimplicit nonecharacter(len=100) :: commandcharacter(len=100) :: serial_numberinteger :: iostat! 定义获取硬盘序列号的命令command = "ioreg -l | grep "Serial Number" | sed""s/.*"(.*)".*/1/"""! 执行系统命令,并将结果存储在serial_number中call execute_command_line(command, serial_number, iostat)! 检查执行状态if (iostat == 0) thenwrite(*,*) "硬盘序列号:", trim(serial_number)elsewrite(*,*) "读取硬盘序列号失败。
"endifend program get_harddisk_serial```请注意,这段代码在Unix-like系统上运行良好,但在Windows系统上可能不适用。
#### 2.使用外部库对于Windows系统,你可以考虑使用外部库,例如Windows API,来获取硬盘系列号。
二进制文件Fortran读写专题
GrADS最基本,我们最易准备
常用后缀 .dat .grb .bin ……
需要.ctl文件一起使用
是无格式文件 (form=‘unformatted’)
若用Fortran读写
▪ 存取方式
• 直接存取(access=‘direct’)
GrADS读取快速
• 顺序存取(access=‘sequential’) 需在.ctl中说明
一个点 (IX,IY)
一个 记录
10
recl=:一次写入的数据量,与Fortran编辑单位有 关。
▪ 以字节数为单位:需要*4,recl= 144*73*4(字节) ▪ 以数据个数为单位,不需*4,recl= 144*73
recl与rec有关联 不同维数的循环嵌套顺序
(lon lat lev 不同变量 time ) (x y z 不同变量 t )
▪ 数据类型real*4,也就是4个字节的实型数
GrADS binary数据
GrADS视该数据集为一个五维数组,这五维的变化顺序为:
x(lon) y(lat) z(lev) vars(不同变量) t(time)
这是GrADS缺省的数据存放次序,读取和调用的效率最高。
例:假如我们希望创建一 binary数据集,共4个变量, 每个变量有4维(x,y,z,t),则以 x,y维构成水平网格的二维数 组片的存放顺序如下:
这是GrADS缺省的数据存放次序,读取和调用数 据的效率最高。
2017年9月11日星期一
5
输出GrADS数据文件的次序
其中任何一(几)维都可省略。例:
▪ DATA ( 144, 73, 17, 6, 365 )
▪ DATA(144,73,17,365)
C语言直接操作FORTRAN数据文件的方法
摘要: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新手的一些实用建议
fortranopen语句
fortranopen语句Fortran中的open语句用于打开文件,它是Fortran编程中非常重要的一个语句。
在本文中,我们将介绍Fortran中open语句的一些常见用法和参数。
1. 打开文件以供读取:open(unit=10, file='input.txt', status='old', iostat=ierr)这个open语句打开了名为input.txt的文件,并将其与逻辑单元10关联。
通过指定status='old',我们将文件以只读模式打开。
如果文件打开成功,ierr将被设置为0。
2. 打开文件以供写入:open(unit=20, file='output.txt', status='new', iostat=ierr)这个open语句打开了名为output.txt的文件,并将其与逻辑单元20关联。
通过指定status='new',我们将文件以写入模式打开。
如果文件打开成功,ierr将被设置为0。
3. 打开文件以供读取和写入:open(unit=30, file='data.txt', status='unknown', iostat=ierr, access='direct')这个open语句打开了名为data.txt的文件,并将其与逻辑单元30关联。
通过指定status='unknown',我们允许文件既可以读取又可以写入。
通过指定access='direct',我们指定了文件的访问方式为直接访问。
4. 打开文件以供追加写入:open(unit=40, file='log.txt', status='old', iostat=ierr, position='append')这个open语句打开了名为log.txt的文件,并将其与逻辑单元40关联。
nc格式数据fortran读取方法(netcdf库使用图解)
1、首先保证有一个somelibs文件夹。
此文件夹下游三个子文件夹,分别为dlls,include,
lib;dlls文件夹下有名为netcdf.dll的dll文件;include文件夹下有netcdf.h和netcdf.inc 头文件;lib文件夹下有netcdf.lib和netcdfs.lib的lib文件。
将此文件夹放在你绝对不会误删的地方,建议放在C盘根目录下。
2、将netcdf.dll拷贝到“C:\WINDOWS\system32\”下。
(注意:此乃windows系统文件夹)
3、以CVF 6.6为例,作一说明。
(1)首先,打开tools下options;
A)选择Dircetories;
B)按照下面三幅图分别设置:Include files、Executable files、Library files。
(注意红色下划线标注的地方)。
(目前netcdf库还不能用于64位系统,2010-12-13)
(2)以下步骤,每一次重新打开程序,编译之后都要重复的步骤。
A)写好程序,首先编译程序(Ctrl+F7),快捷图标见下图红色下划线标注;
B)编译之后应该是下图所示;
C)右击红色线加框部分,选择setting,并选择link选项;
D)在B处添加netcdf.lib;
E)回车确定后,设置结束。
(完整版)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':指定要打开的文件名称,文件名要符合系统规定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最近专业课海洋要素计算作业需要用fortran编程读取验潮站资料(如下,是txt,其中数据是有62行,限于篇幅,我只截取了前5行数据外加验潮站的4行头信息)
!要注意的是最后一列数据后面没有空格
program ex1
!**********************************************
!* written by 潘海东, 2015,3,20
!*一次性读取744个数据,放入一维数组中
!*(如果一次性读取太多的话可能会对系统造成某些影响)
!**********************************************
INTEGER :: b(62*12),i
character(len=20) time,location,u1,u2
open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old')
!********读取头信息
read(10,"(A3)") u1
read(10,"(A18)") time
read(10,"(A13)") location
read(10,"(A2)") u2
!********读取数据
read(10,100) b(:)
100 format(61(11(I4,1x),I4,/),11(I4,1x),I4) !在fortran的输入输出中'/'代表换行
close(10)
end
program ex2
!**********************************************
!* written by 潘海东, 2015,3,20
!*读取第3列至第11列
!**********************************************
INTEGER :: a(62,9),i
character(len=20) time,location,u1,u2
open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old')
!***读取头信息
read(10,"(A3)") u1
read(10,"(A18)") time
read(10,"(A13)") location
read(10,"(A2)") u2
!***读取验潮站数据
do i=1,62
read(10,100) a(i,:)
write(*,99) a(i,:)
end do
99 format(9(I4,1x))
100 format(10x,9(I4,1x),4x)
close(10)
end
!!!!这些技巧总结起来就是利用nX跳过不想要的东西。