我是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数组。
答案 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