www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Fortran" - Ausschneiden
Ausschneiden < Fortran < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Fortran"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Ausschneiden: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:41 Mo 29.03.2010
Autor: Tyskie84

Hallo zusammen,

bin ein absoluter Fortran Neuling, eigentlich generell mit Programmmierspachen. Also ich hab folgendes Problem und wollte erfragen ob dies mit Fortran möglich ist. Im Anhang befindet sich eine kleine txt Datei.

In dieser Datei wurden von 5 Stationen meteorlogische Parameter aufgezeichnet. Ich möchte nun für jede Station eine Datei rausgeschrieben haben sodass ich am ende aus der einen Datei insgesamt 5 habe.

Im Internet habe ich mich mal schlau gemacht wie ein Programm überhaupt aufgebaut ist und so weit bin ich gekommen:

c       PROGRAM



IMPLICIT NONE

c ************************
c *Variablenvereinbarung
c ************************

c STN    = Station number
c WBAN   = Weather Bureau Air Force Navy
c TEMP   = Mean temperature in degrees Fahrenheit
c DEWP   = Mean dew point in degrees Fahrenheit
c SLP    = Mean sea level pressure in millibars
c STP    = Mean station pressure in millibars
c VISIB  = Mean visibility in miles
c WDSP   = Mean wind speed in knots
c MXSPD  = Maximum sustained wind speed in knots
c GUST   = Maximum wind gust in knots
c MAX    = Maximum temperature during the day in Fahrenheit
c MIN    = Minimum temperature during the day in Fahrenheit
c PRCP   = Total precipitation during the day in inches
c SNDP   = Snow depth in inches
c FRSHTT = Indicators see readme.txt

PARAMETER (M=600000)
INTEGER i,M

INTEGER stn(M),wban(M),date(M)
REAL temp(M),dewp(M),slp(M),stp(M),visib(M),wdsp(M)
REAL mxspd(M),gust(M),maxi(M),mini(M),prcp(M),sndp(M)
REAL frshtt(M)
CHARACTER


OPEN(10,file="...../GSMO.txt")
DO i=2,M
  READ(10,'(A6,X,A5,2X,A8,2X,A6,5X,A5,5X,A6,
    > 5X,A6,5X,A5,5X,A5,5X,A5,2X,A4,2X,A5,X,A6,X,A5)')
    > stn(i),wban(i),date(i),temp(i),dewp(i),slp(i)
    > stp(i),visib(i),wdsp(i),mxspd(i),gust(i),maxi(i)
    > mini(i),prcp(i),sndp(i),frshtt(i)
ENDDO
CLOSE(10)

Wenn ich nicht irre dann habe ich zunächst nur die Datei eingelesen. Wie sage ich nun dass er mir nur diese Stationen rausschreiben soll? Achja Die Stationnummer ist in Spalte 1-6.

Irgendwie muss ich ihm ja sagen, wenn die ersten 6 Spalten gleich sind dann soll er eine Datei rausschreiben. Nur es happert bei mir an der Umsetzung.

Ich hoffe jmd kann mir mit meinen bescheidenen, wobei dass schon zu viel gesagt ist, weiterhelfen.

[hut] Gruß

[a]Station


Dateianhänge:
Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
        
Bezug
Ausschneiden: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:54 Mo 29.03.2010
Autor: chrisno

Heute habe ich keine Zeit mehr dafür. Ich kann Dir jetzt nur sagen, dass das auf jeden Fall in Fortran ohne größeren Aufwand lösbar ist.

Bezug
        
Bezug
Ausschneiden: Antwort
Status: (Antwort) fertig Status 
Datum: 11:55 Di 30.03.2010
Autor: chrisno

Hallo,

heutzutage würde ich das mit einem Perl-Skript machen. Wenn Du aber noch weiter mit Fortran arbeiten wirst, ist das sicher ein guter Einstieg.

       PROGRAM SEPERATE_STATIONS

C Autor: .... ausfüllen
C Date: ....
C This tiny Progam reads in the data of .... and writes them into one
C file for each of the five stations.  

IMPLICIT NONE
C das schreibe immer hin, es spart so viel Mühe bei der Fehlersuche
  
c ************************
c *Variablenvereinbarung
c ************************
  
c STN    = Station number
c WBAN   = Weather Bureau Air Force Navy
c TEMP   = Mean temperature in degrees Fahrenheit
c DEWP   = Mean dew point in degrees Fahrenheit
c SLP    = Mean sea level pressure in millibars
c STP    = Mean station pressure in millibars
c VISIB  = Mean visibility in miles
c WDSP   = Mean wind speed in knots
c MXSPD  = Maximum sustained wind speed in knots
c GUST   = Maximum wind gust in knots
c MAX    = Maximum temperature during the day in Fahrenheit
c MIN    = Minimum temperature during the day in Fahrenheit
c PRCP   = Total precipitation during the day in inches
c SNDP   = Snow depth in inches
c FRSHTT = Indicators see readme.txt
  
PARAMETER (M=600000)
   INTEGER i,M

C Wenn Du imer nur eine Zeile liest und direkt wieder wegschreibst,
C benötigst Du nicht die Felder für die Daten
INTEGER stn, wban, date
REAL temp,  dewp, slp, stp,   visib, wdsp
   REAL mxspd, gust, maxi, mini, prcp,  sndp
   REAL frshtt
c   CHARACTER
  

OPEN( 10, file="...../GSMO.txt" )
C Du solltest überlegen, hier auch "read" in die open-Anweisung zu
C schreiben. Du hast natürlich eine Sicherungskopie, aber trotzdem
C rate ich dringend, nur lesend zuzugreifen, wenn Du nicht in diese
C Datei schreiben willst.
        OPEN( 11, "write", file="Station1.txt")
        OPEN( 12, "write", file="Station2.txt")
        OPEN( 13, "write", file="Station3.txt")
        OPEN( 14, "write", file="Station4.txt")
        OPEN( 15, "write", file="Station5.txt")
C Das lässt sich auch noch viel schicker machen, aer wir bleiben erst
C einmal bei den Anfängen. Nun stehen die Dateien zum Schreiben offen.
C Ich empfehle Dir, die Laufzeitfehler abzufangen. Das heißt, auch den
C Parameter err= in allen open, close, read und write Anweisungen zu
C verwenden. Es kostet dreimal soviel Zeit das zu Programmieren. Es
C reduziert die Zeit bei der Fehlersuche auf ein Zehntel.

C Du versuchst vermutlich, mit dem i=2 die erste Zeile zu überspringen.
C Das wird nicht passieren. Es wird bei i = 2 die erste Zeile,
C der Header, eingelesen. Du musst einfach einmal "leer" lesen:
        READ( 10 )
C Wenn Du allerdings neuen Dateien auch mit diesem Header versehen willst,
C dann definiere ein Character-Variable header(51) (selbst nachzählen bitte)
C Dann liest Du ein:
        READ( 10, '(A51)' ) header
C und schreibst den Header in die neuen Dateien
        DO I = 1, 5
          WRITE( 10+I, '(A51)' ) header
        END DO
C Wenn Du nicht mit i=1 anfängst, wirst Du zu wenig Daten einlesen.
C Insgesamt ist das ein mutiges Unterfangen. Ich würde bis EOF einlesen.
C Dann kannst Du bei i nachschauen, wie viele Datensaätze es geworden
C sind.

   DO i = 1, M
     READ(10,'(A6,X,A5,2X,A8,2X,A6,5X,A5,5X,A6,
     +           5X,A6,5X,A5,5X,A5,5X,A5,2X,A4,2X,A5,X,A6,X,A5)')
     +   stn, wban, date, temp, dewp, slp,
     +   stp(i),visib(i),wdsp(i),mxspd(i),gust(i),maxi(i)
     +   mini(i),prcp(i),sndp(i),frshtt(i)
C Hier hast Du noch einiges zu tun. Ich habe mit dem Aufräumen
C angefangen. Hinter maix fehlt noch ein Komma. Das Format zum Lesen ist
C nicht in Ordnung. Du liest nun die Werte als Text (A-Format) ein. Das
C kannst Du so ohne weiters machen, weil Du nicht mit den Werten rechnen
C willst. Du muss nut die Variablen auch als Character deklarieren.
C Ich würde bei Character bleiben.
C Im anderen Fall musst Du das gleiche Format auch in die Write-
C Anweisung schreiben.
C Mein Vorschlag: Führe drei Character-Variablen ein:
C beforestation(..), station(..), afterstation(..)
C Die Längen bestimmst Du bitte selber. Dann komst Du mit
C     READ(10, '(A.., A.., A..)' )
C     +   beforestation, station, afterstation
C aus.
C Ich würde sowiso immer die ganze Zeile in eine Character-Variable
C mit zum Beispiel dem Namen Dataline einelsen.dann mit
C READ( Dataline, Format, err= ) alle weiteren Variablen aus diese Zeile
C auslesen und anschließend noch überprüfen, ob sie sinnvolle Werte
C haben.

C Nun kannst Du auf die Stationen verteilen:
C Wenn Dein Compiler nicht Fortran 90 kann, dann musst Du anstelle von ==
C .EQ. schreiben
          if ( station == "042720" )
             WRITE( 11, '(A.., A.., A..)' )
     +     beforestation, station, afterstation
          elsif ( station == "072010" )
             WRITE( 12, '(A.., A.., A..)' )
     +     beforestation, station, afterstation
C und so weiter.... bis
          else
            WRITE( *,* ) "Diese Station ist nicht vorgesehen"
            WRITE( *,* ) station
   ENDDO
C Nur so aus Spaß, wenn Du mehrere Dateien hast, dann kannst Du sie auch
C so schließen
        DO I = 0, 6
     CLOSE(I)
        END DO
C
C Ich finde es immer hilfreich, noch eine kurze Mitteilung zu bekommen.
        WRITE( *,* ) "Seperate_Stations completed"

So weit erst einmal. Ich habe nicht vor bei mir einen Fortran-Compiler zu installieren. Daher schreibe ich nur as meiner Erfahrnung von vor 20 Jahren.

Bezug
                
Bezug
Ausschneiden: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:36 Mi 31.03.2010
Autor: Tyskie84

Hallo,

vielen Dank für deine sehr ausführlichen Erläuterungen. Ich werde mich heute dran setzen und versuchen alles umzusetzen.

[hut] Gruß

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Fortran"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de