Toon posts:

[java] data uit .txt bestanden halen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb een probleem, :'(
Ik ben bezig om data in een database te zetten, het gaat om temperaturen (t2m)van een bepaald station in Nederland.
Hier een voorbeeld van een deel van één .txt bestand waar ik de data uit moet halen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
HIRLAM FORECAST DATA, RUN 2002122012 +00 VALID AT 2002122012
ID     STATION              PMSL    T2M    DDD    FF   N   PR06  PR12  SST
06235  De Kooy              101821. 274.7  168.   2.3 0.7   0.0   0.0 279.8
06280  Eelde                101838. 273.2  201.   1.2 1.0   0.0   0.0 273.8
06260  De Bilt              101878. 272.0  208.   1.2 1.0   0.0   0.0 273.7
06380  Beek                 101913. 277.4  234.   2.9 0.1   0.0   0.0 268.7
06310  Vlissingen           101875. 274.4  219.   3.4 1.0   0.0   0.0 277.4
06240  Schiphol             101862. 272.2  186.   1.2 1.0   0.0   0.0 277.8
06252  K13                  101730. 279.6  208.   3.0 0.0   0.0   0.0 282.3
06253  Auk                  101530. 280.1  250.   6.1 0.7   0.0   0.0 281.7
06321  Euro                 101773. 279.7  221.   4.0 0.7   0.0   0.0 282.9

 
HIRLAM FORECAST DATA, RUN 2002122012 +03 VALID AT 2002122015
ID     STATION              PMSL    T2M    DDD    FF   N   PR06  PR12  SST
06235  De Kooy              101782. 275.2  188.   2.6 1.0   0.0   0.0 279.8
06280  Eelde                101805. 273.1  216.   1.6 1.0   0.0   0.0 273.8
06260  De Bilt              101844. 272.3  226.   1.6 1.0   0.0   0.0 273.7
06380  Beek                 101843. 278.2  249.   3.8 0.9   0.0   0.0 268.7
06310  Vlissingen           101854. 275.5  227.   3.8 1.0   0.0   0.0 277.4
06240  Schiphol             101833. 273.0  200.   1.7 1.0   0.0   0.0 277.8
06252  K13                  101696. 279.7  236.   3.6 1.0   0.0   0.0 282.3
06253  Auk                  101551. 280.4  282.   4.3 0.7   0.0   0.0 281.7
06321  Euro                 101756. 280.8  253.   5.5 1.0   0.0   0.0 282.9

etc..


De .txt bestanden bestaan uit verschillende blokken, elk blok stelt een berekening (run) voor van de weercomputer op een bepaald tijdstip (hierboven voor 12 uur 'smiddags van 20-12-2002 => 2002122012.
De computer berekend het voor (in het eerste blok) +00 uur en in het tweede blok +03 uur vooruit wat de waarden op de verschillende stations gaan worden.

Nou is het probleem dat er erg veel textbestanden zijn met allemaal de datum als naam: bv: 2002122012 of 2002122112 en daarin dus weer de blokken met de verschillende 'runs' en de verschillende tijden dat de computer vooruit kijkt.

Deze data moet in één .txt bestand komen te staan welke dan weer makkelijk om te zetten is naar een database.

het liefst zo voor de temperatuur:
code:
1
2
3
4
5
6
debilt;2002122012+0;272.0;
debilt;2002122012+3;272.3;
debilt;2002122012+6;234,6;
...etc.
debilt;2002122106+0;266,8;
etc..etc


Kortom, er moet data, die in elk bestand op een vaste plek staat, uit het bestand gehaald worden en vervolgens in een nieuw .txt bestand geplakt worden.

ik heb al iets gemaakt in een .bat bestand als:

code:
1
FOR %%1 in (*.txt) do type %%1 >> data.txt


maar deze code plakt alles aan elkaar en maakt geen selectie dus..

Heeft iemand een idee hoe hij dit kan oplossen of wil me opweg helpen?? :?

  • packman
  • Registratie: November 2000
  • Laatst online: 17-12-2024
Wat is nu juist het exacte -java- probleem???

I heard if you play the XP CD backwards, you get a satanic message. Thats nothing compared to what happens if you play it forward, then it installs Windows XP born2oc.be - Facts Of Life


Verwijderd

Topicstarter
nou..
ik weet niet hoe ik dit moet oplossen, ik dacht dat het met java misschien wel op te lossen is....of misschien met mijn DOS codes in het .bat-file waar ik nu mee aan het stuntelen ben :|

maarjah daarom staat ook het vraagteken erachter hé ;) ...ik weet 't niet!!

ik vraag eigenlijk of iemand een idee heeft om mij opweg te helpen om bepaalde stukken tekst uit de .txt-file te halen en deze in een ander file-tje te plaatsen zodat ik de juiste gegevens, want de rest heb ik niet nodig..

[ Voor 30% gewijzigd door Verwijderd op 16-03-2004 16:05 ]


  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 15-05 15:27
Ik denk dat je met een StringTokenizer een heel eind komt.
Verder nog een FileReader en een FileWriter en je bent al bijna klaar! B)

Pwnd


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Als je met batch verder wilt, daar heb je je ten slotte al in verdiept, heb je hier misschien wat aan: http://www.tacktech.com/display.cfm?ttid=307

[ Voor 1% gewijzigd door NetForce1 op 16-03-2004 17:04 . Reden: typo ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 23:16

Pinobigbird

doesn't share food!

Zoiets?
Je kan meerdere .txt bestanden kiezen en dan wordt er voor elke plaats een aparte .txt bestand aangemaakt met daarin de temperaturen van alle runs, zoals
code:
1
2
3
4
5
6
debilt;2002122012+0;272.0;
debilt;2002122012+3;272.3;
debilt;2002122012+6;234,6;
...etc.
debilt;2002122106+0;266,8;
etc..etc

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import java.util.Vector;
import java.io.*;
import javax.swing.*;

public class Weer {

    private static Vector[] plaatsenVector = new Vector[ 9 ];
    // dekooy, eelde, debilt, beek, vlissingen, schiphol, k13, auk, euro;

    public static void main( String args[] ) {
        for( int i = 0; i < plaatsenVector.length; i++ ) {
            plaatsenVector[ i ] = new Vector();
        }
        File[] files = selecteerFiles();
        System.out.println( files.length );
        try{
            for( int file = 0; file < files.length; file++ ) {
                leesFile( files[ file ] );
            }
        } catch( IOException ie ) {}
        try{
            createFiles();
        } catch( IOException ie ) {}
        System.exit( 0 );
    }

    public static File[] selecteerFiles() {
        final JFileChooser fileChooser = new JFileChooser();
        fileChooser.setMultiSelectionEnabled( true );
        fileChooser.setCurrentDirectory( new File(".") );
        fileChooser.setFileFilter( new FileChooseFilter( ".txt", "Tekstbestanden (*.txt)" ) );
        fileChooser.setAcceptAllFileFilterUsed( false );
        int result = fileChooser.showOpenDialog( new JFrame() );
        if ( result == JFileChooser.CANCEL_OPTION ) return null;
        return fileChooser.getSelectedFiles();
    }

    public static void leesFile( File f ) throws IOException {
        long datum = 0;
        int tijd = 0;
        String plaats = "";
        double temperatuur;
        int id = 0;

        StreamTokenizer token = new StreamTokenizer( new InputStreamReader( new FileInputStream( f ) ) );
        while (token.nextToken() != token.TT_EOF) {
            if( token.ttype == token.TT_WORD && token.sval.equals( "HIRLAM" ) ) { // nieuwe run
                for( int i = 0; i< 5; i++ ) token.nextToken(); // negeer de tokens FORECAST DATA , RUN
                datum = (long)token.nval;
                for( int i = 0; i< 2; i++ )token.nextToken(); // negeer de token +
                tijd = (int)token.nval;
                for( int i = 0; i< 14; i++ )token.nextToken(); // negeer de tokens VALID t/m ISS
            }
            else if( token.ttype == token.TT_WORD ) { // nieuwe meting
                if( token.sval.equals( "De" ) ) {
                    token.nextToken();
                    plaats = "de" + token.sval.toLowerCase(); // maakt van "De Bilt" -> "debilt"
                }
                else plaats = token.sval.toLowerCase();
                for( int i = 0; i< 2; i++ )token.nextToken(); // negeer de token voor PMSL-waarde
                temperatuur = token.nval;
                addMeting( id, plaats, datum, tijd, temperatuur );
                System.out.println( id + " " + plaats + ";" + datum + "+" + tijd + ";" + temperatuur + ";" );
            }
            if( token.ttype == token.TT_NUMBER ) {
                id = (int)token.nval;
            }
        }
    }

    public static void addMeting( int id, String plaats, long datum, int tijd, double temperatuur ) {
        switch( id ) {
            case 6235: plaatsenVector[ 0 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6280: plaatsenVector[ 1 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6260: plaatsenVector[ 2 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6380: plaatsenVector[ 3 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6310: plaatsenVector[ 4 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6240: plaatsenVector[ 5 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6252: plaatsenVector[ 6 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6253: plaatsenVector[ 7 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            case 6321: plaatsenVector[ 8 ].add( new Meting( plaats, datum, tijd, temperatuur ) ); break;
            default: return;
        }
    }

    public static void createFiles() throws IOException {
        for( int plaats = 0; plaats < plaatsenVector.length; plaats++ ) {
            Vector v = plaatsenVector[ plaats ];
            PrintWriter out = new PrintWriter( new FileOutputStream( ((Meting)v.get( 0 )).plaats + ".txt" ) );
            for( int meting = 0; meting < v.size(); meting++ ) {
                Meting m = (Meting)v.get( meting );
                out.println( m.plaats + ";" + m.datum + "+" + m.tijd + ";" + m.temperatuur + ";" );
            }
            out.flush();
        }
    }

    protected static class Meting {
        public String plaats;
        public long datum;
        public int tijd;
        public double temperatuur;

        public Meting( String plaats, long datum, int tijd, double temperatuur ) {
            this.plaats = plaats;
            this.datum = datum;
            this.tijd = tijd;
            this.temperatuur = temperatuur;
        }
    }

    protected static class FileChooseFilter extends javax.swing.filechooser.FileFilter {
        String type, omschrijving;
        public FileChooseFilter( String type, String omschrijving) {
            this.type = type;
            this.omschrijving = omschrijving;
        }
        public boolean accept(File file) {
            if( file.isDirectory() )
                return true;
            else{
                if( file.getName().toLowerCase().endsWith( type ) ) return true;
            else
                return false;
            }
        }
        public String getDescription(){
            return omschrijving;
        }
    }
}

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt

Pagina: 1