开发者

Reading a two dimensional array

I'm trying to read a two dimensional array (30.7) from a external file in Fortran 90 as

READ(*,*)Fname

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

   DO i=1,30

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

Data has some missing values represented as blank. When I read data into array (,*)(indices(i,j)),开发者_高级运维 it assigns 0.00 for missing data. How to over come this problem? Attaching the data below.

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


Before your DO loop, assign a unique value to the indices array, some value that you know won't occur in the data set. Example:

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

The missing values in indices will still have the value -99 after reading the file. You can then count the number of -99s in each column.


The namelist method can skip non-provided values, but that has a very particular format. Otherwise if you want to skip non-provided values and have blanks not interpreted as zero you will have to provide your own additional level of processing. Interpreting blanks as zeros on numerical input is the Fortran way. I think that you basically have to write your own parser. Read the lines into a string, then split them into sub-strings via commas (or blanks too?). If the sub-string is blank leave the value unchanged -- that is what you want? Otherwise use an "internal" read to read the values from the string into the number. Not trivial, but you want to do something non-standard. Look through the string intrinsics provided with Fortran, they will make the processing easier.


try: open(unit=10, file=... blank=blank)

Don't know if it works, but blank="zero" resets your blank spaces to 0... supose my solution will do the opposite ;)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜