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 :

problème de découpage d'un fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Par défaut problème de découpage d'un fichier
    Bonjour à tous,
    Je met en pièce jointe la Classe que j'ai écrit. Le but est d'extraire certains champs d'un grand tableau sachant qu'un des champs doit se retrouver dans deux fichiers différents. Je ne comprends pas pourquoi le if imbriqué celui qui duplique le champ dans un autre fichier ne fonctionne que partiellement. Il manque des lignes dans le fichier destination.
    J'ai beau chercher je ne voit pas où est mon erreur, un peu d'aide serait bienvenue.
    Merci à vous,
    Yal

    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
    // Classe de nettoyage on ne garde que les colonnes significatives, on crÈe aussi le fichiers des codes ISIN pour tÈlÈchargement des donnÈes intraday
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.StringTokenizer;
     
    public class ListeEuronext {
     
    	public ListeEuronext(){
    		String s = File.separator;
    		Date dateFormatee = new Date();
    		SimpleDateFormat formatDate = new SimpleDateFormat("yyMMdd");
    		String date = formatDate.format(dateFormatee);		
    		FileReader lire = null;
    		BufferedReader tamponIn = null;
    		File euroListe = new File("d:"+s+"Bourse"+s+"Archives"+s+"InfoSocietes"+s+"ListeEuronext-"+date+".txt");//fichier de sortie des donnÈes sociÈtÈes
    		FileWriter ecrireEuroListe = null;
     
    		String fichierCodes = "d:"+s+"Bourse"+s+"Programmes"+s+"Temp"+s+"Codes.txt";// indique le chemin du fichier des codes ISIN
     
    		try{
     
    			FileWriter fw = new FileWriter(fichierCodes,true);
     
    			ecrireEuroListe = new FileWriter(euroListe);
    			lire = new FileReader("d:"+s+"Bourse"+s+"Programmes"+s+"Temp"+s+"ListeEuronextBrute.txt");
    			tamponIn = new BufferedReader(lire);
    			int nbLignes = 0;
    			while(true){
    				String ligne = tamponIn.readLine();
    				nbLignes += 1;
    				if(ligne == null) break;
    				if(nbLignes > 4){
    					int indexToken = 0;
    					StringTokenizer st = new StringTokenizer(ligne, ";");
    					StringBuffer newLigne = new StringBuffer();
    					while(st.hasMoreTokens()){
    						indexToken +=1;
    						if(indexToken > 12) break;
    						if(indexToken < 6 || indexToken == 12){
    							String champ = st.nextToken()+";";
    							champ = champ.replace(",","");
    							newLigne.append(champ);
     
    // duplique le champ dans un autre fichier							
    							if(indexToken == 2){
    								String code = champ.substring(0, 12);// supprime le ";" de la fin
    								fw.write(code+"\r\n");
    							}
     
    						}
    						else st.nextToken();
    					}
    					newLigne.deleteCharAt(newLigne.length()-1);
    					String sortie = newLigne.toString();
    					ecrireEuroListe.write(sortie+"\r\n");
    				}
    			}
    		}
    		catch(IOException exception){
    			exception.printStackTrace();
    		}
    		finally{
    			try{
    				ecrireEuroListe.flush();
    				tamponIn.close();
    				ecrireEuroListe.close();
    				File supFichierSource = new File("d:"+s+"Bourse"+s+"Programmes"+s+"Temp"+s+"ListeEuronextBrute.txt");
    				supFichierSource.delete();
    			}
    			catch(IOException exception1){
    				exception1.printStackTrace();
    			}
    		}
    	}
    }

  2. #2
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Bonjour,

    Peux-tu donner plus de details:

    - Combien de lignes du fichier source
    - Combien de lignes dans ton fichier codes
    - Toutes lignes du fichier source ont elles les memes champs?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Par défaut
    Bonjour et merci de ton intérêt,
    le fichier source contient environ 1200 lignes
    toutes les lignes contiennent le même nombre de champ sauf les ligne d'en-tête que j'ai éliminé par l'instruction : if(nbLignes > 4){
    et le fichier codes contient donc le même nombre de ligne mais avec un seul champ.
    Autre détail étrange : le dernier code est tronqué.
    Dans un premier temps j'avais écrit le programme en le découpant davantage. Je veux dire que je le réalisait étape par étape en créant un fichier sur le disque pour chaque traitement. Ça marche mais ce n'est pas satisfaisant

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Par défaut
    J'ai ajouté un System.out.println(code) et un compteur de codes; bizarre la sortie console dans Eclipse semble correcte. Je veux dire par là que tous les codes s'affichent alors pourquoi n'y en a-t'il que 868 sur 1192 dans le fichier de sortie?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Par défaut
    Le problème est résolu, il suffisait d'ajouter fw.flush().
    Merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de noms lors du découpage d'un fichier texte
    Par fasfousba dans le forum Général Java
    Réponses: 3
    Dernier message: 09/01/2012, 15h09
  2. Problème lors du découpage d'un fichier CVS
    Par lahjouji.hassan dans le forum Linux
    Réponses: 10
    Dernier message: 29/11/2010, 15h05
  3. Problème de découpage sur fichier
    Par Buck92 dans le forum Général Python
    Réponses: 2
    Dernier message: 25/06/2010, 15h49
  4. problème d'acces concurentiel à un fichier
    Par Theoden dans le forum MFC
    Réponses: 2
    Dernier message: 04/03/2004, 09h49
  5. Problème d'E.S. sur fichier avec open
    Par Bubonik software dans le forum C
    Réponses: 6
    Dernier message: 04/02/2004, 19h42

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