Как прочитать текстовый файл, содержащий строки в массив в Fortran - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь прочитать текстовый файл в ассоциативный массив. Например, '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

Следовательно,я даже не печатаю текстовый файл на экран. После этого я хотел бы назначить их в массив и распечатать массив. Пожалуйста, дайте мне знать, что я могу сделать, чтобы решить эту проблему. Спасибо!

1 Ответ

0 голосов
/ 27 октября 2019

Позвольте мне привести вам пример, в котором содержимое текстового файла записывается в массив динамических символов. Если вы используете 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

Надеюсь, это поможет.

...