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

Entrée/Sortie Java Discussion :

Fichiers CSV et Java


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut Fichiers CSV et Java
    Bonjour à tous,

    Je suis actuellement en stage pour ma première année de bts sio et je dois réaliser une application java étant donné que pendant l'année scolaire nous avons étudié java. Je débute et donc nous n'avons pas tout vu en cours j'ai donc quelques soucis c'est pour cela que je fais appel à vous.

    Mon application doit faire la chose suivante :
    -Téléchargement d'un fichier CSV (liste d'article d'un fournisseur) sur un ftp
    -Lecture et récupération de certaines lignes (on repère grâce aux ref)
    -Dans ces lignes on récupère que certaines informations (je pensais stocker le tout dans un autre tableau)
    -Une fois les informations qui nous intéressent sont récupérées, création d’un nouveau fichier CSV et on écrit dedans toutes les informations.

    En cherchant sur le net je suis tombé sur un tuto du site : http://thierry-leriche-dessirier.dev.../csv-avec-java
    J’ai adapté le tuto pour qu’il réponde à mes exigences (enfin je pense avoir réussi, n’étant pas un expert ^^’ ). Mais maintenant j’ai quelques soucis pour faire « l’algorithme » décrit ci-dessus.
    J’ai une classe qui me fait la connexion au ftp, télécharge le fichier mais pour l’exploiter je m’y perds un peu car il y a beaucoup de fichier dans le tuto (l’habitude en cours on a notre code + la classe toute belle toute simple ça change !).

    Je comptais dans mon idée de base tout stocker dans un tableau puis récupérer ce qui m’intéresse pour le mettre dans un autre mais dans les méthodes fournies par le tuto il n’y a pas de tableau mais des « données mapées » chose que je ne connaissais pas avant et j’ai du mal avec ça… J’aimerais si possible avoir des exemples pour utiliser ces méthodes.

    Pour ceux qui connaissent le tuto j’ai créé un objet CsvFile12, le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    File file;
    file = CsvFileHelper.getResource(leChemin+leFichier);	    //leChemin et leFichier amène à mon fichier que je dois exploiter
    CsvFile12 csvFile = new CsvFile12(file);


    Voilà excusez moi pour mon niveau faible mais si vous pouvez me débloquer ça serait super ! Et je m’excuse pour la longueur du post.

    Merci d’avance pour vos réponses !

  2. #2
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    796
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 796
    Points : 1 686
    Points
    1 686
    Par défaut Complément
    Un petit exemple mais je suis pas sur : (rien ne vaux de tester)

    Pour un csv du genre :
    id;code;libelle
    101;F;France
    102;UK;Royaume Unis
    103;D;Allemagne
    104;I;Italie
    105;US;Etat-Unis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    csvFile.getMappedData().get(0).get("id") // doit te retourner 101   
    csvFile.getMappedData().get(2).get("libelle") // doit te retourner Allemagne
    Vu que tu auras besoin d'une itération le code à utiliser sera du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0;i < csvFile.getMappedData().size();i++){
      Map<String , String> ligne =csvFile.getMappedData().get(i);
      System.out.println( ligne.get("code") ); // ici affichage des codes
    }
    A dispo,
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    J'ai moi même utilisé ce tuto il n'y a pas très longtemps et pour moi ça marche alors je me permets de poster ce que j'ai:

    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
    public class CsvFileReader {
     
        //<editor-fold defaultstate="collapsed" desc="Variables">
    	private static final String FILE_NAME = "test.csv";
    	private File file;
            private char SEPARATOR = ',';
            private List<String> lines;
     
            /*Chaque objet de cette liste contient toutes les informations que t'as
            récupéré pour une ligne*/
            private List<maClasse>data;
     
        //</editor-fold>
     
     
     
        //<editor-fold defaultstate="collapsed" desc="Constructeurs">
     
        public CsvFileReader() {
            this.file=new File(FILE_NAME);
            init();
        }
     
     
        public CsvFileReader(File file) {
            if(file!=null)
                 this.file = file;
            else
                 this.file=new File(FILE_NAME);
     
            init();
        }
     
        private void init(){
            /*Toutes les lignes du fichier sont stockées dans l'objet lines*/
            lines = readFile(file);
            /*On supprime les entetes*/
            lines.remove(0);
            data = new ArrayList<>();
            String sep = new Character(SEPARATOR).toString();
     
            for(String line: lines){
                /*Je me suis rendu compte que lorsque deux séparateurs se suivent il 
                ne compte pas le champ entre les deux,alors je met un espace entre                         
                chaque doublon de séparateurs*/
                String lineTemp = line.replace(SEPARATOR+""+SEPARATOR,SEPARATOR+" "+SEPARATOR);
                lineTemp = line.replace(""+SEPARATOR+SEPARATOR,SEPARATOR+" "+SEPARATOR);
     
                String[] oneData = lineTemp.split(sep);
                data.add(new maClasse(oneData[0],oneData[1],...);
            }
        }
     
        /* Quant à mon readFile il s'agit tout simplement de celui du CsvFileHelper */
     
        public static List<String> readFile(File file) {
     
            List<String> result = new ArrayList<String>();
     
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
     
            for (String line = br.readLine(); line != null; line = br.readLine()) {
                result.add(line);
            }
     
            br.close();
            fr.close();
     
            return result;
        }

    En espérant t'avoir aidé,
    Cordialement,

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Merci de ta réponse

    Donc si je comprends bien quand j'applique getMappedData() j'obtiens une sorte de tableau et je navigue dedans à l'aide des get(indice,clé etc).

    Je charge le fichier et j'effectue tout mes tests sur cette "map" (je ne sais pas comment appeler correctement cet élément)

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Portugues13 Voir le message
    J'ai moi même utilisé ce tuto il n'y a pas très longtemps et pour moi ça marche alors je me permets de poster ce que j'ai:

    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
    public class CsvFileReader {
     
        //<editor-fold defaultstate="collapsed" desc="Variables">
    	private static final String FILE_NAME = "test.csv";
    	private File file;
            private char SEPARATOR = ',';
            private List<String> lines;
     
            /*Chaque objet de cette liste contient toutes les informations que t'as
            récupéré pour une ligne*/
            private List<maClasse>data;
     
        //</editor-fold>
     
     
     
        //<editor-fold defaultstate="collapsed" desc="Constructeurs">
     
        public CsvFileReader() {
            this.file=new File(FILE_NAME);
            init();
        }
     
     
        public CsvFileReader(File file) {
            if(file!=null)
                 this.file = file;
            else
                 this.file=new File(FILE_NAME);
     
            init();
        }
     
        private void init(){
            /*Toutes les lignes du fichier sont stockées dans l'objet lines*/
            lines = readFile(file);
            /*On supprime les entetes*/
            lines.remove(0);
            data = new ArrayList<>();
            String sep = new Character(SEPARATOR).toString();
     
            for(String line: lines){
                /*Je me suis rendu compte que lorsque deux séparateurs se suivent il 
                ne compte pas le champ entre les deux,alors je met un espace entre                         
                chaque doublon de séparateurs*/
                String lineTemp = line.replace(SEPARATOR+""+SEPARATOR,SEPARATOR+" "+SEPARATOR);
                lineTemp = line.replace(""+SEPARATOR+SEPARATOR,SEPARATOR+" "+SEPARATOR);
     
                String[] oneData = lineTemp.split(sep);
                data.add(new maClasse(oneData[0],oneData[1],...);
            }
        }
     
        /* Quant à mon readFile il s'agit tout simplement de celui du CsvFileHelper */
     
        public static List<String> readFile(File file) {
     
            List<String> result = new ArrayList<String>();
     
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
     
            for (String line = br.readLine(); line != null; line = br.readLine()) {
                result.add(line);
            }
     
            br.close();
            fr.close();
     
            return result;
        }

    En espérant t'avoir aidé,
    Cordialement,
    Je viens de voir ta réponse, je vais regarder tout ça ! Merci

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Tout d'abord merci Portugues13 pour ton code il m'est bien utile pour comprendre mais j'ai quelques questions (encore et oui).

    J'arrive pas à cerner le fonctionnement d'une arrayList c'est comme un tableau associatif ? Je demande ça car la méthode readFile(File file) retourne ça.

    Ensuite dans ton code que j'ai essayé d'adapter j'ai des erreurs.

    Voici le code

    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
    public class CsvFileReader {
     
        //<editor-fold defaultstate="collapsed" desc="Variables">
    	private static final String FILE_NAME = "test.csv";
    	private File file;
            private char SEPARATOR = ',';
            private List<String> lines;
     
            /*Chaque objet de cette liste contient toutes les informations que t'as
            récupéré pour une ligne*/
            private List<Article>data;
     
        //</editor-fold>
     
     
     
        //<editor-fold defaultstate="collapsed" desc="Constructeurs">
     
        public CsvFileReader() {
            this.file=new File(FILE_NAME);
            init();
        }
     
     
        public CsvFileReader(File file) {
            if(file!=null)
                 this.file = file;
            else
                 this.file=new File(FILE_NAME);
     
            init();
        }
     
        private void init(){
            /*Toutes les lignes du fichier sont stockées dans l'objet lines*/
            lines = readFile(file);
            /*On supprime les entetes*/
            lines.remove(0);
            data = new ArrayList<>();
            String sep = new Character(SEPARATOR).toString();
     
            for(String line: lines){
                /*Je me suis rendu compte que lorsque deux séparateurs se suivent il 
                ne compte pas le champ entre les deux,alors je met un espace entre                         
                chaque doublon de séparateurs*/
                String lineTemp = line.replace(SEPARATOR+""+SEPARATOR,SEPARATOR+" "+SEPARATOR);
                lineTemp = line.replace(""+SEPARATOR+SEPARATOR,SEPARATOR+" "+SEPARATOR);
     
                String[] oneData = lineTemp.split(sep);
                data.add(new Article(oneData[0],oneData[1],oneData[7],oneData[15],oneData[14],oneData[23],oneData[22]));
            }
        }
     
        /* Quant à mon readFile il s'agit tout simplement de celui du CsvFileHelper */
     
        public static List<String> readFile(File file) {
     
            List<String> result = new ArrayList<String>();
     
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
     
            for (String line = br.readLine(); line != null; line = br.readLine()) {
                result.add(line);
            }
     
            br.close();
            fr.close();
     
            return result;
        }
    }
    Ligne 50 : j'ai une erreur concernant mon objet de la classe Article (classe créée par moi) et je ne vois pas trop pourquoi il ne veut pas le créer..

    Ligne 60 à fin : Diverses erreurs concernant FileReader(file), readLine, etc. Eclipse me propose de corrections mais je ne connais pas leur signification. Il s'agit de "Add throws declaration" et "Surround with try/catch". Les 2 cas m'ajoutent du code mais je suis incapable de savoir lequel est bon pour moi (car sinon c'est bien Eclipse qui dit plus d'erreur mais autant comprendre pourquoi)

    Voilà, merci d'avance pour votre aide actuelle et vos futures réponses

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    Salut

    Voilà une fonction readFile qui a priori n'a plus d'erreurs:

    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
     
        public static List<String> readFile(File file) {
     
            List<String> result = new ArrayList<>();
     
            FileReader fr;
            try {
                fr = new FileReader(file);
                try {
                    BufferedReader br = new BufferedReader(fr);
                    try{
                        for (String line = br.readLine(); line != null; line = br.readLine()) {
                            result.add(line);
                        }
                    }
                    finally{
                        br.close();
                        fr.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
     
            } catch (FileNotFoundException ex) {
                    ex.printStackTrace();
            }
     
     
            return result;
        }
    Le fait est que lors de l'utilisation des Classes FileReader et BufferedReader des exceptions peuvent être levées, il faut donc entourer ces dernières d'un try catch. (plus d'infos sur les exceptions ici)

    Pour le ArrayList il s'agit juste d'un tableau contenant des objets. donc si t'as un ArrayList<String> tu vas avoir un tableau où chaque case contient un objet String. Avec la méthode add(TonObjet) tu ajoutes un nouvel élèment à la fin de ton tableau.

    Sinon concernant l'erreur à la ligne 50, peux tu nous donner le code de ta classe Article ainsi que l'exception que t'as eu?

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Merci pour les précisions et corrections je vais regarder tout ça mais avant je te post ma classe Article

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    public class Article {
    	private String id;
    	private String nom;
    	private float prix;
    	private String sku;
    	private String image;
    	private String codeEAN;
    	private String type;
    	private int status;
    	private String description;
    	private String short_description;
    	private int visibility;
    	private float poids;
    	private int tax_class_id;
    	private String allow_open_amount;
    	private String product_website;
     
    	public Article(String id, String nom, float prix, String image, String codeEAN, String description,float poids){
    		this.id=id;
    		this.nom=nom;
    		this.prix=prix;
    		this.image="url"+image;
    		this.codeEAN=codeEAN;
    		this.description=description;
    		this.poids=poids;
    		this.sku=nom.substring(0, 2)+"-"+codeEAN;
    		this.type="configurable";
    		this.product_website="url";
    		this.status=1;
    		this.visibility=4;
    		this.tax_class_id=1;
    		this.allow_open_amount="non";
    		this.short_description=description;
    	}
     
    	public String getId() {
    		return id;
    	}
     
    	public void setId(String id) {
    		this.id = id;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public float getPrix() {
    		return prix;
    	}
     
    	public void setPrix(float prix) {
    		this.prix = prix;
    	}
     
    	public String getSKU(){
    		return sku;
    	}
     
    	public void setSKU(String sku){
    		this.sku=sku;
    	}
     
    	public String getImage(){
    		return image;
    	}
     
    	public void setImage(String image){
    		this.image=image;
    	}
     
    	public String getCodeEAN(){
    		return codeEAN;
    	}
     
    	public void setCodeEAN(String codeEAN){
    		this.codeEAN=codeEAN;
    	}
     
    	public String getType(){
    		return type;
    	}
     
    	public void setType(String type){
    		this.type=type;
    	}
     
    	public int getStatus(){
    		return status;
    	}
     
    	public void setStatus(int status){
    		this.status=status;
    	}
     
    	public String getDescription(){
    		return description;
    	}
     
    	public void setDescription(String laDescription){
    		this.description=laDescription;
    	}
     
    	public String getShortDescription(){
    		return short_description;
    	}
     
    	public void setShortDescription(String shortdesc){
    		this.short_description=shortdesc;
    	}
     
    	public int getVisibility(){
    		return visibility;
    	}
     
    	public void setVisibility(int visib){
    		this.visibility=visib;
    	}
     
    	public float getPoids(){
    		return poids;
    	}
     
    	public void setPoids(float poids){
    		this.poids=poids;
    	}
     
    	public int getTaxClassID(){
    		return tax_class_id;
    	}
     
    	public void setTaxClassID(int taxClassID){
    		this.tax_class_id=taxClassID;
    	}
     
    	public String getAllowOpenAmount(){
    		return allow_open_amount;
    	}
     
    	public void setAllowOpenAmount(String allowOpenAmount){
    		this.allow_open_amount=allowOpenAmount;
    	}
     
    	public String getProductWebsite(){
    		return product_website;
    	}
     
    	public void setProductWebsite(String productWebsite){
    		this.product_website=productWebsite;
    	}	
    }
    L'idéal pour mon arrayList c'est qu'il contienne uniquement des objets de ma classe Article pour faire mes traitements si j'ai bien compris ?

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    Oui ton arrayList ne doit contenir que des objets "Article".

    Sinon concernant la ligne 50 le problème vient du fait que oneData est un tableau de String ce qui veut dire que chaque case de ce tableau contient un objet String. Or dans le constructeur de ta classe Article certains paramètres d'entrée sont des float. Il te faut donc utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Float.parseFloat(oneData[i])
    de façon à "convertir" tes chaines de caractères (String) en des nombres décimaux (float).

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Ok merci je vais faire ça

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    J'ai toujours l'erreur alors que j'ai bien fait ce que tu m'as dit je ne comprends pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.add(new Article(oneData[0],oneData[1],Float.parseFloat(oneData[7]),oneData[15],oneData[14],oneData[23],Float.parseFloat(oneData[22])));
    Le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Article(String id, String nom, float prix, String image, String codeEAN, String description,float poids)
    A moins qu'avec la fatigue je devienne aveugle il me semble avoir bien fait.

  12. #12
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    Regarde aussi du côté de ton fichier csv. D'après ce que je vois il y a pas mal de colonnes, peut être que t'as mal compté? Vérifie aussi que tes float sont sous la forme '1.0' et non pas '1,0'.
    Si ceci ne suffit toujours pas il nous faudrait l'erreur exacte pour pouvoir t'aider davantage. Et dans tous les cas tu pourrais surement gagner pas mal de temps en nous donnant l'erreur exacte. (penses-y pour tes prochains posts )

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Alors oui mon fichier CSV est "gros" (30 colonnes), les floats sont bien écris avec un point et non une virgule.
    Le séparateur est une virgule et chaque donnée est entre guillements (je vous le dis car je ne sais pas si c'est important...).

    Pour le fait de compter, java part de 0 du coup j'ai compté et enlevé 1 à mon résultat je pense pas que l'erreur soit à cause de ça car les chemins exacts ne sont pas encore indiqués dans le fichier.

    Voici l'erreur sous Eclipse :




    Concernant mon programme je pense avoir avancé dans le bon chemin grâce à toi, mes "bons" articles sont récupérés dans un ArrayList d'objet Article maintenant il faut écrire dans un nouveau fichier

  14. #14
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    Salut,

    Essaye dans un premier temps de faire un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(oneData[7]); /* juste avant ta ligne data.add(...........);*/
    S'il y a des guillemets c'est peut être de là qui vient le problème.
    En gros il faudrait que tu enlèves les guillemets avant de pouvoir utiliser le "parser".

    Personnellement je pense que j'aurai même créé des variables float pour faire la ligne en deux temps.
    D'abord tu utilises le parser et ensuite seulement tu ajoutes un nouvel article à ta liste. Mais bon vu que moi aussi je débute je suis pas sûr que ce soit vraiment la meilleure solution, alors si tu veux tu peux faire comme ça, mais je te conseil de demander l'avis de quelqu'un plus expérimenté que moi.

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Pas de soucis tu m'aides énormément déjà et je t'en remercie !

    Mon maitre de stage m'a conseillé de faire qu'avec des String vu on ne fait pas de calcule mais seulement une sorte de copier/coller. J'ai modif et j'ai toujours la même erreur cela doit venir de ma classe il faut que je cherche !

  16. #16
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    Mais je t'en prie, ça me fait plaisir de pouvoir t'aider.

    Tiens nous au courant si tu trouves une solution à ton problème. Et surtout n'oublie pas de la poster ici et de passer ton topic à "résolu". Ca pourrait peut être aider ceux qui à l'avenir se retrouveront dans le même cas que toi.

    Bon courage pour la suite

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Je mettrais en résolu oui quand tout serait ok car si ça peut aider


    Pour le moment je ne trouve pas mon erreur il faut que je demande à mon maitre de stage quand il aura le temps à moins que quelqu'un ici voit mon erreur...

    Et du coup je suis embêté au niveau de l'écriture dans un fichier csv car les méthodes du tuto utilise des "map" alors que moi je ne possède que des arrayList d'Article, faut que je trouve comment transformer tout ça afin d'utiliser la méthode fournie sans perdre de valeur...

  18. #18
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    Post tout ton code actuel concernant la classe article et la lecture de fichiers Csv. Je regarderais ça un peu plus en détail si tu veux, et sinon peut être que quelqu'un d'autre passera et trouvera d'où vient ton problème.

  19. #19
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Points : 3
    Points
    3
    Par défaut
    Classe Article : Même que dans mon précédent post sauf que les float/int sont des String à présent

    Classe CsvFileReader : Le code que tu m'as passé que je me suis permis de reprendre et modifier

    Code CsvFileReader : 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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    public class CsvFileReader {
     
        //<editor-fold defaultstate="collapsed" desc="Variables">
    	private static final String FILE_NAME = "artiklefull.csv";
    	private File file;
            private char SEPARATOR = ',';
            private List<String> lines;
     
            /*Chaque objet de cette liste contient toutes les informations que t'as
            récupéré pour une ligne*/
            private List<Article>data;
     
        //</editor-fold>
     
     
     
        //<editor-fold defaultstate="collapsed" desc="Constructeurs">
     
        public CsvFileReader() {
            this.file=new File(FILE_NAME);
            init();
        }
     
     
        public CsvFileReader(File file) {
            if(file!=null)
                 this.file = file;
            else
                 this.file=new File(FILE_NAME);
     
            init();
        }
     
        private void init(){
            /*Toutes les lignes du fichier sont stockées dans l'objet lines*/
            lines = readFile(file);
            /*On supprime les entetes*/
            lines.remove(0);
            data = new ArrayList<>();
            String sep = new Character(SEPARATOR).toString();
     
            for(String line: lines){
                /*Je me suis rendu compte que lorsque deux séparateurs se suivent il 
                ne compte pas le champ entre les deux,alors je met un espace entre                         
                chaque doublon de séparateurs*/
                String lineTemp = line.replace(SEPARATOR+""+SEPARATOR,SEPARATOR+" "+SEPARATOR);
                lineTemp = line.replace(""+SEPARATOR+SEPARATOR,SEPARATOR+" "+SEPARATOR);
     
                String[] oneData = lineTemp.split(sep);
                data.add(new Article(oneData[0],oneData[1],oneData[7],oneData[15],oneData[14],oneData[23],oneData[22]));
            }
        }
     
        /* Quant à mon readFile il s'agit tout simplement de celui du CsvFileHelper */
        public static List<String> readFile(File file) {
     
            List<String> result = new ArrayList<>();
            FileReader fr;
            try {
                fr = new FileReader(file);
                try {
                    BufferedReader br = new BufferedReader(fr);
                    try{
                        for (String line = br.readLine(); line != null; line = br.readLine()) {
                            result.add(line);
                        }
                    }
                    finally{
                        br.close();
                        fr.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
     
            } catch (FileNotFoundException ex) {
                    ex.printStackTrace();
            }
            return result;
        }
     
        //CUSTOM
        public List<Article> getLesArticles(){
        	return data;
        }
    }
    La partie "principale" de mon programme là où tout les traitements sont effectués :

    Code ftpToCsv - mes traitements : 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
    public class ftpToCsv {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		//Déclaration des variables
    		Download telech;
    		String leFichier;
    		String leChemin;
    		File file;
    		List<String> lesArticlesLus;
    		List<Article> lesArticlesBons;
    		List<Article> lesArticlesTotal;
    		//Fin de la déclaration des variables
     
    	    telech = new Download(); //téléchargement du fichier
    		leFichier = "artiklefull.csv";  //nom du fichier
    		leChemin = "à indiquer";  //chemin - ou le fichier vient d'être dl
    		lesArticlesBons=new ArrayList<>();
    		file = CsvFileHelper.getResource(leChemin+leFichier);	    
    	    CsvFileReader csvFile = new CsvFileReader(file);
    	    lesArticlesLus = CsvFileReader.readFile(file); //utile ?
    	    lesArticlesTotal = csvFile.getLesArticles();
     
    	    for(int i=0;i < lesArticlesTotal.size();i++){ //ma boucle de test
    	    	if(lesArticlesTotal.get(i).getId().substring(0,1)=="FR"|| lesArticlesTotal.get(i).getNom().indexOf("LCD")!=-1){
    	    		// Si ID commence par FR ou LCD dans le nom de l'Article
    	    		lesArticlesBons.add(lesArticlesTotal.get(i));
    	    	}
    	    }	    
    	}
    }

    Ce code n'est pas du tout fini, j'accepte volontiers toute les remarques, injures concernant mes erreurs grossières (lol), conseils...

    Les autres classes sont celles présentes dans le tuto.

  20. #20
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 57
    Points : 76
    Points
    76
    Par défaut
    Juste un conseil, ne met pas tout dans ton main quand tu crées une classe.
    A mon sens le main sert surtout à "tester" ta classe (ou si c'est ta classe principale: à lancer ton programme). Le fait est que si tu laisses tout dans le main et qu'une autre classe a besoin d'appeler ta classe ftpToCsv rien ne se passera.

    Donc sans entrer dans le détail de ta classe je te conseillerai déjà de faire quelque chose dans ce genre là:

    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
    public class ftpToCsv {
    	//Déclaration des variables
    	private Download telech;
    	private String leFichier;
    	private String leChemin;
    	private File file;
    	private List<String> lesArticlesLus;
    	private List<Article> lesArticlesBons;
    	private List<Article> lesArticlesTotal;
    	//Fin de la déclaration des variables
     
         public ftpToCsv(){
                telech = new Download(); //téléchargement du fichier
    	    leFichier = "artiklefull.csv";  //nom du fichier
    	    leChemin = "à indiquer";  //chemin - ou le fichier vient d'être dl
    	    lesArticlesBons=new ArrayList<>();
    	    file = CsvFileHelper.getResource(leChemin+leFichier);	    
    	    CsvFileReader csvFile = new CsvFileReader(file);
    	    lesArticlesLus = CsvFileReader.readFile(file); //utile ?
    	    lesArticlesTotal = csvFile.getLesArticles();
     
     
                /*Plutôt que faire la boucle for comme tu le fais essaye ceci:
                        for(Article unArticle: lesArticlesTotal){
                             Ensuite tu fais ton traitement, sachant que unArticle=lesArticlesTotal.get(i)
                         }
               */
    	    for(int i=0;i < lesArticlesTotal.size();i++){ //ma boucle de test
    	    	if(lesArticlesTotal.get(i).getId().substring(0,1)=="FR"|| lesArticlesTotal.get(i).getNom().indexOf("LCD")!=-1){
    	    		// Si ID commence par FR ou LCD dans le nom de l'Article
    	    		lesArticlesBons.add(lesArticlesTotal.get(i));
    	    	}
    	    }
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
                   ftpToCsv ftpToCsv1 = new ftpToCsv();
     
     
    	}
    }
    Ah oui, je ne te l'ai pas corrigé, mais la norme veut que la première lettre de ta classe commence par une lettre majuscule.

    (Si tu ne comprends pas pourquoi je fais ça ou si t'as n'importe quelle autre question n'hésite pas )

Discussions similaires

  1. Génération des fichiers CSV en Java
    Par Lolitaaa dans le forum Général Java
    Réponses: 3
    Dernier message: 18/06/2010, 09h07
  2. Générer un fichier .csv en java
    Par makia42 dans le forum Documents
    Réponses: 2
    Dernier message: 23/04/2010, 11h52
  3. [Java DB]comment lire un fichier csv en Java
    Par ttttnht dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 11/02/2010, 12h38
  4. lecture fichier csv en java
    Par c+cool dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 04/09/2009, 09h24
  5. exporter données sql dans un fichier csv en java
    Par pinkemma dans le forum JDBC
    Réponses: 2
    Dernier message: 07/03/2007, 09h23

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