如何在 Fortran 中获取未知长度的命令行参数?

2024-03-05

我想从用于运行程序的命令行读取一些文本字符串。我正在使用内部子例程GET_COMMAND_ARGUMENT在一个基本上是这样的程序中:

program test
character(len=100) :: argument
call GET_COMMAND_ARGUMENT(1,argument)
print*, argument
end program test

这里的问题是,我觉得在编译时设置字符串的最大长度有点危险。某些参数通常是带有路径的文件,因此它们可能会很长。将长度静态设置为 1000 的解决方案听起来像是一个丑陋的解决方法。

Fortran 中是否有一种更优雅的方法来定义一个能够包含其长度仅在运行时才知道的字符链的字符串?


可以使用所谓的延迟长度字符变量。它们的长度不是固定不变的,它们的使用可以在诸如以下的问题中找到:与数据输入相关的一篇 https://stackoverflow.com/q/31084087.

然而,即使使用像这样的延迟长度变量(因为这是语法)

character(len=:), allocatable :: argument
allocate(character(some_length) :: argument)  ! For integer some_length
call GET_COMMAND_ARGUMENT(1,argument)
print*, argument
end

仍然需要担心什么some_length应该。如果我们只选择 100,我们就会回到原来的状态。

我们必须担心这个,因为get_command_argument不接受这样的延迟长度参数并将其分配给所需的长度。那是

character(len=:), allocatable :: argument
call GET_COMMAND_ARGUMENT(1,argument)  ! Will argument be allocated in the subroutine?
print*, argument
end

给出的答案是“不”。

接下来,我们来看看处理这个问题的其他(可选)参数get_command_argument。特别值得一提的是,有一种叫做length:

character(len=:), allocatable :: argument
integer arglen
call GET_COMMAND_ARGUMENT(1,length=arglen)
allocate(character(arglen) :: argument)
call GET_COMMAND_ARGUMENT(1,value=argument)
print*, argument
end

当然,我们可以创建一个包装子例程,该子例程确实采用可分配的延迟长度字符变量并完成所有工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Fortran 中获取未知长度的命令行参数? 的相关文章

  • 如果数组包含一个或多个相同值,则合并数组

    我有一个数组数组 a 1 2 3 3 4 5 6 7 8 8 9 9 10 我想合并包含一个或多个相同值的所有数组 所以 a 1 2 3 4 5 6 7 8 9 10 我正在努力寻找一种简洁的方法来解决这个问题 有任何想法吗 我相信这是正确
  • 出现错误:字符串未被识别为 C# 中的有效日期时间

    出现如下错误 mscorlib dll 中发生类型为 System FormatException 的未处理异常附加信息 字符串未被识别为有效的日期时间 我正在使用这段代码 string datetime DateTime Parse en
  • 正则表达式:如何从字符串中获取单词(C#)

    我的输入由用户发布的字符串组成 我想做的是创建一本包含单词以及它们的使用频率的字典 这意味着我想解析一个字符串 删除所有垃圾 并获取单词列表作为输出 例如 假设输入是 LOLOLOL YOU VE BEEN PWN3D 1einszwei
  • 无法从 XML 获取数组字符串资源

    我的 XML 文件中有一个值列表 我想根据微调器选择来选择这些值 由于某种原因 使用数组字符串作为微调器可以正常工作 这些值将填充到微调器中 无论出于何种原因 我无法获取第二个数组的值来挽救我的生命 它们位于同一个文件中 没有我能找到的错误
  • 数组索引超出范围的表视图

    我正在使用数组从数据库读取数据 目前数组中有 8 个项目 我正在尝试制作一个有节标题的表格 目前我有 4 个部分 并且我已正确设置并且它有效 它也可以在第一次运行时运行 但是当我尝试向后滚动时 我发现索引超出了范围 我正在使用 myarra
  • SQL 更新数据集中的位置

    id1 id2 bool 1 1 F 1 2 F 2 1 F UPDATE table name SET bool T WHERE id1 id2 IN 1 1 2 1 Need work here 所以基本上我想选择条件为 id1 id2
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • 我可以在类变量中添加没有指定值的 PHP 数组键吗?

    我目前正在努力通过IBM 关于 CakePHP 的教程 http www 128 ibm com developerworks edu os dw os php cake1 html 有一次我遇到了这段代码
  • PHP - 递归搜索数组中的键和子键,成功时返回键['subkey]

    因此 我编写了一个函数 该函数可以在数组中深入搜索两个级别以查找键和子键对 基本上是在寻找key subkey 如果找到 则返回key subkey 我正在寻找一种以真正递归的方式执行此操作的方法 并根据需要进行尽可能多的深度搜索 直到到达
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • 为什么 char 数组需要 strcpy 而 char star 不需要 - 在 C 中使用结构

    我对这段代码有一个误解 typedef struct EXP int x char name char lastName 40 XMP main XMP a a name eaaa a lastName strcpy a lastName
  • 过滤任何属性包含值的对象数组

    我想知道根据字符串关键字过滤对象数组的最干净 更好的方法是什么 必须在对象的任何属性中进行搜索 当我打字时lea我想遍历所有对象及其所有属性以返回包含的对象lea 当我打字时italy我想遍历所有对象及其所有属性以返回包含的对象italy
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • 是否可以在 Promise.all 稍后向数组添加 Promise?

    我正在做一个项目 我问自己启动这个项目是否可行Promise all在 Javascript 中 他们确实向数组添加了更多 Promise 的任务 以及它们是否也在运行 const runAsyncFunctions async gt co
  • 为关联数组选择哪种映射类型?学说ODM

    我有一个关于 顺便说一句 真的很棒 Doctrine ODM 的简单问题 假设您有一个类似以下的文档 Document class Test Id public id WHICHTYPE public field array 现在我想存储一
  • 帕斯卡三角形定位

    我编写了一个打印出帕斯卡三角形的Java程序 但是我不知道如何正确定位它 方案1 public class Triangle public static void main System out println nTriangle int
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • java - IBM-IEEE 双精度浮点字节转换

    我需要在 Java 中对字节数组进行 IBM IEEE 浮点转换 我能够使用成功地进行单精度浮点字节的转换http www thecodingforums com threads c code for converting ibm 370
  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • 编译器消息“警告:格式‘%s’需要类型‘char *’,但参数 2 具有类型‘char (*)’”

    我正在尝试运行一个简单的 C 程序 但收到此错误 警告 格式 s 需要类型 char 但参数 2 的类型为 char 20 我在跑步Mac OS X v10 8 https en wikipedia org wiki OS X Mounta

随机推荐