05-Fortran基础--Fortran文件操作

news2024/11/28 2:37:45

05-Fortran基础--Fortran文件操作

  • 0 引言
  • 1 文件操作有关的关键字介绍
    • 1.1 打开文件(OPEN)
    • 1.2 文件关闭(CLOSE)
    • 1.3 文件查询(INQUIRE)
    • 1.3 文件读写(read/write)
    • 1.4 文件操作符(BACKSPACE/DELETE/FIND/REWIND/FLUSH)
  • 2 结语


0 引言

  利用fortran进行文件的常见操作包括文件读写、文件打开、文件关闭和一些文件有关的关键字。

1 文件操作有关的关键字介绍

1.1 打开文件(OPEN)

  在Fortran中,使用open语句可以打开一个文件,以便进行读取、写入或修改操作。这个语句的一般形式如下:

open(unit=unit_number, file=file_name, status=status_specifier, action=action_specifier, &
     access=access_specifier, iostat=iostat_variable, [other_options])

其中:

  • unit_number 是一个整数变量,用来标识文件。
  • file_name 是一个字符串,表示要打开的文件的路径和名称。
  • status_specifier 指定文件的状态,可以是’old’(打开一个已存在的文件)、‘new’(创建一个新文件)、‘replace’(替换一个已存在的文件)或’unknown’(如果文件不存在则创建一个新文件)。
  • action_specifier 指定文件的操作,可以是’read’(读取文件)、‘write’(写入文件)、‘readwrite’(读写文件)或 ‘scratch’(临时文件)。
  • access_specifier 指定文件的访问权限,可以是 ‘sequential’(顺序访问)或 ‘direct’(直接访问)。
  • iostat_variable 是一个整数变量,用来存储输入/输出操作的状态码。如果省略,可以使用iostat选项来获取状态码。
  • [other_options] 包括其他选项,如form(指定文件格式)、action(指定文件操作)等。

  下面是一个简单的例子,演示了如何使用open语句来打开一个文件以供写入:

program open_example
  implicit none
  integer :: unit_number, i
  character(len=50) :: file_name

  ! 定义文件名和文件单元号
  file_name = 'data.txt'
  unit_number = 10

  ! 打开文件以供写入
  open(unit=unit_number, file=file_name, status='unknown', action='write')

  ! 写入数据到文件
  do i = 1, 10
     write(unit_number, '(I2)') i
  end do

  ! 关闭文件
  close(unit_number)

end program open_example

  执行之后会生成一个文件,文件内容如下:

  这个例子中,程序打开一个名为’data.txt’的文件以供写入,然后写入数字1到10到文件中,最后关闭文件。

1.2 文件关闭(CLOSE)

  在Fortran中,使用close语句可以关闭已经打开的文件。关闭文件后,将释放与该文件相关联的系统资源,并确保文件的内容被正确写入磁盘。close语句的一般形式如下:

close(unit=unit_number, iostat=iostat_variable, [other_options])

其中:
unit_number 是一个整数变量,表示要关闭的文件的单元号。
iostat_variable 是一个整数变量,用来存储输入/输出操作的状态码。如果省略,可以使用iostat选项来获取状态码。
[other_options] 包括其他选项,如status(指定关闭文件的行为)等。

  下面是一个示例,演示了如何使用close语句关闭一个已经打开的文件:

program close_example
  implicit none
  integer :: unit_number, i
  character(len=50) :: file_name

  ! 定义文件名和文件单元号
  file_name = 'data.txt'
  unit_number = 10

  ! 打开文件以供写入
  open(unit=unit_number, file=file_name, status='unknown', action='write')

  ! 写入数据到文件
  do i = 1, 10
     write(unit_number, '(I2)') i
  end do

  ! 关闭文件
  close(unit_number)

end program close_example

  在这个例子中,文件"data.txt"被打开并写入数据后,通过close语句关闭了文件。

1.3 文件查询(INQUIRE)

  在Fortran中,可以使用inquire语句来查询文件的属性,比如文件是否存在、文件大小等信息。inquire语句的一般形式如下:

inquire([inquire_spec], [iostat=iostat_variable], [other_options])

其中:
inquire_spec 是一个可选的查询说明符,用于指定要查询的属性。可以是file(文件名)、unit(文件单元号)或 iostat(指定输入/输出操作的状态码)。
iostat_variable 是一个整数变量,用来存储输入/输出操作的状态码。如果省略,可以使用iostat选项来获取状态码。
[other_options] 包括其他选项,如exist(文件是否存在)、opened(文件是否已打开)等。

  下面是一个示例,演示了如何使用inquire语句查询文件是否存在:

program inquire_example
  implicit none
  character(len=50) :: file_name
  logical :: file_exists

  ! 定义文件名
  file_name = 'data.txt'

  ! 查询文件是否存在
  inquire(file=file_name, exist=file_exists)
  
  ! 查询文件是否打开
  !inquire(file=file_name, opened=file_opened)

  ! 输出结果
  if (file_exists) then
     print*, '文件存在'
  else
     print*, '文件不存在'
  end if

end program inquire_example

  在这个例子中,程序使用inquire语句查询名为’data.txt’的文件是否存在,并根据查询结果输出相应的消息。

1.3 文件读写(read/write)

  在Fortran中,文件的读取和写入操作通常使用read和write语句来完成。下面是它们的详细介绍以及示例:

1.3.1 读取文件 (read)

read(unit_number, [format], [iostat=iostat_variable], [other_options]) [input_list]

unit_number:整数变量,表示要读取数据的文件单元号。
format:可选参数,用于指定输入数据的格式。可以是一个格式化的I/O描述符,例如’(I5)'表示读取一个5位整数。
iostat_variable:可选参数,整数变量,用于存储读取操作的状态码。
[other_options]:其他选项,如err(指定错误处理)等。
[input_list]:读取数据的变量列表,根据format指定的格式进行解析。

示例:

program read_example
  implicit none
  integer :: unit_number, data
  integer :: iostat_var

  ! 打开文件
  unit_number = 10
  open(unit=unit_number, file='data.txt', status='old', action='read')

  ! 从文件读取数据
  read(unit_number, *) data

  ! 输出读取的数据
  print*, '读取的数据:', data

  ! 关闭文件
  close(unit_number)

end program read_example

1.3.2 写入文件 (write)

write(unit_number, [format], [iostat=iostat_variable], [other_options]) [output_list]

unit_number:整数变量,表示要写入数据的文件单元号。
format:可选参数,用于指定输出数据的格式。
iostat_variable:可选参数,整数变量,用于存储写入操作的状态码。
[other_options]:其他选项,如err(指定错误处理)等。
[output_list]:待写入数据的变量列表。

示例:

program write_example
  implicit none
  integer :: unit_number, data
  integer :: iostat_var

  ! 准备要写入的数据
  data = 123

  ! 打开文件
  unit_number = 10
  open(unit=unit_number, file='output.txt', status='replace', action='write')

  ! 将数据写入文件
  write(unit_number, *) data

  ! 关闭文件
  close(unit_number)

end program write_example

  以上示例演示了如何使用read和write语句读取和写入文件数据。在实际使用中,可以根据需要指定格式化的输入/输出描述符,以便正确解析和生成文件数据。

1.4 文件操作符(BACKSPACE/DELETE/FIND/REWIND/FLUSH)

  在Fortran中,BACKSPACE、DELETE、FIND和REWIND是文件操作的关键字,用于对已打开的文件进行定位和控制。下面是它们的使用方法:

1.4.1 BACKSPACE常用: 将文件定位到上一个记录的开头。

BACKSPACE(unit_number)

示例:

BACKSPACE(10)

  这将把文件单位号为 10 的文件定位到上一个记录的开头,也就是返回一行。

1.4.2 DELETE会用: 删除文件。

DELETE(file_name)

示例:

DELETE('data.txt')

  这将删除名为 “data.txt” 的文件。

1.4.3 FIND不常用: 在直接访问文件中搜索记录。

FIND(unit_number, value, iostat=iostat_var)

示例:

FIND(20, 'search_value', iostat=iostat_var)

  这将在文件单位号为 20 的直接访问文件中搜索记录,并将结果存储在 iostat_var 中。

1.4.4 REWIND常用: 将文件定位到开头。

REWIND(unit_number)

示例:

REWIND(30)

  这将把文件单位号为 30 的文件定位到开头。

1.4.5 FLUSH不常用: 将文件的缓冲区内容刷新到磁盘,确保数据被写入文件而不是仅停留在内存中。

FLUSH(unit_number)

1.4.6 REWRITE不常用: 用新的数据替换文件中的现有数据。

REWRITE(unit_number)
REWRITE(20)

  这将重写文件单位号为 20 的文件,将其内容替换为程序中提供的新数据。

2 结语

  这些操作关键字允许在 Fortran 程序中对文件进行更灵活的操作,从而实现更复杂的文件处理需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1668606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习作业4——朴素贝叶斯分类器

目录 一、理论 一个例子: 二、代码 对于代码的解释: 1.fit函数: 2.predict函数: 三、实验结果 原因分析: 一、理论 朴素贝叶斯分类器基于贝叶斯定理进行分类,通过后验概率来判断将新数据归为哪一类。通过利用贝…

设计模式——结构型模式——代理模式(静态代理、动态代理:JDK、CGLIB)

目录 代理模式 代理模式简介 代理模式的分类 代理模式组成 代理模式的优缺点 静态代理 背景前置 编写代码 JDK动态代理 编写代码 使用Arthas分析JDK动态代理底层原理 CGLIB动态代理 编写代码 三种代理的对比 代理模式使用场景 代理模式 代理模式简介 代理模式属…

测试萌新三天速通python基础(二)列表,字符串,元组,字典,遍历,容器,集合,函数

python基础 字符串下标(索引)切片字符串的替换 replace()字符串拆分 split()字符串的连接 join列表 list列表的增删改查列表的反转 reverse()排序列表嵌套元组 tuple 排序 升序降序交换变量字典 dict查询遍历容器集合函数参数函数的嵌套调⽤函数的返回值模块导⼊的⽅法____name…

重发布和路由策略实验(课堂练习)

需求: 将1.1.1.0/24网段(不在OSPF中)重发布到网络中,不允许出现次优路径,实现全网可达。 需求分析: 1、在R1上重发布1.1.1.0/24网段,但是需要过滤192.168.12.0/24和192.168.13.0/24 2、在R2和R3…

【论文阅读笔记】MapReduce: Simplified Data Processing on Large Clusters

文章目录 1 概念2 编程模型3 实现3.1 MapReduce执行流程3.2 master数据结构3.3 容错机制3.3.1 worker故障3.3.2 master故障3.3.3 出现故障时的语义 3.4 存储位置3.5 任务粒度3.6 备用任务 4 扩展技巧4.1 分区函数4.2 顺序保证4.3 Combiner函数4.4 输入和输出的类型4.5 副作用4.…

【超详细】跑通YOLOv8之深度学习环境配置2

环境配置2下载安装内容如下: CUDA:https://developer.nvidia.com/cuda-toolkit-archive cudnn:https://developer.nvidia.com/rdp/cudnn-archive 版本:CUDA11.3 cudnn8.9.7 CUDA安装 简介 CUDA(Compute Unified De…

【superset】基于MySQL的BI数据分析可视化实战案例(已更新)

1.熟悉、梳理、总结下superset可视化分析实战案例知识体系,一直想探索有效可用的可视化分析方案,大多收费或不好用,这里,借此机会总结、更新下。 2.复杂度高,遇到并解决的问题较多,尝试了很多次。 3.欢迎批评指正,跪谢一键三连! 基于MySQL的BI数据分析可视化实战案例文…

免费剪辑的素材资源网站,超高清、可商用、不限速、无版权,迅速有效的解决您的视频剪辑难题!

在数字媒体时代,高质量的剪辑素材已成为视频制作的核心资源。下面为您推荐的优质视频剪辑素材网站,都提供超高清、无限速、无版权、可商用的素材,这些网站将大大提升您的视频制作效率和质量 01. 蛙学府 实用性:★★★★☆ 丰富性&…

容器化Jenkins远程发布java应用(方式一:pipline+ssh)

1.创建pipline工程 2.准备工程Jenkinsfile文件(java目录) 1.文件脚本内容 env.fileName "planetflix-app.jar" env.configName "planetflix_prod" env.remoteDirectory "/data/project/java" env.sourceFile "/…

百度云防护如何开启CC攻击防护

百度云防护的最重要的功能是可以CC攻击防护,针对CC攻击,百度云防护有被动的CC攻击拦截规则,也有主动自定义访问策略拦截。 今天百度云来教大家如何开启百度云防护的CC攻击防御功能。 1.进入防护模板功能-创建模板 2.开启CC攻击防御功能&…

Windows单机部署RocketMQ5.X并与SpringBoot集成

RocketMQ 5.X下载 《RocketMQ 5.X下载》 下载后,解压缩 修改初始内存 修改runserver.cmd(Linux则为runserver.sh) 将下面的-Xms2g -Xmx2g -Xmn1g调小 if %JAVA_MAJOR_VERSION% lss 17 (set "JAVA_OPT%JAVA_OPT% -server -Xms2g -X…

Apache反代理Tomcat项目,分离应用服务器和WEB服务器

项目的原理是使用单独的机器做应用服务器,再用单独的机器做WEB服务器,从网络需要访问我们的应用的话,就会先经过我们的WEB服务器,再到达应用程序,这样子的好处是我们可以保护应用程序的机器位置,同时还可以…

长安汽车:基于云器 Lakehouse 的车联网大数据平台建设

近年来随着智能汽车行业的迅速发展,数据也在呈爆炸式增长。长安大数据平台承接了长安在生产上大部分流量应用及日常生产业务应用。本文将分享长安汽车在车联网场景下大数据平台建设面临的一些挑战和具体落地的实践。 主要内容如下: 1. 背景介绍 2. 长…

渲染农场多少钱一个小时?

​很多第一次准备使用渲染农场的小伙伴不知道渲染农场多少钱一个小时,今天就给大家介绍一下渲染农场多少钱一小时。 现在渲染农场基本都有CPU渲染和GPU渲染,各渲染农场的服务器配置不同,收费也各不相同,不过都是按渲染时长收费&…

C语言学习(八)typedef 虚拟内存 malloc/free

目录 一、typedef 类型重定义(一)使用(二)define和typedef的区别1. 编译处理的阶段不同2. 功能不同 二、虚拟内存(一)虚拟内存分布(二)内存分布1. 静态分配2. 动态分配 三、malloc/f…

如何使用canvas在图片上进行标注,以下代码不起作用,着实被坑到了(文末附完整代码)

今天发现一个有意思的问题&#xff1a; 如何使用canvas在图片上进行如下的标注&#xff0c;以下代码不起作用,如何修改 原始代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name&quo…

理解进程的基本概念

1. 什么是进程 进程&#xff0c;即执行中的程序 进程 程序执行 在计算机中&#xff0c;每一个运行的exe程序&#xff0c;就是一个进程 2.为什么会有进程 早期&#xff0c;操作系统只有一个程序&#xff0c;这样效率是很低的。为了提高CPU的利用率&#xff0c;人们将多个程…

时间复杂度的简单讲解

小伙伴们大家好&#xff0c;我们又见面了&#xff0c;这次我们直接进入正题 时间复杂度的概念 时间复杂度的定义&#xff1a;在计算机科学中&#xff0c; 算法的时间复杂度是一个函数 &#xff0c;它定量描述了该算法的运行时间。一 个算法执行所耗费的时间&#xff0c;从理论…

Hadoop-未授权访问-内置配合命令执行RCE

一、Hadoop常见端口及配置文件 Hadoop中有多种端口&#xff0c;这些端口用于不同的服务和通信。以下是Hadoop中常见的端口以及它们的用途&#xff1a; NameNode Web界面端口 (默认: 9870)NameNode 对客户端服务端口 (默认: 8020)Secondary NameNode Web界面端口 (默认: 9868)…

每日OJ题_贪心算法四⑤_力扣354. 俄罗斯套娃信封问题

目录 力扣354. 俄罗斯套娃信封问题 解析代码1_动态规划&#xff08;超时&#xff09; 解析代码2_重写排序贪心二分 力扣354. 俄罗斯套娃信封问题 354. 俄罗斯套娃信封问题 难度 困难 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0…