Как прочитать конкретный столбец из matrix-textfile?не читая всю строку? - PullRequest
1 голос
/ 02 мая 2019

У меня есть текстовый файл, включающий тысячи строк, и каждая строка имеет 899 значений / столбцов, разделенных ';' (но я могу изменить разделение при необходимости)

Есть ли способ прочитать определенный столбец (я хочу сказать код, который (для чтения icolumn)) без чтения всей строки в переменные?

Итак, что я знаю: читать (единица, *) a, b, c, d, e, ... (899 раз это не круто) в противном случае я бы поместил все эти значения в массив. И после того, как я смог прочитать мой столбец с помощью: array (i, icolumn)

Я бы хотел прямой путь.

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Если вы знаете, что число находится в символе 165, тогда вы просто используете дескриптор t или tr или x, чтобы переместиться туда и прочитаете число

read(unit,'(t165,f12.0)' array(whatever)

, если вам нужно поставитьчисло 165 в строке формата вы можете использовать эта функция .

0 голосов
/ 02 мая 2019

Мой файл данных testdata.dat выглядит так:

2.75420e+002;2.75327e+002;2.75281e+002;2.75178e+002;2.75052e+002;2.74908e+002;2.74847e+002;2.74761e+002;2.74689e+002;2.74497e+002
2.75420e+002;2.75327e+002;2.75281e+002;3.75178e+002;2.75052e+002;2.74908e+002;2.74847e+002;2.74761e+002;2.74689e+002;2.74497e+002
2.75420e+002;2.75327e+002;2.75281e+002;4.75178e+002;2.75052e+002;2.74908e+002;2.74847e+002;2.74761e+002;2.74689e+002;2.74497e+002

То есть 10 значений на строку и 3 строки, и обратите внимание, как я изменил значения четвертого столбца по сравнению с вашими исходными данными.

Моя программа для чтения запрашивает у пользователя следующую колонку:

program readspeccol

integer :: readcol, i,j
double precision :: a(3)   ! 3 = number of lines in file
character(len=1) :: junk


print *,'input column:'
read(5,*) readcol

open(unit=15, file='testdata.dat')

do i = 1, 3
  read(15,'(10(es12.5,1a))') (a(i),junk, j=1,readcol)
  ! 10 = number of values in line
enddo


print *, a


end program readspeccol

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

$>  ./a.out
 input column:
4
   275.17800000000000        375.17800000000000        475.17800000000000  

Эта программа может быть улучшена, но я думаю, что это в основном то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...