integer - 当输入文件既有整数又有文本时,如何在fortran90中正确读取整数?
问题描述
这是我的数据文件a.txt
01 12 00 10 Nothing to do
为了清楚起见,让我用 * 标记空格01*12**00*10**Nothing*to*do
。
我正在尝试用 fortran90 代码阅读它
implicit none
integer :: a,b,c,d
character(len=16) :: ch
print*,"Case1"
open(unit=10,file="a.txt", form="formatted")
read(10,*)a,b,c,d,ch
write(*,"(4(i2.2,1x),a16)")a,b,c,d,ch
close(10)
print*,"Case2"
open(unit=10,file="a.txt", form="formatted")
read(10,"(4i2,a16)")a,b,c,d,ch
write(*,"(4(i2.2,1x),a16)")a,b,c,d,ch
close(10)
print*,"Case3"
open(unit=10,file="a.txt", form="formatted")
read(10,"(4(i2,1x),a16)")a,b,c,d,ch
write(*,"(4(i2.2,1x),a16)")a,b,c,d,ch
close(10)
end
这是输出
Case1
01 12 00 10 Nothing
Case2
01 01 02 00 0 10 Nothing to
Case3
01 12 00 01 Nothing to do
如您所见,当我没有指定数据类型(Case1)时,整数被正确读取,但字符未被正确读取。当我将它们指定为整数(Case2)时,前导0
被忽略,每个数字都被认为给出了错误的字符串。当我还将空格指定为1x
(Case3)时,前两个整数被正确读取,但由于有两个空格,它无法拾取第三个整数。由于不可能总是知道给定文件中的所有空格,因此这种方法也不是很实用。
如何正确读取这些数据?
我得到了与gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
,gcc version 8.2.0 (GCC)
和相同的结果ifort version 19.0.3.199
。
编辑
如果输入仅包含整数,则可以使用在 Fortran 中读取具有未知界限的行中的整数序列中描述的方法
implicit none
integer :: nums(4)
character(len=30) :: ch, ch1
open(unit=10,file="a.txt", form="formatted")
read(10,"(a)")ch
read(ch,*) nums,ch1
write(*,"(a)")ch
write(*,"(4(i2.2,1x),a16)")nums,ch1
close(10)
end
我们回到案例1。
01 12 00 10 Nothing to do
01 12 00 10 Nothing
解决方案
推荐阅读
- java - Java+Kotlin Android 项目中 Kotlin 文件中未解决的引用错误
- android - 使用 FileProvider 使用相机捕获图像,如何存储 uri
- java - How do assert one list in another list with same order
- virtualscroll - ionic 4虚拟滚动不起作用
- python - flask_restful 导入资源错误
- watson-conversation - 如何通过 Watson Assistant API 动态检索响应类型
- angular - 嵌套 in-memory-web-api 即更长的 uri
- vba - VBA:在不同的桌面 UI 比例下工作会导致不需要的自动缩放
- javascript - 谷歌地图使用 PHP、MySQL 显示错误的经度值
- c++ - 有没有办法用 AVX2 编写 _mm256_shldi_epi8(a,b,1) ?(向量之间每 8 位元素移位一位)