Сложность чтения двухмерной символьной переменной из файла netcdf в фортране - PullRequest
0 голосов
/ 05 июля 2018

У меня есть следующий код Fortran для чтения переменной двумерного массива символов:

program read_metar_station_from_rec
   use netcdf
   implicit none

  ! This is the name of the data file we will create.
   character (len = *), parameter :: FILE_NAME = "metar.nc"

   character (len = *), parameter :: STA_NAME = "stationName"
   integer, dimension(nf90_max_var_dims) :: dimIDs
   integer :: ncid
   integer :: nRecords,maxStaNamLen
   integer :: station_varid
   integer :: i,j
   character, allocatable :: stations(:,:)

  ! Create the netCDF file. The nf90_clobber parameter tells netCDF to
  ! overwrite this file, if it already exists.
  ! Open the file. 
  call check( nf90_open(FILE_NAME, nf90_nowrite, ncid) )

  ! Get the varid of stationName.
  call check( nf90_inq_varid(ncid, STA_NAME, station_varid) )

  ! Get dimensions of stationName.
  call check( nf90_inquire_variable(ncid, station_varid, dimids = dimIDs))
  call check( nf90_Inquire_Dimension(ncid, dimIDs(1), len = maxStaNamLen))
  call check( nf90_Inquire_Dimension(ncid, dimIDs(2), len = nRecords) )

  allocate(stations(maxStaNamLen,nRecords))
  call check( nf90_get_var(ncid, station_varid, stations) )
  do i=1,maxStaNamLen
    do j=1,100
        print *, stations(i,j)
    enddo
  enddo
  ! Close the file. This frees up any internal netCDF resources
  ! associated with the file, and flushes any buffers.
  call check( nf90_close(ncid) )

  print *, "*** SUCCESS reading example file metar.nc! "

contains
  subroutine check(status)
    integer, intent ( in) :: status

    if(status /= nf90_noerr) then 
      print *, trim(nf90_strerror(status))
      stop "Stopped"
    end if
  end subroutine check  
end program read_metar_station_from_rec

Проблема, с которой я сталкиваюсь, заключается в том, что, если я пытаюсь распечатать первые 5 записей, то вижу только 5 символов, как показано на рисунке ниже:

program output Если я увеличу количество записей, то увижу те же 5 символов, но между ними будет больше пустых строк. Фактические записи переменной stationName выглядят так в Python: variable to be read

Я прилагаю ссылку на данные, которые я пытаюсь прочитать: netcdf файл

Пожалуйста, дайте мне знать, если вопрос не ясен.

...