-1
votes

Java: importer un problème de CSV avec le seuil de zéro

J'essaie d'importer un fichier CSV, mais des zéros de premier plan me font de problème.

Structure de CSV: P>

private static List<Code> readCodesFromCSV(String fileName) {
        List<Code> codes = new ArrayList<>();
        Path pathToFile = Paths.get(fileName);

        // create an instance of BufferedReader
        // using try with resource, Java 7 feature to close resources
        try (BufferedReader br = Files.newBufferedReader(pathToFile)) {

            // read the first line from the text file
            String line = br.readLine();

            // loop until all lines are read
            while (line != null) {

                // use string.split to load a string array with the values from
                // each line of
                // the file, using a comma as the delimiter
                String[] attributes = line.split(",");

                Code code = createCode(attributes);

                // adding book into ArrayList
                codes.add(code);

                // read next line before looping
                // if end of file reached, line would be null
                line = br.readLine();
            }

        } catch (IOException ioe) {
            ioe.printStackTrace();
        }

        return codes;
    }

    private static Code createCode(String[] metadata) {
        String code = "\"\t" + metadata[0] + "\"" + "\"\t" + metadata[1] + "\"" + "\"\t" + metadata[2] + "\"";
        //String code = metadata[0] + metadata[1] + metadata[2];;


        // create and return code of this metadata
        return new Code(code);
    }


6 commentaires

La logique la plus simple sera lue le fichier avec option readline, sautez les deux premières lignes. Obtenez le contenu, remplacez le tuyau (|), puis remplacez l'espace.


Où obtenez-vous des valeurs sans zéros? Dans les codes? Dans quel type de données ils sont stockés, si son stockage en tant que type de données numéroté - int / flotter / double, il ne commencera jamais par zéro, alors probablement seul seul sera de le stocker en tant que chaîne afin que cette question soit, qu'est-ce qui fait ce Code de code = Crééecode (attributs);


Votre code ne perd pas les zéros. Je suis à peu près sûr qu'il n'y a pas de zéros dans le fichier CSV. Pouvez-vous vérifier son contenu dans l'éditeur de texte?


@xxxvodnikxxxx La réponse à votre question est juste ci-dessous, où cette fonction est spécifiée. Cependant, cela conduit à une autre question, quel est le nouveau code (code) ? (Analysant les entiers?) En outre, un échantillon de la CSV réelle serait utile au lieu d'être / en plus du tableau séparé par des tuyaux ci-dessus, y compris pour clarté que le CSV a réellement le premier 0s.


@Wbt Hey! Merci, je l'ai complètement manqué, oui, alors la bonne question est ce que nouveau code (code) fait, merci d'avoir souligné :)


Remarque, code n'est pas la classe JDK standard, ni in Java 8 ni in Java 7 , donc son code personnalisé, alors probablement le problème est venu de là


3 Réponses :


2
votes

ne serait pas plus simple d'écrire un nouveau constructeur, qui prend une argument string [] , au lieu de collecter les chaînes ensemble dans un format personnalisé à analyser par le constructeur actuel?

BTW Votre constructeur serait appelé avec une chaîne comme ceci:

(J'ai quitté \ t intact, tous les autres caractères sont dans la chaîne valeur ...) xxx


0 commentaires

1
votes

Pourquoi ne pas simplement remplacer votre code de données de code avec une chaîne et une fois la liste correcte des codes de chaque ligne, analysez ou convertissez-la à tout ce que vous voulez de là.

private static List<String> readCodesFromCSV(String fileName) throws IOException {
        List<String> codes = new ArrayList<>();
        Path pathToFile = Paths.get(fileName);

        // create an instance of BufferedReader
        // using try with resource, Java 7 feature to close resources
        try (BufferedReader br = Files.newBufferedReader(pathToFile)) {

            // read the first line from the text file
            String line = br.readLine();

            // loop until all lines are read
            while (line != null) {

                // use string.split to load a string array with the values from
                // each line of
                // the file, using a comma as the delimiter
                String[] attributes = line.split(",");

                String code = createCode(attributes);

                // adding book into ArrayList
                codes.add(code);

                // read next line before looping
                // if end of file reached, line would be null
                line = br.readLine();
            }

        } catch (IOException ioe) {
            ioe.printStackTrace();
        }

        return codes;
    }

    private static String createCode(String[] metadata) {
        String code = metadata[0] + metadata[1] + metadata[2];
        return code;
    }


0 commentaires

0
votes

Comme mentionné, ce n'est pas clair du code, ce qui se passe dans le constructeur code code>, mais en supposant qu'il y ait le problème,

dans des valeurs d'analyse avec Zeroes principaux forts> à certains types de données numérotés, vérifiez l'exemple de ci-dessous d'analyse d'analyse (avec zéro direct) dans Int code> DataType: P> blockQquote>

code est prise de chaîne code> avec des valeurs avec des zéros de pointe et analyse dans la chaîne avec séparateur code>, deuxième méthode analysez le même tableau dans INT par INTEGER.PARSINTINT () P>

INPUT: 
00101,00021,0589654,00101,00022,

check, its parsed with leading zeros: 
00101;00021;0589654;00101;00022

check, zeros are gone (because integer as datatype):
101, 21, 589654, 101, 22, 


0 commentaires