You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran程序如何识别输入文件空白并按需跳转指定行?

实现Fortran程序筛选特定行的方案

当然可行!这在Fortran的文本处理场景里是完全可以实现的,咱们只需要逐行读取输入文件,根据预设的条件判断是否输出当前行就行。结合你给出的例子,我给你写一个针对性的代码方案:

示例代码

program filter_lines
    implicit none
    character(len=100) :: line
    real :: val1, val2, val3
    real :: first_val1, first_val2, first_val3
    logical :: first_line = .true.
    integer :: ios

    ! 打开输入文件,这里假设文件名为input.txt,可根据实际修改
    open(unit=10, file='input.txt', status='old', action='read')

    ! 逐行读取直到文件末尾
    do
        read(10, '(A)', iostat=ios) line
        if (ios /= 0) exit  ! 读取到文件末尾或出错时退出循环

        ! 解析行中的三个实数,格式不对的行直接跳过
        read(line, *, iostat=ios) val1, val2, val3
        if (ios /= 0) cycle

        if (first_line) then
            ! 第一行特殊处理:保存值并直接输出
            first_val1 = val1
            first_val2 = val2
            first_val3 = val3
            print *, val1, val2, val3
            first_line = .false.
        else
            ! 按你的需求判断是否跳过当前行
            ! 跳过条件:第一个值为4.0,或者与第一行完全相同的行
            if (val1 == 4.0 .or. (val1 == first_val1 .and. val2 == first_val2 .and. val3 == first_val3)) then
                cycle  ! 跳转至下一行,不输出
            else
                print *, val1, val2, val3
            end if
        end if
    end do

    close(10)
end program filter_lines

代码说明

  • 文件读取:用open打开输入文件,unit=10是文件单元号,你可以根据自己的习惯调整;iostat用来捕获读取状态,确保到文件末尾时能正常退出循环。
  • 第一行处理:单独保存第一行的三个数值,方便后续判断重复行。
  • 跳过逻辑:根据你的例子,设置了两个跳过条件:第一个值为4.0的行(对应示例中的第二行),以及和第一行完全相同的行(对应示例中的第四行)。满足任一条件就用cycle跳过当前行,不输出。
  • 浮点数精度提示:如果你的输入数值存在精度误差(比如不是精确的1.0、4.0这类值),建议把直接相等判断改成精度范围内的比较,比如用abs(val1 - 4.0) < 1e-6来替代val1 == 4.0,避免因精度问题导致判断错误。

你可以根据实际需求修改if语句里的判断逻辑——比如如果你的“特定值”是其他列的某个值,或者行内包含某个特定数值,只需要调整条件即可。

内容的提问来源于stack exchange,提问作者Riccardo Tobia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:37:49