1

我正在尝试从 Fortran 90 中的外部文件中读取二维数组(30.7)

READ(*,*)Fname

OPEN(UNIT=10, FILE=Fname, ACTION="READ")

   DO i=1,30

      READ(10,*)(indices(i,j),j=1,7)
  END DO

数据有一些缺失值表示为空白。当我将数据读入 array(,*)(indices(i,j))时,它会分配0.00丢失的数据。如何克服这个问题?下面附上资料。

337.60,220.40,0.00,0.00,200.42,216.61,261.04
323.00,249.20,65.30,0.00,201.93,210.91,309.98
116.80,474.80,0.00,0.00,203.43,215.76,234.93
72.10,505.90,0.00,0.00,204.93,215.72,233.47
148.30,771.70,0.00,0.00,206.44,217.00,239.05
90.70,287.20,0.00,0.00,207.94,215.43,216.85
337.20,334.50,10.20,0.00,209.45,226.85,306.57
142.50,142.80,0.00,0.00,210.95,240.09,240.31
279.10,289.60,51.80,0.00,212.45,227.75,262.30
273.60,337.70,0.00,0.00,213.96,256.86,223.66
332.40,425.60,0.00,0.00,215.46,238.36,237.63
45.70,299.30,0.00,0.00,216.96,223.92,241.41
49.10,529.40,0.00,0.00,218.47,235.81,282.17
185.30,331.80,38.00,0.00,219.97,235.81,309.29
552.90,454.80,0.00,0.00,221.47,224.60,269.09
176.20,441.60,0.00,0.00,222.98,232.44,293.95
170.00, ,0.00, , , ,327.96
200.00, ,0.00, , , ,291.69
241.20,156.00,0.00,0.00,227.49,235.55,278.66
118.00,383.20,3.20,0.00,228.99,269.28,325.31
62.00,189.70,0.00,0.00,230.50,248.73,266.95
400.20,244.20,0.00,0.00,232.00,239.70,271.27
163.70,826.60,0.00,500.00,233.50,245.06,294.98
250.40,236.60,0.00,0.00,235.01,261.72,288.24
51.30,684.20,0.00,0.00,236.51,245.06,237.37
412.50,128.90,0.00,500.00,238.01,245.16,268.66
452.00, , , , , ,314.68
481.00,155.50,0.00,0.00,241.02,278.72,348.44
162.20,201.90,0.00,500.00,242.52,250.36,255.58
171.80,152.00,0.00,500.00,244.03,246.85,339.06
4

3 回答 3

3

在您的 DO 循环之前,为索引数组分配一个唯一值,您知道某些值不会出现在数据集中。例子:

    indices = -99.
    DO J=1,30
        Read(1,*) indices(J,:)
    END DO

读取文件后,索引中的缺失值仍将具有值 -99。然后,您可以计算每列中 -99 的数量。

于 2011-07-20T07:05:34.393 回答
0

namelist 方法可以跳过未提供的值,但它具有非常特殊的格式。否则,如果您想跳过未提供的值并且将空白不解释为零,则必须提供自己的附加处理级别。在数字输入中将空格解释为零是 Fortran 方式。我认为您基本上必须编写自己的解析器。将这些行读入一个字符串,然后通过逗号(或空格?)将它们拆分为子字符串。如果子字符串为空白,则保持值不变——这就是你想要的?否则,使用“内部”读取将字符串中的值读入数字。不是微不足道的,但你想做一些非标准的事情。查看 Fortran 提供的字符串内在函数,它们将使处理更容易。

于 2011-07-18T19:04:43.877 回答
-3

尝试:打开(单位=10,文件=...空白=空白)

不知道它是否有效,但是 blank="zero" 会将您的空格重置为 0 ...假设我的解决方案会做相反的事情;)

于 2015-02-26T21:32:12.283 回答