fortran - 如何将包含字符串的文本文件读入Fortran中的数组
问题描述
我正在尝试将文本文件读入关联数组。例如,“text.txt”包含
1. ABC
2. XYZ
我想阅读这个文本文件并将它们Array[0]
打印1. ABC
出来Array[1]
2. XYZ
我总共有 6 行输入!
这是我现在拥有的
program readText
OPEN(1,FILE='text.txt')
READ(1, *) A ,B, C, D, E, F
WRITE (*, *) A,B,C,D, E ,F
CLOSE(1)
end program readText
在此之后我得到
Error termination. Backtrace:
#0 0x10bde99ac
#1 0x10bdea645
#2 0x10bdeadd9
#3 0x10bfb3ecb
#4 0x10bfacab6
#5 0x10bfae509
#6 0x10bdddc82
#7 0x10bddde78
因此,我什至没有将文本文件打印到屏幕上。在此之后,我想将它们分配到一个数组中并打印该数组。请让我知道我能做些什么来解决这个问题。谢谢!
解决方案
让我为您提供一个示例,其中将文本文件的内容写入动态字符数组。如果您使用 FORTRAN,那么我强烈建议您使用显式变量声明。这可以通过命令强制
implicit none
否则你必须关心 FORTRAN 的隐式变量定义,可以在这里找到:
以 I .. N
INTEGER
开头的变量是 以其他字母开头的变量是REAL
将输入文件扩展text.txt
为 6 行:
1. ABC
2. XYZ
3. FOO
4. BAR
5. BYE
6. CKE
请使用此程序创建和填充字符数组并将其打印到标准输出:
program readText
implicit none
integer :: FID = 1
character*256 :: CTMP
! 1. Assuming that no line of text.txt contains more than 256 characters
character*256, allocatable :: MY_ARRAY(:)
integer :: I = 0, IERR = 0, NUM_LINES = 0
open(unit=FID,file='text.txt')
! 2. Get number of lines
do while (IERR == 0)
NUM_LINES = NUM_LINES + 1
read(FID,*,iostat=IERR) CTMP
end do
NUM_LINES = NUM_LINES - 1
write(*,'(A,I0)') "Number of lines = ", NUM_LINES
! 3. Allocate array of strings
allocate(MY_ARRAY(NUM_LINES))
! 4. Read the file content
rewind(FID)
do I = 1, NUM_LINES
read(FID,'(A)') MY_ARRAY(I)
end do
! 5. Print array to standard output
do I = 1,size(MY_ARRAY,1)
write(*,*) trim(MY_ARRAY(I))
end do
deallocate(MY_ARRAY)
close(FID)
end program readText
输出如下所示:
Number of lines = 6
1. ABC
2. XYZ
3. FOO
4. BAR
5. BYE
6. CKE
希望能帮助到你。
推荐阅读
- php - 带有 Slim Framework(v4) 的正文请求返回 null
- reactjs - React 实用教程中的比较作业
- php - PHPUnit 5.7.23 中为 foreach() 提供的参数无效
- javascript - 如何从具有组的用户列表中创建具有地址字符串的组?
- ios - 设置单元格的更好方法
- javascript - PHP 驱动的选择函数
- python - 使用 Tensorflow 提高 Iris ML 模型的准确性
- scala - Spark中序列化的概述是什么
- pandas - 两个数据帧之间的百分比变化
- go - 如何通过使用 gocelery 模块设置 ETA 来安排任务?