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.
** 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
** 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.
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();
}
}
}
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
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
Beachten Sie, dass ich zum ersten Mal eine andere Taschenrechnerfunktion als den Standard-Windows-Taschenrechner verwendet habe.
Wenn Sie zu viel wollen, wenn Sie 101014.45 durch 10000 teilen 101014.45 Mod 10000 = 1014.45
Recommended Posts