Anmerkung: [Java] Verarbeiten Sie die gelesene CSV (extrahieren und ändern Sie sie gemäß den Bedingungen) und geben Sie sie aus

Hintergrund

Der Arbeitsplatz sammelt mit einem Himbeerkuchen Daten über die Atmosphäre und ultraviolette Strahlen. Wenn Sie die Daten ausleihen und als Beispiel verwenden möchten, um ein Diagramm in dem Projekt zu zeichnen, das Sie gerade ausführen, Da seltsame Daten in der Mitte gemischt wurden, schreibe ich den Code auf, den ich geschrieben habe, dass er nur verwendet werden kann, wenn er formatiert ist.

haikei.png

** Solche Daten **

** Daten jede Sekunde von 0:00 bis 23:59:59 bei JJJJ / MM / TT HH: MM: SS, Atmosphärendruck (hPa), Temperatur (℃) ** abrufen Gelegentlich werden die atmosphärischen Druckdaten mit einer 10 am Anfang gemischt.

20180712.csv


2018/07/12 00:00:00,1014.44,28.59
2018/07/12 00:00:01,1014.44,28.59
2018/07/12 00:00:02,1014.46,28.62
2018/07/12 00:00:03,1014.45,28.62
2018/07/12 00:00:04,1014.44,28.59
2018/07/12 00:00:05,1014.45,28.62
2018/07/12 00:00:06,101014.45,28.59
2018/07/12 00:00:07,1014.45,28.62

~ Ausgelassen ~

2018/07/12 23:59:58,1006.29,28.66
2018/07/12 23:59:59,1006.28,28.62

** Was du machen willst **

** Ich möchte CSV lesen, die erforderliche Verarbeitung durchführen und unter einem anderen Namen CSV ausgeben. ** ** ** -Ich brauche nicht jede Sekunde, also möchte ich jede Minute Daten ausschreiben. (Nur 00 Sekunden pro Minute extrahieren) -Wenn die atmosphärischen Druckdaten für 00 Sekunden einen Wert wie 101014.45 enthalten, möchte ich ihn in 1014.45 ändern und die Daten schreiben.

** Abgeschlossener Code **

test.java


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test{

    public static void main(String[] args) {
        process("20180712.csv",  ":00,","output.csv");
    }

    public static void process(String read_file, String searchString, String output_file){

        try(FileReader fr = new FileReader(read_file);BufferedReader br = new BufferedReader(fr);
            FileWriter fw = new FileWriter(output_file);BufferedWriter bw = new BufferedWriter(fw)){

            String line;
            while ((line = br.readLine()) != null) {
                Pattern p = Pattern.compile(searchString);
                Matcher m = p.matcher(line);
                if (m.find()){
                    String[] csvArray;
                    csvArray = line.split(",");
                    String time  = csvArray[0];
                    float press = Float.parseFloat(csvArray[1])%10000;
                    String pressure = String.format("%.2f", press);
                    String temperature  = csvArray[2];
                    String outputLine = String.join(",",time,pressure,temperature);
                    bw.write(outputLine);
                    bw.newLine();
                }else{ 
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

**: Bleistift: Was du machst **

Wir übergeben drei Argumente: den Dateinamen, der in den Prozess eingelesen werden soll, das Suchzeichen und den Namen der Ausgabedatei.     process("20180712.csv", ":00,","output.csv");

❶ Suchen Sie mit Pattern and Matcher in 0 Sekunden (": 00,") nach Zeilen ❷ Wenn eine Zeile mit 00 Sekunden gefunden wird, teilen Sie sie mit (Komma) in das String-Array (csvArray) auf. ❸ Atmosphärendruckdaten (csvArray [1]) sind ein Bruchteil. Konvertieren Sie daher vom String-Typ in den Float-Typ

Wiederholen Sie diesen Vorgang für die Anzahl der Zeilen der Datei, die von ❶ bis ❻ gelesen werden sollen


**: Bleistift: Memo **

** Muster und Matcher für die Suche **

Matcher kann erstellt werden, indem eine Zeichenfolge an die Pattern.matcher () -Methode übergeben wird. Das Ergebnis des Übereinstimmungsurteils wird als wahr oder falsch zurückgegeben.

Pattern pattern = Pattern.compile("U."); //Die Zeichenfolge, nach der Sie suchen möchten"U."Erstellen Sie ein Muster zum Festlegen
Matcher matcher = pattern.matcher("AIUEO"); //Zu durchsuchende Zeichenfolge"AIUEO"Erstellen Sie einen Matcher, nach dem gesucht wird

matcher.find()       //Beurteilung der Teilübereinstimmung
matcher.lookingAt()  //Beurteilung, ob von Anfang an übereinstimmen
matcher.matches()    //Beurteilung der perfekten Übereinstimmung
** Funktionsrechner **

Beachten Sie, dass ich zum ersten Mal eine andere Taschenrechnerfunktion als den Standard-Windows-Taschenrechner verwendet habe. 電卓.png

Wenn Sie zu viel wollen, wenn Sie 101014.45 durch 10000 teilen 101014.45 Mod 10000 = 1014.45 関数電卓.png

Recommended Posts

Anmerkung: [Java] Verarbeiten Sie die gelesene CSV (extrahieren und ändern Sie sie gemäß den Bedingungen) und geben Sie sie aus
[Java] Ändern Sie die Verarbeitung entsprechend der Situation mit dem Strategiemuster
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Lesen Sie die ersten 4 Bytes der Java-Klassendatei und geben Sie CAFEBABE aus
[Java] Wie man Dateien ausgibt und schreibt!
[Java 7] Teilen Sie die Java-Liste und führen Sie den Prozess aus
Ausgabe des Buches "Einführung in Java"
[Java] Färben Sie die Standardausgabe an das Terminal
[Java] Memo zum Schreiben der Quelle
<java> Zip-Datei lesen und direkt in String konvertieren
[Nr. 007] Organisationsverwaltungsbildschirm und Anmeldevorgang bei der Organisation
Schreiben Sie zur Implementierung den Test und codieren Sie den Prozess
[Java] So extrahieren Sie den Dateinamen aus dem Pfad
Lesen von Java Memory Management und GC Viewer
In der Abbildung verstandene Java-Klassen und -Instanzen
[Hinweis] Java Ausgabe der Summe von ungeraden und geraden Elementen
[Java] Ändern Sie Sprache und Gebietsschema mit JVM-Optionen in Englisch
Unterschied zwischen Java und JavaScript (wie man den Durchschnitt findet)
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ändern Sie den Dateinamen und das Ausgabeziel der JavaVM-Fehlerdatei
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
[Java] Verwenden Sie ResolverStyle.LENIENT, um Datum und Uhrzeit gut zu handhaben
Konvertieren Sie Excel mit Java in Blob, speichern Sie es, lesen Sie es aus der Datenbank und geben Sie es als Datei aus!
Lesen Sie die Daten der Shizuoka Prefecture Point Cloud DB mit Java und versuchen Sie, die Baumhöhe zu ermitteln.