如何在Fortran中解析带后续参数值的命令行参数
Fortran解析带值的命令行参数
你已经能通过GET_COMMAND_ARGUMENT()处理简单的开关型参数,现在要实现解析带后续值的参数(比如-p后的路径),可以通过标记后续参数的方式实现,修改后的代码如下:
program silly_app character(len=10) :: arg character(len=256) :: temp_path ! 存储路径,长度按需调整 integer :: i, x logical :: get_path = .false. ! 标记是否需要读取下一个参数作为路径 x = -1 ! 初始化默认值 temp_path = '' do i = 1, command_argument_count() ! 如果处于需要读取路径的状态,直接获取当前参数 if (get_path) then call GET_COMMAND_ARGUMENT(i, temp_path) get_path = .false. ! 重置标记 cycle ! 跳过后续判断,进入下一次循环 endif call GET_COMMAND_ARGUMENT(i, arg) select case (arg) case ('-s', '--SA') x = 0 case ('-f', '--FEWS') x = 1 case ('-p', '--path') ! 检查是否有下一个参数 if (i < command_argument_count()) then get_path = .true. else print *, "Error: -p 参数需要跟随路径值" stop endif end select enddo ! 测试输出结果 print *, "x的值为: ", x if (temp_path /= '') then print *, "读取到的路径为: ", trim(temp_path) endif end program
关键说明:
- 新增
get_path逻辑变量,用来标记是否需要将下一个命令行参数作为路径值读取 - 当解析到
-p或--path时,先检查是否还有后续参数(i < command_argument_count()),避免索引越界导致错误 - 一旦进入读取路径的状态,直接将当前参数赋值给
temp_path,然后重置标记并跳过后续判断 - 路径变量
temp_path的长度可以根据实际需求调整,避免因路径过长被截断
内容的提问来源于stack exchange,提问作者smoff
相关产品推荐
相关产品推荐

