资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第九章 文 件,9-1,文件读取的概念,文件的功能:长期保存数据,;,可以被读取或修改,文件中数据保存的方式:,字符(文本文件),二进制数代码,字符(文本文件),:,使用文本编辑器来阅读,例,12345,,可读,二进制数代码,:,整数,12345,,保存格式和数据在内存中的保存方法相同,无法阅读,要用特殊的工具程序。,好处:,1),读取速度快,无需转换,2,)节省内存,长整型,1234567890,,文本,10,个字符,二进制,4,个字节,9-1,文件读取的概念,取文件的方式:,1),顺序读取,(sequential),2),直接读取,(direct),,,顺序读取:只能从文件开头一步步往下读取数据。,略过数据,或重新读取时,要先“快转”或是“倒带”,直接读取:读写文件时,可以任意到文件的的任何一个位置来读写。,9-2,顺序文件的操作,顺序文件(,sequential,):在读写时,不能任意到文件的某个位置读写数据,只能从头开始一个个记录地向下进行。改变文件位置时,只能逐个记录地后退(,backspace,),或是直接回到文件的开头,(rewind),对顺序文件的操作的基本原则:,当用,read,语句读取数据时,为了正确输入,,read,语句中各项输入项在,类型,上、采用,格式上,必须与文件中的数据项按位置一一对应,Open,和,rewind,语句之后总是在文件的开头。每执行一次,read,语句,总是从一个,新开始的记录,去读入,当用,read,语句去读文件记录时,如果,read,语句中的输入项少于文件中的数据项,则记录中的剩余项就会被忽略,下一个,read,语句会从新的纪录开始读入,如果,read,语句中的输入多于纪录中的数据项,则会接着去读下一个记录(不包括单个字符串),直到所有输入项都得到数据,或遇到文件结尾。,一个,WRITE,总是开始一个新的记录,当前,WRITE,语句所属出的记录总是作为文件的最后一个记录。因此一个顺序文件不可能做到重写前半部分,而保留后半部分。,对顺序文件的操作的基本原则:,例,读取字符串,Status=0,读取正常,Status0,发生错误,Status0,读取操作发生错误,;,var,=0,读取操作正常;,var,0,表示读取操作发生错误,Stat=0,表示读取操作正常,Stat0,表示到达文件终了,ERR,errlabel,指定在读写过程中发生错误时,会转移到,errlabel,指定的,行代码,的语句继续执行程序,END,endlabel,读到文件结尾时,要转移到,endlabel,指定的,行代码,的语句继续执行,Fortran 90,添加功能,ADVANCE=YES,和,NO,设置在文本格式下的,顺序文件,中,每一次的,READ,和,WRITE,命令完成后,,读写位置会不会自动向下移动一行,。,ADVANCE=YES,是默认值,每读写一次会向下移动一行,ADVANCE=NO,会暂停自动换行的操作,使用这个字段时,,一定要设置输出输入格式,。在屏幕输出时可以使用这个设置来控制,write,命令是否会自动换行,SIZE=count,当,ADVANCE=NO,时才使用。它会把这一次输出入的字符数目设置给整型变量,count,9-4-3,查询文件的状态,INQUIRE,INQUIRE(UNIT=,number,FILE=filename,IOSTAT=,ios,ERR=,label,EXIST=,exist,OPEN=,opened,NUMBER=,number,NAMED=,named,ACCESS=,acess,SEQUENTIAL=,sequential,DIRECT=,direct,FORM=,form,FORMATTED=,formatted,UNFORMATTED=,unformatted,RECL=,recl,),OPEN=opened,,逻辑变量,NUMBER=,number,由文件名查打开时给定的代码,NAME=named,,逻辑值。检查文件是否取名,即是否为临时保存盘。,ACCESS=,access,检查文件读取的格式,返回字符串,值为:,SEQUENTIAL,或,DIRECT,或,UNDEFINED,SEQUENTIAL=,sequential,查看文件是否为顺序格式,会返回一个字符串,字符串的值为:,YES,或,NO,或,UNKNOWN,Fortran 90,添加的功能,:,POSITION=,position,ACTION=,action,DELIM=,delim,PAD=,pad,查看文件打开时在相应栏所设的字符串的值,或是,UNDEFINED,READ=,read,WRITE=,write,READWRITE=,readwrite,查看文件的读写属性,返回字符串:,YES/NO/UNKNOWN,9-4-4,其他文件运行命令,BACKSPACE(UNIT=number,ERR=,errlabel,IOSTAT=,ios,),把文件的读写位置退回一个记录,(,顺序文件是一行,并且最后的结束有一个记录),ENDFILE(UNIT=number,ERR=,errlabel,IOSTAT=,iostat,),使用这个命令会把目前的读写位置变成文件的结尾,直接文件慎用,REWIND(UNIT=number,ERR=,errlabel,IOSTAT=,iostat,),把文件的读写位置回到文件的开头,CLOSE(UNIT=number,STATUS=string,ERR=,errlabel,&,IOSTAT=,iostat,),把文件关闭。,STATUS=KEEP ORDELETE,可用来保留或删除文件,9,5,二进制文件的操作,二进制文件来作直接读取时,,OPEN,命令中的,recl,字段所设置的整数,n,值的大小会随编译器不同,有不同的定义。例如:,Visual,Fortan,中的默认视为,n*4 bytes,G77,会视为,n bytes.,二进制文件的数据读写不需要格式,二进制文件可节省空间,例,1,,编写程序将打击率存入二进制文件,list.bin,9,5,二进制文件的操作,Recl,的设置要根据输入数据的所必须占用字节的大小,例如,real(8),的浮点数,,recl,需要大于等于,2,数据间无需区分符号和空间,例,从已有文件,list.bin,中查找打击率,不能有格式,数据类型要匹配,9,6,内部文件(,Internal files,),Internal file,:即将输入输出的数据作为字符串存在字符串变量中,例,2,:将字符串(内部文件)中的数据读出赋值给变量,例,3,程序将输入数据暂存在字符串,已判断输入是否正确,不正确则请用户再输入一次,已防止死机,根据数据长度改变字符串内容和输出格式,课本有误,9,7 NAMELIST,Namelist,是将一组相关变量封装在一起,输入、出这组变量时,只要在,write/read,中的,NML,字段赋值要试用哪一个,NAMELIST,就行了,NAMELIST,声明格式:,Namelist,/,nl_name,/va1,val2,var3,声明必须在执行语句之前。,Namelist,输出不能赋值输出格式,,Fortran 90,规定输出首先是符号,&,后面紧跟着,Namelist,的,名字,。接着按顺序输出变量名、等号、内容,变量之间用,空格或逗号隔开,,最后以,/,符号来结束。每个数值内容的输出格式是由编译器自行规定的。,9,7 NAMELIST,例,用,Namelist,读入数据,或以空格间隔,读取,Namelist,的数据时,以,&,和,Namelist,的名字开始,给其中的变量赋值,可以不按顺序,或不完整赋值,重复输入以后一次的为最终值。最后以,/,符号结束。,Namelist,从文件读入时,会自动的从当前位置向下寻找存放,Namelist,的地方。,9,8,文件的应用,例,2,,读入二进制图片文件,并翻转灰度,每个像素使用一个,byte,来保存,共,28,256,种变化。数值,0,代表全黑,,255,代表全白,中间为不同色阶的灰色,作业:,作业,9.2,将班上,6,位学生的学号、中文、英文、数学和社科的成绩写入二进制文件,再从二进制文件中找出平均成绩高于,80,分的同学,并输出此学生的学号及各科成绩。,
展开阅读全文