Mémo: [Java] Traiter le csv lu (extraire et modifier selon les conditions) et sortir

Contexte

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é.

haikei.png

** Ces données **

** 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

** Ce que vous voulez faire **

** 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.

** Code complété **

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();
        }
    }
}

**: crayon: ce que vous faites **

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 ❶ à ❻


**: crayon: mémo **

** Motif et correspondance utilisés pour la recherche **

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
** Calculateur de fonctions **

Notez que j'ai utilisé pour la première fois une fonction de calculatrice autre que la calculatrice Windows standard. 電卓.png

Lorsque vous en voulez trop lorsque vous divisez 101014,45 par 10000 101014.45 Mod 10000 = 1014.45 関数電卓.png

Recommended Posts

Mémo: [Java] Traiter le csv lu (extraire et modifier selon les conditions) et sortir
[Java] Modifier le traitement en fonction de la situation avec le modèle de stratégie
J'ai essayé de lire et de sortir CSV avec Outsystems
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
[Java] Comment sortir et écrire des fichiers!
[Java 7] Divisez la liste Java et exécutez le processus
Sortie du livre "Introduction à Java"
[Java] Colorez la sortie standard vers le terminal
[Java] Mémo sur la façon d'écrire la source
<java> Lire le fichier Zip et le convertir directement en chaîne
[No.007] Écran de gestion de l'organisation et processus de connexion à l'organisation
Pour implémenter, écrivez le test puis codez le processus
[Java] Comment extraire le nom du fichier du chemin
Comment lire la gestion de la mémoire Java et GC Viewer
Classes et instances Java comprises dans la figure
[Note] Sortie Java de la somme des éléments pairs et impairs
[Java] Changez la langue et les paramètres régionaux en anglais avec les options JVM
Différence entre Java et JavaScript (comment trouver la moyenne)
Commande pour vérifier le nombre et l'état des threads Java
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
Modifier le nom de fichier et la destination de sortie du fichier d'erreur JavaVM
Corrigez le code de caractère en Java et lisez à partir de l'URL
[Java] Utilisez ResolverStyle.LENIENT pour bien gérer la date et l'heure
Convertissez Excel en Blob avec java, enregistrez-le, lisez-le à partir de DB et exportez-le sous forme de fichier!
Lisez les données de Shizuoka Prefecture Point Cloud DB avec Java et essayez de détecter la hauteur de l'arbre.