二进制文件Fortran读写专题
关于二进制文件读写的详细解说

先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。
二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。
下面我们看看一个拷贝程序的源码:2中,注意fread的返回值,这个值需要在fwrite的时候将会用到。
后面是关于fopen,fread,fwrite三个函数的详细说明。
fopen(打开文件)相关函数open,fclose表头文件#include<stdio.h>定义函数FILE * fopen(const char * path,const char * mode);函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。
若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。
若文件不存在则建立该文件。
a 以附加的方式打开只写文件。
若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。
若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
不过在POSIX系统,包含Linux都会忽略该字符。
由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
返回值文件顺利打开后,指向该流的文件指针就会被返回。
二进制文件的读写以及相关心得

二进制文件读写分析有关TXT文件以及bin文件处理的测试代码int main(){//fstreamfile("D:\\test.dat",ios_base::in|ios_base::out|ios_base::app);fstream file;file.open("D:\\test1.dat",ios_base::out);{int temp[10] ={0x11,0x13,0x14,0x1F,0x1D,0x11,0x11,0x12,0x11,0x11};int temp1[10];file.write((char *)temp,sizeof(temp));file.close();file.open("D:\\test1.dat",ios_base::in);file.read((char *)temp,sizeof(temp));unsigned int i;cout<<sizeof(temp)<<endl;for(i = 0;i < sizeof(temp)/sizeof(unsigned int);i++){temp1[i] = temp[i];cout<<temp[i]<<endl;}file.close();file.open("D:\\test1.dat",ios_base::out);temp1[6] = 0x16;file.write((char *)temp1,sizeof(temp));file.close();}file.open("D:\\test1.dat",ios_base::out|ios_base::app);unsigned char temp[10] = {'a','b','a','a','a','d','a','C','a','a'}; test *test1 = (test *)malloc(sizeof(test));test1->projectId = 'U';test1->password = 0x12;for(int i = 0;i < 10;i ++){test1->someThings[i] = temp[i];}test1->sm = (unsigned long)0x41;test1->fuck = 'M';file.write((char *)test1,sizeof(test));file.close();test *test2 = (test *)malloc(sizeof(test));file.open("D:\\test1.dat",ios_base::in);file.seekg(0x28);file.read((char *)test2,sizeof(test));for(int i = 0;i < 10;i ++){cout<<test2->someThings[i]<<endl;}file.close();return 0;}有关bin文件处理的测试笔记<1> 我一直以为自己很熟悉如何使用C/C++中的二进制文件,可今天测试的时候突然发现程序生成的二进制文件和文本文件一样。
二进制文件Fortran读写专题

GrADS最基本,我们最易准备
常用后缀 .dat .grb .bin ……
需要.ctl文件一起使用
是无格式文件 (form=‘unformatted’)
若用Fortran读写
▪ 存取方式
• 直接存取(access=‘direct’)
GrADS读取快速
• 顺序存取(access=‘sequential’) 需在.ctl中说明
8
FORTRAN示例二:每次写入一个记录
Var1
Var2
Var3
VarN
T1
……
一个 记录
Var1
Var2
VaVar2
Var3
VarN
T3
……
2017年9月11日星期一
9
FORTRAN示例二:每次写入一个记录
每次写入一个数据
每次写入一个记录(平面)
2017年9月11日星期一
t=1
then levels 925, 850, 700, 600, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30, 20, 10
根据Fortran程序,
Time 1, Level 1000, Variable qa then levels 925, 850, 700, 600, 500, 400,
▪ 数据类型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维构成水平网格的二维数 组片的存放顺序如下:
fortran用法总结

fortran用法总结我的Fortran基本用法小结周日, 10/14/2007 - 21:00 — gator一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
ortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
Fortran之open,write,read,inquire,Namelist 使用

FORM='FORMATTED' OR 'UNFORMATTED'
FORM字段只有两个值可以设置:
FORM='FORMATTED' “文本文件”格式来保存
FORM='UNFORMATTED' “二进制文件”格式保存
这一栏不给定时候的默认值是: FORM='FORMATTED'
NAMED=named 查询文件是否取了名字,也就是检查文件是否为临时保存盘,返回值为逻辑数。
ACCESS=access 检查文件的读取格式,返回一个字符串,可以是:
'SEQUENTIAL' 代表文件使用顺序读取格式
'DIRECT' 代表文件使用直接读取格式
2. 文件的操作:
----------------------------------
open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。
example:
program ex0901
impicit none
open(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file指定文件名称。
stat>0 表示读取操作发生错误。
stat=0 表示读取操作正常。
stat<0 表示文件终了。
ERR=errlabel 指定在读写过程中发生错误时,会转移到某个行代码来继续执行程序。
END=endlabel 指定在读写到文件末尾时,要转移到某个行代码来继续执行程序。
!这一栏不给定时,默认为STATUS='UNKNOWN'。
6 Fortran 程序设计6-文件

6 Fortran 程序设计6-文件6 Fortran 程序设计6-文件在Fortran编程中,文件操作是非常重要的一部分。
通过文件操作,我们可以方便地读取和写入数据,对数据进行处理和分析。
本文将介绍Fortran中的文件操作相关内容。
1. 文件的概念和分类文件是计算机中用来存储数据的一种存储介质,可以是硬盘、光盘或其他存储设备。
在Fortran中,常见的文件类型包括文本文件和二进制文件。
文本文件是以文本的形式存储数据的文件,其中的数据以可打印字符的形式表示。
文本文件可以使用文本编辑器打开并查看其内容。
二进制文件以二进制形式存储数据的文件,其中的数据以二进制位表示。
二进制文件一般不能直接使用文本编辑器打开查看,需要通过特定的程序进行读取和解析。
2. 文件操作的基本过程文件操作的基本过程包括打开文件、读取或写入文件、关闭文件。
下面分别介绍这三个步骤的具体内容。
2.1 打开文件在Fortran中,可以使用`OPEN`语句打开一个文件。
打开文件时需要指定文件名、打开模式和文件单元号。
OPEN(unit=文件单元号, file=文件名, status=打开模式)其中,文件单元号是一个整数值,用来标识一个打开的文件。
文件名是一个字符串,表示要打开的文件的路径和文件名。
打开模式可以是以下几种:- `READ`:只读模式,用于从文件中读取数据。
- `WRITE`:只写模式,用于向文件中写入数据。
如果文件不存在,则创建一个新文件;如果文件已存在,则清空文件内容。
- `APPEND`:追加模式,用于向文件中写入数据。
如果文件不存在,则创建一个新文件;如果文件已存在,则在文件末尾追加写入数据。
- `READWRITE`:读写模式,既可以读取数据,也可以写入数据。
2.2 读取或写入文件在打开文件之后,可以使用`READ`和`WRITE`语句进行读取和写入操作。
读取文件时,可以使用以下语句:READ(unit=文件单元号, ) ! 读取文件中的数据写入文件时,可以使用以下语句:WRITE(unit=文件单元号, ) ! 将数据写入文件在读取或写入文件时,需要注意数据的格式。
二进制读写文件

二进制读写文件二进制是一种用于表示和存储数据的编码系统,它由0和1两个数字组成。
在计算机中,所有的数据都以二进制形式存储和传输。
在本文中,我们将探讨如何使用二进制读写文件,以及它的一些应用。
让我们看看如何使用二进制读取文件。
在计算机中,文件是一系列的字节组成的。
每个字节由8个二进制位组成。
使用二进制读取文件时,我们可以逐字节地读取文件内容,并将其转换为相应的二进制表示。
在大多数编程语言中,都提供了读取二进制文件的方法和函数。
我们可以使用这些方法打开文件,并按字节读取文件内容。
通过这种方式,我们可以读取文件中的所有数据,包括文本、图像、音频等等。
接下来,让我们探讨如何使用二进制写入文件。
与读取文件相反,使用二进制写入文件时,我们可以将数据以二进制形式写入文件中。
同样,我们可以按字节写入文件内容,将其转换为相应的二进制表示。
使用二进制写入文件时,我们可以创建一个新文件或覆盖已有文件。
我们可以将数据以二进制形式写入文件,并将其保存在计算机的存储介质中。
这样,我们就可以在以后的时间里读取这些数据,或者与其他人共享这些数据。
除了基本的读写文件操作,二进制还有许多其他的应用。
例如,在网络传输中,数据通常以二进制形式传输。
当我们通过互联网发送或接收数据时,数据会被转换为二进制形式,并通过网络传输。
在接收方那里,数据会被重新转换为其原始形式。
另一个应用是在计算机中存储图像和音频。
图像和音频文件通常很大,因为它们包含了大量的数据。
使用二进制存储这些文件可以节省存储空间,并提高读写效率。
在读取图像和音频文件时,我们可以按字节读取文件内容,并将其转换为相应的二进制表示。
二进制还可以用于存储和传输其他类型的数据,如视频、压缩文件等。
通过将数据转换为二进制形式,我们可以有效地存储和传输这些数据,同时保持数据的完整性和准确性。
总结一下,二进制是一种用于表示和存储数据的编码系统。
通过使用二进制读写文件,我们可以读取和写入文件内容,并以二进制形式存储和传输数据。
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应该就是采样间隔。
二进制文件读写(写给新手)

二进制文件读写(写给新手)二进制文件读写(写给新手)FortranFortran 二进制文件读写【给新手】一).一般问题二进制文件与我们通常使用的文本文件储存方式有根本的不同。
这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。
因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。
这样的编辑器有很多,在我们的 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。
fortranwrite用法

fortranwrite用法一、Fortranwrite简介Fortranwrite是一种用于文件读写的Fortran语言的函数或子程序。
它可以实现将数据写入文件或者从文件中读取数据的功能,是Fortran语言中非常常用的工具之一。
Fortranwrite函数的用法灵活多样,可以根据不同的需求选择合适的方式进行数据写入。
下面将介绍Fortranwrite的用法及相关注意事项。
二、Fortranwrite的基本用法Fortranwrite函数的基本用法如下:```CALL Fortranwrite(Unit, Data, Numbytes)```其中,Unit是文件的编号,Data是待写入的数据,Numbytes是待写入数据的字节数。
三、Fortranwrite的参数类型1. Unit参数类型Unit参数是Fortranwrite函数中用来指定文件编号的参数。
在写入文件前,需要先打开文件,并获得一个文件编号。
文件编号是一个整型数值,它可以是任意非零正整数,表示文件的唯一标识符。
一般情况下,可以使用以下代码获得一个文件编号:```OPEN(Unit=Unit, File=FileName, Status=Status, Action=Action)其中,FileName是文件名,Status是文件打开状态(如"OLD"表示打开已存在的文件,"NEW"表示创建新文件),Action是文件打开方式(如"READ"表示只读,"WRITE"表示只写,"APPEND"表示在文件末尾追加写入)。
2. Data参数类型Data参数是Fortranwrite函数中用来指定待写入数据的参数。
Data的类型可以是Fortran中的任意数据类型,例如整型、实型、字符型等。
3. Numbytes参数类型Numbytes参数是Fortranwrite函数中用来指定待写入数据的字节数的参数。
Fortran文件

11.3
文件的读写
一、有格式顺序存取文件
READ ( [UNIT=] unit ,[FMT=] fmt [,ADVANCE=advance] [ , ERR=语句标号 [ ,IOSTAT=iostat] [ , END=语句标号 ) 语句标号] 语句标号] 语句标号 语句标号 输入项表 WRITE( [UNIT=]unit, [FMT=] fmt ] [,ADVANCE=advance] [ , ERR=err] [ , IOSTAT=iostat] ) 输出项表 [FMT=] fmt :格式说明,fmt可以是“*”号、FORMAT语句标号、 格式说明, 可以是“ FORMAT语句标号 语句标号、 格式说明字符串。 格式说明字符串。
例如,执行以下程序段: 例如,执行以下程序段: OPEN(2,FILE="example.txt",ACCESS="SEQUENTIAL") WRITE(2,'(A)',ADVANCE="no") "This is " WRITE(2,'(A)') " an example." 文件中: 文件中: This is an example.
二进制文件是microsoft的一种扩充模式数据按其在内存中的存储形式ห้องสมุดไป่ตู้储在文件中其数据流由二进制代码形式的一个个字节组成结构最紧凑适合于保存大容量的数据
第十一章 文件 第十一
文件的概念 文件的打开与关闭 文件的读写 其他文件操作
11.1
文件的概念
文件:存储在外部介质上数据的集合,由若干个记录构成。 文件:存储在外部介质上数据的集合,由若干个记录构成。
一、 记录
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)
【Fortran】Fortran中Open,Read和Write的用法

【Fortran】Fortran中Open,Read和Write的⽤法1:write(*,*)"string";write(unit=*,FMT=*)"string";write(unit=6,FMT=*)"string"。
以上等价,6是默认输出位置,即屏幕。
2:print*,"string"。
Print只能对屏幕输出。
3:integer(kind=4) a !f90;integer*4 a !f77;integer(4) a !f77。
以上等价。
real(kind=4) a !f90;real*4 a !f77;real(4) a !f77。
以上等价。
4:f77,变量名长度1~6;f90,变量名长度1~31。
5:read(*,*)"string";write(unit=*,FMT=*)"string";write(unit=5,FMT=*)"string"。
以上等价,5是默认输⼊位置,即键盘。
6:FORMAT6.1 格式输出格式输出语句由两部分组成:输出语句和输出格式语句。
输出语句的⼀般形式为:WRITE(*,L) 输出表列或: PRINT L 输出表列其中:* 代表隐含的输出设备,L 指输出格式语句的标号。
输出格式语句的⼀般形式:L FORMAT(1X,S)其中:L 输出格式语句的标号,1X 纵向⾛纸符,S 输出格式,⽤不同的“格式编辑符”(简称“编辑符”)来实现指定的输出格式,各格式间⽤逗号相隔。
FORMAT语句⼜叫“格式语句”,是⼀个⾮执⾏语句,本⾝不产⽣任何操作,只是提供输⼊或输出的格式。
FORMAT语句可以出现在程序的任何地⽅(但必须在PROGRAM语句之后和END语句之前,如果在⼦程序中⽤FORMAT语句,则应在⼦程序定义语句之后)。
系统按WRITE语句或PRINT语句中指定的语句标号找到相应的FORMAT语句,并按FORMAT语句所规定的格式对数据进⾏输出。
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跳过不想要的东西。
fortranwrite用法

fortranwrite用法Fortran中的fortranwrite是一个用于文件写入的子程序。
它提供了一种将数据以二进制格式写入文件的方法,并可以按照指定格式将数据转换为字符文本。
fortranwrite具有灵活的选项,可以根据不同的需求调整数据写入的方式。
fortranwrite的基本语法如下:`WRITE (unit, format) [input-list]`其中,unit指定了要写入的文件单元号,通常是一个整数或逻辑单元号。
这个单元号可以是事先由OPEN语句获得的逻辑单元号,也可以是内建的实体所定义的逻辑单元号(如*或者"stdout"表示控制台输出,或者trim文件的单元号)。
format是一个字符表达式,用于指定将数据转换为字符的格式。
格式指令是用于指定如何写入和读取数据的符号,也称为“格式编辑描述符”。
Fortran的格式编辑描述符包括格式宽度、字段宽度、编辑序列等。
input-list是需要写入文件的数据列表。
数据可以是常数、数组、变量或者复合结构。
input-list中的每个元素都按照format中的格式转换为字符并写入文件。
下面是使用fortranwrite的一个例子:fortranprogram write_exampleimplicit noneinteger :: i, jreal :: x(10), y(10)! 给数组x和y赋值do i = 1, 10x(i) = iy(i) = i2end do! 打开文件并写入数据open(unit=10, file='data.dat', status='replace', action='write') do i = 1, 10write(10, '(2F10.2)') x(i), y(i)end doclose(unit=10)! 从文件读取数据并打印open(unit=10, file='data.dat', status='old', action='read')do i = 1, 10read(10, '(2F10.2)') x(i), y(i)end doclose(unit=10)! 打印读取到的数据do i = 1, 10write(*, '(2F10.2)') x(i), y(i)end doend program write_example在上面的示例中,我们首先定义了两个数组x和y,然后使用do循环为它们赋值。
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语句逐行读取输入的数据。
让FORTRAN也能随机读写二进制文件任意字节数

让FORTRAN也能随机读写二进制文件任意字节数
王成良
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】1996(000)006
【摘要】本文提出了一种解决任何一种FORTRAN77语言随机读写二进制文件任意字节数的方法,并给出了该方法的源程序及调用实例。
【总页数】3页(P17-19)
【作者】王成良
【作者单位】无
【正文语种】中文
【中图分类】TP312FO
【相关文献】
1.高压气体淬火过程数值模拟软件中Fortran数据文件的处理--有限元和有限体积法软件二次开发中对Fortran二进制文件的处理 [J], 黄鹏;魏兴钊
2.利用VB随机文件处理中文记录与中文二进制文件的读取研究 [J], 王德超
3.任意随机序列关于二重非齐次马氏链的随机和的一类随机选择系统的随机逼近定理 [J], 王康康;李芳;杨卫国
4.FORTRAN语言上的任意精度运算 [J], 徐国良;李家楷
5.利用VB随机文件处理中文记录与中文二进制文件的读取研究 [J], 王德超
因版权原因,仅展示原文概要,查看原文内容请购买。
Matlab中如何实现二进制文件的读写

Matlab中如何实现二进制文件的读写1、文件的打开与关闭1)打开文件在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。
fopen函数的调用格式为:fid=fopen(文件名,‘打开方式’)说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。
文件名用字符串形式,表示待打开的数据文件。
常见的打开方式如下:‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
‘r+’:读写方式打开文件,打开后先读后写。
该文件必须已存在。
‘w’:打开后写入数据。
该文件已存在则更新;不存在则创建。
‘w+’:读写方式打开文件。
先读后写。
该文件已存在则更新;不存在则创建。
‘a’:在打开的文件末端添加数据。
文件不存在则创建。
‘a+’:打开文件后,先读入数据再添加数据。
文件不存在则创建。
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
2)关闭文件文件在进行完读、写等操作后,应及时关闭,以免数据丢失。
关闭文件用fclose函数,调用格式为:sta=fclose(fid)说明:该函数关闭fid所表示的文件。
sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。
如果要关闭所有已打开的文件用fclose(‘all’)。
2、二进制文件的读写操作1)写二进制文件fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。
其调用格式为:COUNT=fwrite(fid,A,'precision')说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。
缺省数据精度为uchar,即无符号字符格式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
……
4
输出GrADS数据文件的次序
用循环写grads的二进制数据, 从内循环到外循环依次是:
▪ x (lon) → y (lat) → z (lev) → vars (不同变 量) → time
这是GrADS缺省的数据存放次序,读取和调用数 据的效率最高。
2017年9月11日星期一
5
输出GrADS数据文件的次序
17 2017/9/11
Fortran->CTL
2017年9月11日星期一
dset d:/mydata/test.grd title This a GrADS test data undef -9999.0 xdef 144 linear 0 2.5 ydef 73 linear -90 2.5 zdef 17 levels 1000 925 850 700 600 500 400 300 250 200 150 100 70 50 30 20 10 tdef 365 linear 00:00z01jan2000 1dy vars 9 ps 0 99 Sea surface pressure (hPa) ta 17 99 air temperature (degC) qa 8 99 special humidity (kg/kg) ua 17 99 Zonal winds (m/s) va 17 99 Meridional winds (m/s) wa 12 99 vertical winds (pa/s) zg 17 99 geopotential height (gpm) ts 0 99 t2m temperature (degC) P 0 99 precipitation (mm) endvars 18
GrADS binary数据
GrADS最基本,我们最易准备 常用后缀 .dat .grb .bin …… 需要.ctl文件一起使用 是无格式文件 (form=‘unformatted’) 若用Fortran读写 ▪ 存取方式 • 直接存取(access=‘direct’) GrADS读取快速 • 顺序存取(access=‘sequential’) 需在.ctl中说明 ▪ 数据类型real*4,也就是4个字节的实型数
2017年9月11日星期一
11
FORTRAN示例三:同时写入地表变量和气压层变量
PS ta va zg
T1
PS ta va
……
zg
一个 记录
T2
……
va zg
PS
ta
T3
2017年9月11日星期一
……
12
FORTRAN示例三: 同时写入地表变量和 气压层变量
2017年9月11日星期一
13
FORTRAN示例四:气压层不同
GrADS binary数据
GrADS视该数据集为一个五维数组,这五维的变化顺序为:
x(lon) y(lat) z(lev) vars(不同变量) t(time)
这是GrADS缺省的数据存放次序,读取和调用的效率最高。
Time 1, Variable 1, Each vertical level from bottom to top Time 1, Variable 2, Each vertical level from bottom to top Time 1, Variable 3, Each vertical level from bottom to top Time 1, Variable 4, Each vertical level from bottom to top Time 2, Variable 1, Each vertical level from bottom to top Time 2, Variable 2, Each vertical level from bottom to top Time 2, Variable 3, Each vertical level from bottom to top Time 2, Variable 4, Each vertical level from bottom to top ……
记录序号
2017年9月11日星期一
8
FORTRAN示例二:每次写入一个记录
Var1 Var2 Var3 VarN
T1
Var1 Var2 Var3
……
VarN
一个 记录
T2
……
VarN
Var1
Var2
Var3
T3
2017年9月11日星期一பைடு நூலகம்
……
9
FORTRAN示例二:每次写入一个记录
每次写入一个数据 每次写入一个记录(平面)
PS ta qa zg
T1
PS ta qa
……
zg
一个 记录
T2
……
qa zg
PS
ta
T3
2017年9月11日星期一
……
14
FORTRAN示例四:气压层不同
2017年9月11日星期一
15
FORTRAN示例五:多个变量
2017年9月11日星期一
16
Time 1, Level ? , Variable PS t=1 Time 1, Level 1000, Variable ta then levels 925, 850, 700, 600, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 根据Fortran程序, Time 1, Level 1000, Variable qa 如何写出ctl文件? then levels 925, 850, 700, 600, 500, 400, 300 t = 2, 3…365 Time 1, Level 1000, Variable ua then levels 925, 850, 700, 600, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 Time 1, Level 1000, Variable va Time 2, Level ? , Variable Ps then levels 925, 850, 700, 600, 500, 400, …………………… 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 Time 2, Level ? , Variable P Time 1, Level 1000, Variable wa Time 3, Level ? , Variable Ps then levels 925, 850, 700, 600, 500, 400, …………………… 300, 250, 200, 150, 100 Time 3, Level ? , Variable P Time 1, Level 1000, Variable zg Time 4, Level ? , Variable Ps then levels 925, 850, 700, 600, 500, 400, …………………… 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 Time 4, Level ? , Variable P Time 1, Level ? , Variable TS Time 5, Level ? , Variable Ps Time 1, Level ? , Variable P …………………… Time 365, Level ? , Variable P
一个点 (IX,IY)
2017年9月11日星期一
一个 记录
10
recl=:一次写入的数据量,与Fortran编辑单位有 关。
▪ 以字节数为单位:需要*4,recl= 144*73*4(字节) ▪ 以数据个数为单位,不需*4,recl= 144*73
recl与rec有关联 不同维数的循环嵌套顺序 (lon lat lev 不同变量 time ) (x y z 不同变量 t ) (内循环-------------外循环)
2017年9月11日星期一 6
二进制Binary数据文件存储结构
Var1 Var2 Var3 VarN
T1
Var1 Var2 Var3
……
VarN
T2
……
VarN
Var1
Var2
Var3
T3
2017年9月11日星期一
……
7
FORTRAN示例一:每次写入一个数据
无格式存储 直接存储
记录长度 记录序号 TIME循环 变量循环 LEV循环 LAT循环 LON循环
其中任何一(几)维都可省略。例: ▪ DATA ( 144, 73, 17, 6, 365 ) ▪ DATA(144,73,17,365) ▪ DATA(144,73,17) ▪ DATA(6,365) ▪ DATA(365) 在生成原始数据文件时,无论用工作站还是PC机, 无论是用FORTRAN语言还是用C 语言,所生成 的数据的格式都要求是无格式(unformatted)直 接(direct)记录格式,不允许在记录中加入描述 符,如记录开始、记录结束、换行符等。
层次1 (底) 层次2
纬圈1 (南) 纬圈2
西
……
时间n
……
变量n
……
层次n (顶)
……
纬圈n (北)
东
3
二进制Binary数据文件存储结构
Var1 Var2 Var3 VarN
T1
Var1 Var2 Var3
……
VarN
一个 记录
T2
……
VarN
Var1
Var2
Var3
T3
2017年9月11日星期一