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);
}
3 Réponses :
ne serait pas plus simple d'écrire un nouveau constructeur, qui prend une argument BTW Votre constructeur serait appelé avec une chaîne string [] code>, au lieu de collecter les chaînes ensemble dans un format personnalisé à analyser par le constructeur actuel? code> comme ceci:
(J'ai quitté \ t code> intact, tous les autres caractères sont dans la chaîne code> valeur code> ...) p>
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;
}
Comme mentionné, ce n'est pas clair du code, ce qui se passe dans le constructeur 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 code est code code>, mais en supposant qu'il y ait le problème,
(avec zéro direct) dans Int code> DataType: P>
blockQquote> 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 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,
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); code>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) 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) code> fait, merci d'avoir souligné :)Remarque,
code 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à