二进制文件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值。

返回值文件顺利打开后,指向该流的文件指针就会被返回。

二进制文件Fortran读写专题

二进制文件Fortran读写专题

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)
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 ……
8
FORTRAN示例二:每次写入一个记录
Var1
Var2
Var3
VarN
T1
……
一个 记录
Var1
Var2
Var3
VarN
T2
……
Var1
Var2
Var3
VarN
T3
……
2017年9月11日星期一
9
FORTRAN示例二:每次写入一个记录
每次写入一个数据
每次写入一个记录(平面)
2017年9月11日星期一
一个点 (IX,IY)
一个 记录
10
recl=:一次写入的数据量,与Fortran编辑单位有 关。
▪ 以字节数为单位:需要*4,recl= 144*73*4(字节) ▪ 以数据个数为单位,不需*4,recl= 144*73

让FORTRAN也能随机读写二进制文件任意字节数

让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], 王德超
因版权原因,仅展示原文概要,查看原文内容请购买。

【Fortran】Fortran中Open,Read和Write的用法

【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语句所规定的格式对数据进⾏输出。

二进制文件的读写以及相关心得

二进制文件的读写以及相关心得

二进制文件读写分析有关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++中的二进制文件,可今天测试的时候突然发现程序生成的二进制文件和文本文件一样。

二进制读写文件

二进制读写文件

二进制读写文件在计算机中,所有的数据最终都以二进制形式存储,包括文本、图像、音频和视频等。

二进制文件的读写是计算机操作系统和应用程序中的常见操作之一,它涉及将数据从磁盘或其他存储介质加载到内存中,以便计算机可以对其进行处理。

二进制文件的读取通常包括以下几个步骤:打开文件、读取文件内容、关闭文件。

在打开文件时,计算机会根据文件路径找到文件的存储位置,并分配内存来存储文件的内容。

然后,计算机将按照一定的格式,读取文件中的二进制数据,并将其转换为计算机可以理解的数据类型,如字符、整数或浮点数等。

最后,计算机会关闭文件,释放内存。

类似地,二进制文件的写入也是一个相似的过程。

首先,计算机会创建一个新文件或打开一个已存在的文件,并分配内存用于存储数据。

然后,计算机将数据转换为二进制形式,并将其写入文件中。

最后,计算机会关闭文件,确保数据被正确地保存。

二进制文件的读写在计算机科学中具有重要的意义。

它可以用于存储和传输各种类型的数据,如文本文件、图像文件、音频文件和视频文件等。

通过使用二进制文件,计算机可以高效地处理大量的数据,并保持数据的完整性和准确性。

对于程序员来说,了解如何读写二进制文件是必不可少的技能之一。

在编写应用程序时,程序员经常需要读取和处理二进制文件,如配置文件、日志文件和数据库文件等。

通过对二进制文件的读写操作,程序员可以实现数据的持久化存储和交换,从而使程序更加灵活和可扩展。

二进制文件的读写还可以用于数据的备份和恢复。

通过将数据存储为二进制文件,可以有效地保存和恢复重要的数据,以防止数据丢失或损坏。

这在计算机系统的维护和管理中具有重要的作用。

二进制文件的读写是计算机科学中的重要概念和技能。

通过了解和掌握二进制文件的读写过程,我们可以更好地理解计算机系统的工作原理,并能够更有效地处理和管理数据。

无论是在编程还是在日常使用计算机时,对二进制文件的读写都是必不可少的技能。

希望本文能够帮助读者更好地理解和应用二进制文件的读写。

6 Fortran 程序设计6-文件

6 Fortran 程序设计6-文件

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等表示要读取到的变量。

文件操作(二进制读写)

文件操作(二进制读写)

⽂件操作(⼆进制读写)/***a.txt***/this is a wordhelloworld/***file.c***/#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){FILE *p = fopen("./a.txt","r");while(!feof(p)){char buf[100] = {0};fscanf(p,"%s",buf);printf("%s\n",buf);}fclose(p);return0;}fscanf()函数和scanf函数⽤法⼀样。

fscanf是从⼀个⽂件中读取字符串,scanf是从键盘读取字符串。

(遇到空格就停⽌)/***a.txt***/23 + 45 =35 + 63 =34 + 45 =/***file1.txt***/#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){int a,b;FILE *p = fopen("./a.txt","r");while(!feof(p)){char buf[100] = {0};//fgets(buf,"%s",p);//fscanf(p,"%s",buf);fscanf(p,"%d + %d = ",&a,&b);printf("a = %d , b = %d\n",a,b);//printf("%s\n",buf);}fclose(p);return0;}/***fprintf.c***/#include<stdio.h>#include<string.h>int main(){FILE *p = fopen("./b.txt","w");char buf[100] = "hello world";fprintf(p,"%s",buf);fclose(p);return0;}fread()函数和fwrite()函数:操作⽂本⽂件和⼆进制⽂件fopen()函数只能读⽂本⽂件/***fread.c***/#include<stdio.h>int main(){FILE *p = fopen("./a.txt","rb");char buf[100] = {0};fread(buf,sizeof(char),1,p); //第⼀个参数是缓冲区,第⼆个参数是读取字节⼤⼩,第三个 //参数表⽰读取字节个数,第四个参数表⽰⽂件指针 printf("buf = %s\n",buf);fclose(p);return0;}/***fread1.c***/#include<stdio.h>int main(){FILE *p = fopen("./a.txt","rb");while(!feof(p)){char buf[20] = {0};fread(buf,sizeof(char),sizeof(buf),p);printf("buf = %s\n",buf);}fclose(p);return0;}fread()函数有返回值,返回的是size_t类型,unsigned int ==》 %u/***fread.c***/#include<stdio.h>int main(){FILE *p = fopen("./c.txt","rb");char buf[1024] = {0};size_t res = fread(buf,sizeof(char),sizeof(buf),p);printf("res = %u\n",res);/*while(!feof(p)){char buf[20] = {0};fread(buf,sizeof(char),sizeof(buf),p);printf("buf = %s\n",buf);}*/fclose(p);return0;}/***c.txt***/asd运⾏结果:res = 4(⽂件结尾有⼀个换⾏字符‘\n’?);size_t res = fread(buf,sizeof(int),sizeof(buf),p);运⾏结果:res = 1;以上程序的运⾏结果和windos环境下读⽂本⽂件的结果会出现差异。

Fortran文件

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
文件的概念
文件:存储在外部介质上数据的集合,由若干个记录构成。 文件:存储在外部介质上数据的集合,由若干个记录构成。
一、 记录

C语言直接操作FORTRAN数据文件的方法

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)组成该记录的各数据内容。

fortranwrite用法

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 读取二进制文件

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应该就是采样间隔。

6 Fortran 程序设计6-文件

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=文件单元号, ) ! 将数据写入文件在读取或写入文件时,需要注意数据的格式。

二进制读写文件

二进制读写文件

二进制读写文件二进制读写文件是计算机中常用的一种文件读写方式。

与文本文件不同,二进制文件中存储的是计算机能够直接识别的二进制数据,而不是人类可读的字符。

因此,二进制读写文件需要使用特定的方法和工具来进行操作。

在计算机中,所有的数据都是以二进制形式存储的。

文本文件中的字符也是以二进制形式存储的,但是它们被解释为人类可读的字符。

而二进制文件中存储的是计算机能够直接识别的二进制数据,例如图像、音频、视频等文件。

二进制读写文件的操作需要使用特定的工具和方法。

在Python中,可以使用内置的open函数来打开文件,并指定文件的打开模式为二进制模式。

例如,要以二进制模式打开一个名为“test.bin”的文件,可以使用以下代码:```f = open("test.bin", "rb")```在这个例子中,打开模式为“rb”,其中“r”表示读取模式,“b”表示二进制模式。

这样打开文件后,就可以使用read方法来读取文件中的二进制数据。

例如,要读取文件中的前10个字节,可以使用以下代码:```data = f.read(10)```这个例子中,read方法的参数为10,表示读取10个字节的数据。

读取后的数据存储在变量data中。

除了读取文件,还可以使用write方法来写入二进制数据到文件中。

例如,要将一个字节串写入到文件中,可以使用以下代码:```f.write(b"\x01\x02\x03\x04")```这个例子中,write方法的参数为一个字节串,表示要写入的数据。

在Python中,字节串需要以“b”开头,表示这是一个二进制数据。

二进制读写文件在计算机中应用广泛,特别是在处理图像、音频、视频等文件时。

通过使用二进制读写文件的方法,可以更加高效地读取和写入这些文件中的数据。

[精华]fortran之open,write,read,inquire,namelist应用

[精华]fortran之open,write,read,inquire,namelist应用

Fortran之open,write,read,inquire,Namelist 使用Fortran之open,write,read,inquire,Namelist 使用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是默认的输出位置,也就是屏幕。

fortran读文件教学课件

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)

二进制文件读写(写给新手)

二进制文件读写(写给新手)

二进制文件读写(写给新手)二进制文件读写(写给新手)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。

fortran经典课件-第七章 文件

fortran经典课件-第七章 文件

23
9.5二进制文件的操作
使用二进制文件来做直接读取时,OPEN命令中的RECL字段所设 置的整数n值所代表的大小会随着编译器不同而改变 Visual Fortran中默认视为n*4bytes,G77会视为n bytes
执行后所生成的LIST.BIN文件
直接访问文件时,默认值就 是unformatted,Form省略 在Visual Fortran中,文件 LIST.BIN的大小应该是 36bytes,因为总共输出9个 浮点数,而每个浮点数占 4bytes
2007-10-21
15
2007-10-21
16
Fortran 90添加的功能
2007-10-21
17
其他文件运行命令
BACKSPACE(UNIT=number,ERR=errlabel,IOSTAT=i ostat)
把文件的读写位置退回一步,其他字段参考前面命令
ENDFILE(UNIT=number,ERR=errlabel,IOSTAT=iostat)
使用这个命令会把目前文件的读写位置变成文件的结尾
REWIND(UNIT=number,ERR=errlabel,IOSTAT=iostat)
把文件的读写位置倒回文件开头
CLOSE(UNIT=number,STATUS=string,ERR=errlabel,I OSTAT=iostat)
把文件关闭,不再进行读写操作 STATUS=‘KEEP’:会在文件关闭后、保留住这个文件,这是默 认的状态 STATUS=‘DELETE’:会在文件关闭后,消除这个文件 2007-10-21 18
FORM='FORMATTED' OR 'UNFORMATTED‘ FORMATTED:表示文件使用“文本文件”格式来保存 UNFORMATTED:表示文件使用“二进制文件”格式来保存 默认值为FORMATTED STATUS='NEW' OR 'OLD' OR 'SCRATCH' OR 'UNKNOWN‘ 用来说明要打开一个新文件或是已经存在的旧文件,默认值为 UNKNOWN NEW:表示这个文件原本不存在、是第一决打开 OLD:表示这个文件原本就存在 REPLACE:文件若存在,会重新创建一次,原本的内容消失。文 件若不存在,则创建新文件 SCRATCH:表示要打开一个暂存盘、这个时候可以不指定文件名 称。程序会自动取一个文件名,暂存盘会在程序结束后自动删除 UNKNOWN:由各编译器自定义。通常会同REPLACE的效果

二进制读写文件

二进制读写文件

二进制读写文件二进制是一种用于表示和存储数据的编码系统,它由0和1两个数字组成。

在计算机中,所有的数据都以二进制形式存储和传输。

在本文中,我们将探讨如何使用二进制读写文件,以及它的一些应用。

让我们看看如何使用二进制读取文件。

在计算机中,文件是一系列的字节组成的。

每个字节由8个二进制位组成。

使用二进制读取文件时,我们可以逐字节地读取文件内容,并将其转换为相应的二进制表示。

在大多数编程语言中,都提供了读取二进制文件的方法和函数。

我们可以使用这些方法打开文件,并按字节读取文件内容。

通过这种方式,我们可以读取文件中的所有数据,包括文本、图像、音频等等。

接下来,让我们探讨如何使用二进制写入文件。

与读取文件相反,使用二进制写入文件时,我们可以将数据以二进制形式写入文件中。

同样,我们可以按字节写入文件内容,将其转换为相应的二进制表示。

使用二进制写入文件时,我们可以创建一个新文件或覆盖已有文件。

我们可以将数据以二进制形式写入文件,并将其保存在计算机的存储介质中。

这样,我们就可以在以后的时间里读取这些数据,或者与其他人共享这些数据。

除了基本的读写文件操作,二进制还有许多其他的应用。

例如,在网络传输中,数据通常以二进制形式传输。

当我们通过互联网发送或接收数据时,数据会被转换为二进制形式,并通过网络传输。

在接收方那里,数据会被重新转换为其原始形式。

另一个应用是在计算机中存储图像和音频。

图像和音频文件通常很大,因为它们包含了大量的数据。

使用二进制存储这些文件可以节省存储空间,并提高读写效率。

在读取图像和音频文件时,我们可以按字节读取文件内容,并将其转换为相应的二进制表示。

二进制还可以用于存储和传输其他类型的数据,如视频、压缩文件等。

通过将数据转换为二进制形式,我们可以有效地存储和传输这些数据,同时保持数据的完整性和准确性。

总结一下,二进制是一种用于表示和存储数据的编码系统。

通过使用二进制读写文件,我们可以读取和写入文件内容,并以二进制形式存储和传输数据。

fread和fwrite和feof读写二进制文件

fread和fwrite和feof读写二进制文件

fread和fwrite和feof读写⼆进制⽂件#include <stdio.h>#include <stdlib.h>void text_to_bin(char *argv[]);void bin_to_text();typedef struct{int xh;char name[20];int age;}Student;int main(int a,char *argv[]){if(a!=4){printf("参数不够!\n");}text_to_bin(argv);bin_to_text(argv);return 0;}void text_to_bin(char *argv[]){Student stu;FILE *fp1, *fp2;fp1 = fopen(argv[1],"r");if(fp1==NULL){printf("source file open error");exit(1);}fp2 = fopen(argv[2],"wb");//write b bytes⼆进制⽂件要写⼊的⼆进制⽂件if(fp2==NULL){printf("bytes file open error");exit(1);}while(fscanf(fp1,"%d %s %d", &stu.xh, , &stu.age)!=EOF){//printf("%s\n",);fwrite(&stu, sizeof(stu), 1, fp2);//写⼊⼆进制⽂件stu是指向数据块的⼆进制结构体变量;每次写⼊1个结构体变量}fclose(fp1);fclose(fp2);}void bin_to_text(char *argv[]){Student stu;FILE *fp1, *fp2;fp1 = fopen(argv[2],"rb");//只读⽅式读取⼆进制⽂件if(fp1==NULL){printf("source file open error");exit(1);}fp2 = fopen(argv[3],"w");//写⼊⽂本⽂件if(fp2==NULL){printf("bytes file open error");exit(1);}//必须>0 循环/* while(fread(&stu,sizeof(stu), 1, fp1)){fprintf(fp2, "%d %s %d\n",stu.xh, , stu.age);} */size_t size = fread(&stu, sizeof(stu),1,fp1);if(size==0) return;//feof只能⽤在⼆进制⽂件while(!feof(fp1)){fprintf(fp2, "%d %s %d\n",stu.xh, , stu.age);fread(&stu, sizeof(stu),1,fp1);//必须加}fclose(fp1);fclose(fp2);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GrADS binary数据
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维构成水平网格的二维数 组片的存放顺序如下:
这是GrADS缺省的数据存放次序,读取和调用数 据的效率最高。
2017年9月11日星期一
5
输出GrADS数据文件的次序
其中任何一(几)维都可省略。例:
▪ DATA ( 144, 73, 17, 6, 365 )
▪ DATA(144,73,17,365)
▪ DATA(144,73,17)
▪ DATA(6,365)
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
Var3
VarN
T1
……
一个 记录
Var1
Var2
Var3
VarN
T2
……
Var1
Var2
Var3
VarN
T3
……
2017年9月11日星期一
4
输出GrADS数据文件的次序
用循环写grads的二进制数据, 从内循环到外循环依次是:
▪ x (lon) → y (lat) → z (lev) → vars (不同变 量) → time
13
FORTRAN示例四:气压层不同
PS
ta
qa
zg
T1
……
一个 记录
PS
ta
qa
zg
T2
……
PS
ta
qa
zg
T3
……
2017年9月11日星期一
14
FORTRAN示例四:气压层不同
2017年9月11日星期一
15
FORTRAN示例五:多个变量
2017年9月11日星期一
16
Time 1, Level ? , Variable PS Time 1, Level 1000, Variable ta
▪ DATA(365)
在生成原始数据文件时,无论用工作站还是PC机, 无论是用FORTRAN语言还是用C 语言,所生成 的数据的格式都要求是无格式(unformatted)直 接(direct)记录格式,不允许在记录中加入描述 符,如记录开始、记录结束、换行符等。
2017年9月11日星期一
6
二进制Binary数据文件存储结构
zg 17 99 geopotential height (gpm)
ts 0 99 t2m temperature (degC)
P
0 99 precipitation (mm)
endvars
18
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)
Ps
P Ps
P Ps
P Ps
Time 365, Level ? , Variable P
2017/9/11
17
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
一个点 (IX,IY)
一个 记录
10
recl=:一次写入的数据量,与Fortran编辑单位有 关。
▪ 以字节数为单位:需要*4,recl= 144*73*4(字节) ▪ 以数据个数为单位,不需*4,recl= 144*73
recl与rec有关联 不同维数的循环嵌套顺序
(lon lat lev 不同变量 time ) (x y z 不同变量 t )
Var1
Var2
Var3
VarN
T1
……
Var1
Var2
Var3
VarN
T2
……
Var1
Var2
Var3
VarN
T3
……
2017年9月11日星期一
7
FORTRAN示例一:每次写入一个数据
无格式存储 直接存储
记录长度 记录序号
TIME循环 变量循环 LEV循环 LAT循环 LON循环
记录序号
2017年9月11日星期一
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日星期一
11
FORTRAN示例三:同时写入地表变量和气压层变量
PS
ta
va
zg
T1
……
一个 记录
PS
ta
va
zg
T2
……
PS
ta
va
zg
T3
……
2017年9月11日星期一
12
FORTRAN示例三: 同时写入地表变量和
气压层变量
2017年9月11日星期一
数据文件中的数据结构
一个记录

数据文件
时间1
每个 时间块
变量1
每个 变量块
层次1 (底)
每个 每个
层次 纬圈
纬圈1 (南)
西

时间2 变量2 层次2 纬圈2

…… …… …… ……

时间n
变量n
层次n (顶)
纬圈n (北)

2017年9月11日星期一
3
二进制Binary数据文件存储结构
Var1
Var2
如何写出ctl文件?
300 Time 1, Level 1000, Variable ua
t = 2, 3…365
then levels 925, 850, 700, 600, 500, 400,
300, 250, 200, 150, 100, 70, 50, 30, 20, 10
TTTTTiiiiimmmmmt3t3t3hhh000eeeeeeee000nnn11111,,, ,,,,,222lllLLLLLeee555vvveeeee000eeevvvvv,,, llleeeee222ssslllll000000999111,,,222??000111555000,,555,,,000VV000888,,,,,,aa555VVV111rr000aaaii000aa,,,rrr000iiibb777aaa,,000llbbbee77000lll00eee,,, ,,666TP55000Svwz00000ga,,a,,, 3355500000,,00022,,,00444,,000TTTTTTT11000iiiiiiimmmmmmm00… … … …,,, eeeeeee… … … …2323445… … … …,,,,,,, LLLLLLL… … … …eeeeeeevvvvvvv…………eeeeeeelllllll……………………??????? …………,,,,,,, VVVVVVVaaaaaaarrrrrrriiiiiiiaaaaaaabbbbbbbllllllleeeeeee
相关文档
最新文档