Le lieu de travail recueille des données sur l'atmosphère et les rayons ultraviolets avec une tarte aux framboises. Si vous souhaitez emprunter les données et les utiliser comme exemple pour dessiner un graphique dans le projet que vous faites actuellement, Puisque des données étranges ont été mélangées au milieu, j'écrirai le code que j'ai écrit qu'il ne peut pas être utilisé à moins qu'il ne soit formaté.
** Obtenez des données toutes les secondes de 0:00 à 23:59:59 à aaaa / mm / jj hh: mm: ss, pression atmosphérique (hPa), température (℃)
**
Parfois, les données de pression atmosphérique avec 10 au début sont mélangées.
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
~ Omis ~
2018/07/12 23:59:58,1006.29,28.66
2018/07/12 23:59:59,1006.28,28.62
** Je veux lire CSV, effectuer le traitement nécessaire et générer un autre nom CSV ** ** -Je n'ai pas besoin de chaque seconde, donc je veux écrire des données toutes les minutes. (Extraire seulement 00 secondes par minute) -Si les données de pression atmosphérique pendant 00 secondes contiennent une valeur telle que 101014.45, je voudrais la changer en 1014.45 et écrire les données.
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();
}
}
}
Nous transmettons trois arguments: le nom du fichier à lire dans le processus, le caractère de recherche et le nom du fichier de sortie. process("20180712.csv", ":00,","output.csv");
❶ Recherchez des lignes en 0 seconde (": 00") à l'aide de Pattern et Matcher ❷ Lorsqu'une ligne contenant 00 secondes est trouvée, divisez-la dans le tableau String (csvArray) avec, (virgule). ❸ Les données de pression atmosphérique (csvArray [1]) sont une fraction, donc convertir du type String en type float
Répéter pour le nombre de lignes du fichier à lire de ❶ à ❻
Matcher peut être créé en passant une chaîne à la méthode Pattern.matcher (). Le résultat du jugement de correspondance est renvoyé comme vrai ou faux.
Pattern pattern = Pattern.compile("U"); //La chaîne de caractères que vous souhaitez rechercher"U"Créer un motif à définir
Matcher matcher = pattern.matcher("AIUEO"); //Chaîne de caractères à rechercher"AIUEO"Créez un matcher qui recherche
matcher.find() //Jugement de match partiel
matcher.lookingAt() //Juger s'il faut correspondre depuis le début
matcher.matches() //Jugement du match parfait
Notez que j'ai utilisé pour la première fois une fonction de calculatrice autre que la calculatrice Windows standard.
Lorsque vous en voulez trop lorsque vous divisez 101014,45 par 10000 101014.45 Mod 10000 = 1014.45
Recommended Posts