读取文本文件作为输入,然后使用2D矩阵中的数据作为输出写入文本文件

时间:2013-02-21 10:21:47

标签: fortran90 fortran77

我是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)组成。 每个切片有5562个元素。

如果有可能,就像元素数的计数方式一样,程序计数乘以5562个元素然后再输出文件(txt)然后总共220个数据片应该是2D数组。

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

1 个答案:

答案 0 :(得分: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