IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Convertir txt en csv


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Par défaut Convertir txt en csv
    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!!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    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.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Par défaut
    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

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    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.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2010
    Messages : 270
    Par défaut
    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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    val01,val02,val03
    val11,val12,val13
    Donc une virgule (ou un point-virgule) pour chaque colonne, et un retour chariot pour une nouvelle ligne !

    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

    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 "";
        }
    Bonne chance

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    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 : ") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "val01","val02","val03"
    "val11","val12","val13"
    Cela permet à un champs de contenir un séparateur de champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "val,01","val02","val03"
    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 :
    On ne peut plus savoir si la cellule vaut "val,01", ou si c'est deux cellules "val" et "01"...

    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.

    Romain.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Par défaut
    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

Discussions similaires

  1. Convertir un fichier .txt en csv sans ouvrir excel
    Par cecilebzh dans le forum Excel
    Réponses: 3
    Dernier message: 22/07/2010, 18h01
  2. convertir un fichier csv
    Par yohann62_24 dans le forum C
    Réponses: 2
    Dernier message: 10/01/2008, 16h30
  3. convertir txt to jpg
    Par PhRey dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/11/2007, 13h37
  4. Convertir pdf en csv
    Par marielaure2805 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 30/08/2006, 10h39
  5. [C#] Convertir XLS en CSV
    Par MDelah dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/06/2006, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo