读二维数组

时间:2011-07-18 11:18:40

标签: arrays fortran fortran90

我正在尝试从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

数据有一些缺失值表示为空白。当我将数据读入数组(,*)(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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-3)

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

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