2017-02-14 8 views
0

У меня есть текстовый файл со следующим форматом (11 столбцов и 8 строк)место несоответствие в ссылке на массив при чтении данных из таблицы

Name Chris Kyle Peter Luke Sally (...) 
age  xxxx xxxx xxxx xxxx xxxx 
height   xxxx xxxx xxxx xxxx 
weight   xxxx xxxx xxxx xxxx 
class   xxxx xxxx xxxx xxxx 

В первой колонке (Chris) имеет только данные в первой строке ,

Мне нужно создать программу, чтобы прочитать эту таблицу, это то, что я до сих пор, но я не могу заставить его работать ...

program readtable 

    implicit none 
    integer :: i, j, num_col, num_row 
    double precision, dimension (2) :: a 
    character(14), dimension (1) :: variable 

    num_col = 11 
    num_row = 8 

    open(100,file='SSL.dat',status='old') 
    do j=1, num_row 

     read(100,*) variable(j), (a(i,j), i=1,num_col) 
     print*, variable(j), a(i,j) 

    end do 

    end program 

Когда я запускаю этот кусок кода я получаю несоответствие ранга.

Я хочу прочитать данные в этой таблице, чтобы затем я мог присвоить данные конкретным переменным. Например, если я хочу кое-что сделать с кайлом и Петром, я знаю, что для Кайла а (:, 2) и для Питера а (:, 3)

Вот ошибка, которую я получаю при компиляции с gfortran as 90 код Fortran

   read(100,*) variable(j), (a(i,j),i=1,num_col)) 
             1 
Error: Rank mismatch in array reference at (1) (2/1) 
+0

Пожалуйста, сообщите нам точные сообщения об ошибках, которые вы получаете, и команду, которая их вызывает. –

+0

Скопируйте его в виде текста. Он должен быть доступен для других людей. Вот почему вы не можете поставить изображение прямо в вопрос. Я не буду редактировать его, чтобы сделать изображение видимым, хотя я могу. Вместо этого разместите здесь текст. См. Http://meta.stackoverflow.com/questions/303812/discourage-screenshots-of-code-and-or-errors –

+0

Является ли эта версия ок? –

ответ

1

похоже, вы предполагаете, что делает dimension(n) массив n -мерном. Это неправда! Это делает массив одномерным и имеет форму от 1 до n, то есть (1:n).

Если вы хотите, чтобы объявить двумерный массив с 8 строк и 11 столбцов, вы должны сделать:

double precision, dimension(8,11) :: a 

или, что эквивалентно

double precision :: a(8,11) 

Точно так же, variable должно быть что-то вроде:

character(14), dimension(8) :: variable 

Это не сделает вашу программу полной и функциональной, но исправит проблему, о которой компилятор жалуется. Пожалуйста, держите ваши вопросы узкими.