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 の要素があります。

可能であれば、要素数の数え方と同じように、55,062個の要素を数えて出力ファイル(txt)を作成し、合計220個のデータのスライスを2次元配列にする必要があります。

したがって、1 つのデータ ファイル全体から 220 のスライスを抽出する必要があります。また、データは各スライスで 2D 配列である必要があります。

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 に答える