Gestion de fichiers .csv

Fermé
TheCorsican Messages postés 1 Date d'inscription mercredi 21 novembre 2018 Statut Membre Dernière intervention 21 novembre 2018 - 21 nov. 2018 à 12:08
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 21 nov. 2018 à 19:30
Bonjour,

Je sui actuellement en train de faire un projet dans lequel je compare une base de données contenant les mêmes données en format Neo4J (NoSQL) et en format MySQL. Je dispose déjà de la base de données sous Neo4J, elle est remplie à partir de fichiers .csv qui ont étés créés pour correspondre à ses tables.
Le schéma relationnel contient des tables qui sont différentes de celles de Neo4J, j'ai donc besoin de modifier les fichiers csv existants pour qu'ils correspondent aux tables MySQL.
J'ai tout d'abord pensé à modifier ça manuellement mais c'est beaucoup trop long.
Quelqu'un aurait il une idée de script java que je puisse utiliser pour faire ça ?
(Concrètement je veux déplacer des colonnes de fichiers .csv dans un nouveau fichier)

Merci d'avance

Configuration: Windows / Chrome 70.0.3538.102
A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
21 nov. 2018 à 15:54
Bonjour,

Est-ce que tu aurais des exemples de fichiers CSV Avant/Après et les schémas de tables correspondant pour que l'on se représente au mieux ce que tu souhaites faire ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié le 21 nov. 2018 à 23:54
Ci-dessous un petit code qui devrait te permettre de copier les colonnes d'un CSV à un autre.

Exemple :

public static void main(String[] args) throws IOException {
    File src1 = new File("C:/test/src1.csv");
    File src2 = new File("C:/test/src2.csv");
    File dest = new File("C:/test/dest.csv");
    Csv.write(dest, //
            Csv.column(src1, 0), // 1A
            Csv.column(src2, 1), // 2B
            Csv.column(src2, 0), // 2A
            Csv.column(src1, 1), // 1B
            Csv.column(src1, 2), // 1C
            Csv.column(src2, 2));// 2C
}
import java.io.*;
import java.util.*;

public final class Csv {
    private Csv() {}

    public static final class Column {
        private final File srcFile;
        private final int srcColumn;

        private Column(File srcFile, int srcColumn) {
            this.srcFile = srcFile.getAbsoluteFile();
            this.srcColumn = srcColumn;
        }
    }

    public static Column column(File srcFile, int srcColumn) {
        return new Column(srcFile, srcColumn);
    }

    public static void write(File dstFile, Column... columns) throws IOException {
        Map<File, Scanner> scanners = new HashMap<>();
        try (PrintWriter pw = new PrintWriter(dstFile)) {
            for (Column column : columns) {
                if (!scanners.containsKey(column.srcFile)) {
                    scanners.put(column.srcFile, new Scanner(column.srcFile));
                }
            }
            while (true) {
                Map<File, String[]> tabs = new HashMap<>();
                boolean hasNext = false;
                for (Map.Entry<File, Scanner> entry : scanners.entrySet()) {
                    Scanner scanner = entry.getValue();
                    if (scanner.hasNext()) {
                        hasNext = true;
                        tabs.put(entry.getKey(), scanner.next().split(";"));
                    }
                }
                if (!hasNext)
                    break;
                for (int i = 0; i < columns.length; i++) {
                    if (i != 0)
                        pw.print(";");
                    Column column = columns[i];
                    String[] tab = tabs.get(column.srcFile);
                    if (tab != null && tab.length > column.srcColumn) {
                        pw.print(tab[column.srcColumn]);
                    }
                }
                pw.println();
            }
        } finally {
            for (Scanner scanner : scanners.values()) {
                scanner.close();
            }
        }
    }
}
0