0

我是 FORTRAN90 的真正新手,当然是任何其他编程语言。但是,我需要为我的工作制作一个程序。因此,我要求任何人发表任何评论。提前致谢。

从现在开始,我将解释我的问题。原始数据如下:

15 1r 2 1r 70 22r 2 2r 15 1r 2 1r 8 8r 15 1 3r

这可以用另一种方式再次编写,如下所示;

15 15 2 2 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 2 2 2 15 15 2 2 
8 8 8 8 8 8 8 8 8 15 1 1 1 1

所以上例中的数据元素总数可以统计为48个。原始数据的总数为12,113,640。然后原始数据由 220(z) 个切片组成322(x) x 171(y)。每个切片有 55,062 个元素。

如果可能的话,就像计算元素个数的方式一样,程序计数55062个元素,然后输出文件(txt),那么总共220片数据应该是二维数组。

所以我必须从一个完整的数据文件中提取 220 个切片。而且每个切片中的数据应该是二维数组。

4

1 回答 1

0

它会是这样的——我假设你知道如何从文件中读取行

program main
   character(len=120):: compressed
   character ch
   integer value, rval, repeat, ix, complen

   ! Pretend this is the line read from the file
   compressed = '15 1r 2 1r 70 22r 2 2r 15 1r 2 1r 8 8r 15 1 3r'

   complen = len(trim(compressed))
   ix = 1
   do while (ix .lt. complen)
      ! Skip spaces
      do
         ch = compressed(ix:ix)
         if (ch .ne. ' ') exit
         ix = ix + 1
      end do

      ! Extract the number
      value = 0
      do
         ch = compressed(ix:ix)
         if (ch .ge. '0' .and. ch .le. '9') then
            value = value * 10 + ichar(ch) - ichar('0')
         else
            exit
         end if
         ix = ix + 1
         if (ix .gt. complen) exit
      end do

      ! is it a repeater
      repeat = 1
      if (ch .eq. 'r') then
         ! reduce by 1 since one has already been printed
         repeat = value  - 1
         ix = ix + 1
      else
         rval = value
      end if

      ! assume there won't be more than 100 repeats
      write(*, '(100I3)', advance='no') (rval, ii = 1, repeat)
   end do
   stop
end program
于 2013-03-18T21:17:38.380 回答