Lesen Sie ein zwei-dimensionales array
Ich versuche zu Lesen ein zwei-dimensionales array (30.7) aus einer externen Datei in Fortran 90 als
READ(*,*)Fname
OPEN(UNIT=10, FILE=Fname, ACTION="READ")
DO i=1,30
READ(10,*)(indices(i,j),j=1,7)
END DO
Daten hat einige fehlende Werte vertreten als leer. Wenn ich lese Daten in ein array (,*)(indices(i,j))
es weist 0.00
für fehlende Daten. Wie kommen über dieses problem? Befestigung der Daten unten.
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
- Gut, was wollen Sie, es zu tun, für die Daten fehlen?
- mögliche Duplikate von Fortran90-Array Lesen leere Werte als null
- Basierend auf der Anzahl der Leerzeichen zählen wird angepasst, zum Beispiel die Spalte 2 hat 3 fehlt dann coult wird 27 und so weiter. Wie kann ich überspringen Sie die Schleife, wenn ich einen fehlenden Wert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bevor Sie Ihre DO-Schleife, weisen Sie einen eindeutigen Wert, um die array-Indizes, einige Wert, dass Sie wissen, nicht auftreten, in der Daten-set. Beispiel:
Die fehlenden Werte in den Indizes wird immer noch der Wert -99 nach dem Lesen der Datei. Sie können dann zählen Sie die Anzahl der -99s in jeder Spalte.
Die namelist-Methode übersprungen werden können, non-Werte angegeben, aber das hat einen ganz bestimmten format. Andernfalls, wenn Sie überspringen möchten, nicht vorgesehen, Werte und Leerzeichen nicht so auszulegen, als zero Sie haben, um Ihre eigenen zusätzlichen Ebene der Verarbeitung. Interpretieren von Leerzeichen als Nullen auf der numerischen Eingabe ist die Fortran-Weg. Ich denke, Sie haben im Grunde schreiben Sie Ihre eigenen parser. Lesen Sie die Zeilen in einen string, dann teilen Sie diese in sub-strings per Kommata (oder Leerzeichen zu?). Wenn der Teil-string leer ist lassen Sie den Wert unverändert -- das ist, was Sie wollen? Ansonsten verwende ein "internen" read zum Lesen der Werte aus dem string in die Zahl. Nicht trivial, aber Sie wollen etwas tun, nicht-standard. Schauen Sie durch die string-Interna mit Fortran, Sie machen die Verarbeitung einfacher.
try: open(unit=10, file=... blank=leer)
Weiß nicht, ob es funktioniert, aber leer="null" setzt Ihre Leerstellen auf 0... nehme meine Lösung tun das Gegenteil 😉
blank
ist ein string, der den richtigen Wert...