【发布时间】:2019-10-20 08:09:50
【问题描述】:
我正在使用 Fortran,我需要读取一个包含 3 列的文件。问题是第三列是整数的组合,例如120120101,我需要将每个值分隔在不同的列中。
通常,我手动删除前 2 列,因此文件如下所示:
Info
0120012545
1254875541
0122110000
2254879933
要读取每个值都在不同列中的文件,我可以使用以下 Fortran 子例程:
subroutine readF(imp, m, n)
implicit none
integer :: n,m,i,imp(n,m)
open(unit=100, file='file.txt', status='old', action='read')
do i=2,n
read(100,'(*(i1))') imp(i,1:m)
end do
close(unit=100)
end subroutine readF
我想知道是否可以读取具有以下内容的文件:
IDs Idx Info
ID001 1 125478521111
ID002 1 525478214147
ID003 2 985550004599
ID004 2 000478520002
结果如下:
ID001 1 1 2 5 4 7 8 5 2 1 1 1 1
ID002 1 5 2 5 4 7 8 2 1 4 1 4 7
ID003 2 9 8 5 5 5 0 0 0 4 5 9 9
ID004 2 0 0 0 4 7 8 5 2 0 0 0 2
第 3 列中的值被吐到 m 列中。
第一行是表头,但我不需要,所以我从第二行开始阅读。
我尝试编写使用以下子程序,但没有成功:
subroutine readF(imp, ind, m, n)
implicit none
integer :: n,m,i,imp(n,m),ind(n),chip(n)
open(unit=100, file='file.txt', status='old', action='read')
do i=2,n
read(100,'(i8,i1,*(i1))') ind(i),chip(i),imp(i,1:m)
end do
close(unit=100)
end subroutine readF
有谁知道我如何在不手动删除前两列的情况下读取该文件?
谢谢。
【问题讨论】:
-
"i8" 将尝试读取占用八个字符的整数。也许“a8”和一个字符变量会起作用?
-
我试过了,还是不行。
-
“a8”不起作用,因为第一次迭代是从第一行而不是第二行读取。从 2 开始 i 并不意味着您正在从第 2 行开始阅读。请在我的回答中查看进一步的解释。如果他从第二行开始,“a8”将有效地跳过开头的字符。
标签: fortran gfortran fortran90 fortran77 fortran95