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

Fortran中如何跳过固定行数,仅读取每第十组数据行?

解决Fortran中读取大型文件每第十组行的问题

你的原代码问题在于:DO循环的步长10只是让循环变量T每次增加10,但每次循环里的三次READ还是会连续读取文件的行,并没有跳过中间的9组数据。比如第一次循环读第1-3行,第二次循环接着读第4-6行,完全没达到“每第十组读一组”的效果。

下面是两种可行的解决方法:

方法一:读完目标组后跳过剩余9组

每次读取完目标的3行数据后,通过一个内部循环跳过接下来的9组(共27行),这样就能精准定位到下一个第十组的起始位置:

IMPLICIT NONE
INTEGER :: T, skip
REAL(8) :: RR, RS, RT

OPEN(UNIT=11, FILE='test.dat', STATUS='UNKNOWN', ACTION='READ')

DO T = 1, 1000, 10
    ! 读取当前目标组的3行数据
    READ(11, *) RR
    READ(11, *) RS
    READ(11, *) RT
    
    ! 这里可以添加对RR/RS/RT的处理逻辑,比如打印、存储等
    PRINT *, "第", T, "组数据:", RR, RS, RT

    ! 跳过接下来的9组数据(每组3行,共27行)
    ! 最后一组不需要跳过,避免超出文件范围
    IF (T /= 1000) THEN
        DO skip = 1, 27
            READ(11, *)  ! 仅读取不存储,实现跳行
        ENDDO
    ENDIF
ENDDO

CLOSE(11)

END PROGRAM TRACE

方法二:带文件末尾错误处理的版本

如果你的文件可能不足1000组,建议添加IOSTAT参数处理文件读取到末尾的情况,避免程序崩溃:

IMPLICIT NONE
INTEGER :: T, skip, iostat
REAL(8) :: RR, RS, RT

OPEN(UNIT=11, FILE='test.dat', STATUS='UNKNOWN', ACTION='READ')

DO T = 1, 1000, 10
    ! 读取目标组,检查是否读取成功
    READ(11, *, IOSTAT=iostat) RR
    IF (iostat /= 0) EXIT  ! 读取失败(比如到文件末尾)则退出循环
    READ(11, *, IOSTAT=iostat) RS
    IF (iostat /= 0) EXIT
    READ(11, *, IOSTAT=iostat) RT
    IF (iostat /= 0) EXIT

    PRINT *, "第", T, "组数据:", RR, RS, RT

    ! 跳过9组,同时检查读取状态
    IF (T /= 1000) THEN
        DO skip = 1, 27
            READ(11, *, IOSTAT=iostat)
            IF (iostat /= 0) EXIT
        ENDDO
        IF (iostat /= 0) EXIT
    ENDIF
ENDDO

CLOSE(11)

END PROGRAM TRACE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:09:35