Bonjour à tous!!
Est-ce que vous savez s'il est possible de convertir un fichier texte txt en fichier csv?
Merci pour votre réponse!!
Bonjour à tous!!
Est-ce que vous savez s'il est possible de convertir un fichier texte txt en fichier csv?
Merci pour votre réponse!!
Bonjour,
Qu'est ce que tu appels "transformé" ? Est-ce que c'est le contenu du fichier qui doit être modifié (auquel cas il faut nous montrer le contenu du fichier txt) ? Ou bien c'est juste renommer le fichier txt en csv ?
Romain.
Concrètement j'ai un utilitaire Java qui me récupère des données dans un fichier format .txt et je souhaite le parser, le convertir en un fichier .csv pour ensuite le convertir en .xls
Quel est le contenu de ton fichier ? Difficile de te dire comment le parser sans savoir la forme qu'il a, et sous quelque forme tu récupères le contenu du fichier texte (String, List<String>, List<String[]>, ... ) ?
Sinon pour écrire un fichier CSV tu peux utiliser cette librairie très pratique : http://opencsv.sourceforge.net
Romain.
Oui je comprends bien ce que tu veux dire!! En fait j'ai un InputStream instancié avec une url et une sortie avec un OutPutStream et je remplis cette sortie avec un buffer. Donc j'ai un fichier texte normal.
Je vais regarder du cote de la librairie opencv
Bonjour !
Un fichier CSV (Comma-separated values) n'est rien d'autre qu'un ... fichier texte !
Tu peux même ouvrir un fichier texte avec ton blocnote tu veras la structure !
Pour un tableau trois colonnes et deux ligne tu as juste à ecrire dans un fichier texte :
Donc une virgule (ou un point-virgule) pour chaque colonne, et un retour chariot pour une nouvelle ligne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 val01,val02,val03 val11,val12,val13
Pour la suite, si tu veux partir d'un CSV vers un XLS, c'est plus complexe,
Je te passe un petit bout de code en esperant que ça t'aide
Bonne chance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; //...// // mon path est le chemin du CSV private String createXlsFromCsv(String path) throws FileNotFoundException, IOException { ArrayList arList = null; ArrayList al = null; String fName = path; String thisLine; int count = 0; FileInputStream fis; fis = new FileInputStream(path); DataInputStream myInput = new DataInputStream(fis); int i = 0; arList = new ArrayList(); while ((thisLine = myInput.readLine()) != null) { al = new ArrayList(); String strar[] = thisLine.split(";"); // mon CSV est formé avec des ";" et pas des "," for (int j = 0; j < strar.length; j++) { al.add(strar[j]); } arList.add(al); i++; } try { HSSFWorkbook hwb = new HSSFWorkbook(); HSSFSheet sheet = hwb.createSheet("OrderImport");//Nom de ta feuille de calcule for (int k = 0; k < arList.size(); k++) { ArrayList ardata = (ArrayList) arList.get(k); HSSFRow row = sheet.createRow((short) 0 + k); for (int p = 0; p < ardata.size(); p++) { HSSFCell cell = row.createCell((short) p); String data = ardata.get(p).toString(); if (data.startsWith("=")) { cell.setCellType(Cell.CELL_TYPE_FORMULA); data = data.replaceAll("\"", ""); data = data.replaceAll("=", ""); cell.setCellFormula(data); } else if (data.startsWith("\"")) { data = data.replaceAll("\"", ""); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellValue(data); } else { data = data.replaceAll("\"", ""); cell.setCellType(Cell.CELL_TYPE_NUMERIC); if (dateExiste(data)) { //fonction perso pour savoir si la date existe afin de la mettre au format date, pas forcement utile pour tout le monde, si tu en as vraiment besoin n'hesite pas a demander //System.out.println("isDate : " + this.getDate(data).toString()); cell.setCellValue(this.getDate(data)); } else { cell.setCellValue(data); } } //*/ // cell.setCellValue(ardata.get(p).toString()); } } FileOutputStream fileOut = new FileOutputStream(path + ".xls"); hwb.write(fileOut); fileOut.close(); System.out.println("Your excel file has been generated"); } catch (Exception ex) { ex.printStackTrace(); } return ""; }
Bonjour,
Un fichier CSV ne contient pas qu'un séparateur de champs (souvent une "," ou un ";") mais aussi un délimiteur de champ (souvent une double quote : ") :
Cela permet à un champs de contenir un séparateur de champ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 "val01","val02","val03" "val11","val12","val13"
La virgule étant entre des quotes dans "val,01", elle n'est donc pas considérée comme un séparateur de champ. Alors que si tu omets les délimiteurs de champs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part "val,01","val02","val03"
On ne peut plus savoir si la cellule vaut "val,01", ou si c'est deux cellules "val" et "01"...
Code : Sélectionner tout - Visualiser dans une fenêtre à part val,01,val02,val03
C'est donc un peu plus complexe que ce que tu décris (il y a aussi le cas où un champ contient un délimiteur de champ, ...). Je te laisse lire la RFC sur les fichiers CSV si ça t'intéresse.
Du coup pour séparer les champs d'un fichier CSV c'est un peu plus complexe qu'un simple :
C'est pour ça que je conseil souvent d'utiliser la librairie opencsv qui gère très bien toutes ces problématiques.
Code : Sélectionner tout - Visualiser dans une fenêtre à part thisLine.split(";")
Romain.
Effectivement,
Pour expliquer quelque chose, je préfère utiliser l'exemple le plus simple
(Par contre je prend la RFC, c'est toujours intéressant)
Merci pour le complément d'info![]()
Partager