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 :

fichier texte en java


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut fichier texte en java
    Bonjour à tous,

    je voudrais manipuler un fichier txt en java dans le but et de supprimer quelques colonnes du fichier.

    exemple:

    col1 val1 col2 val2 col3 val3 col4 val4

    lc1 ing1 1 ing2 2 ing3 0 ing4 5
    lc2 ing1 2 ing2 2 ing3 0 ing4 1
    lc3 ing1 0 ing3 5 ing4 5
    lc4 ing1 5 ing2 2 ing3 0 ing4 2



    en sortie je dois avoir :

    col1 val1 col2 val2 col3 val3 col4 val4

    lc1 ing2 2 ing4 5
    lc2 ing2 2 ing4 1
    lc3 ing4 5
    lc4 iing2 2 ing4 2

    donc le but est de supprimer tous les ing1 et leurs valeurs et les ing3 et leurs valeurs.

    mais le problème que j'ai, c'est une erreur lorsqu'il y une case vide avec sa valeur.


    Merci de m'aider !

  2. #2
    Membre expérimenté Avatar de fastdeath124
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Août 2011
    Messages : 117
    Par défaut
    Bonjour,

    A priori le principe est clair, mais sans code et sans erreur c'est un peu difficile de localiser le problème.

    Peux-tu s'il te plait montrer ta méthode et le message d'erreur obtenu?

  3. #3
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut
    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
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
     
     
    public class Recuperer {
     
    	 String[] formules(String ligne)
    	{
    		String []a  = ligne.split("(\\t)+");
    		return a ;	
    	}	
     
    public  String write(String contenu,String fichier) {    //Fonction écrire dans un fichier
     
    		try {
    			FileWriter fw = new FileWriter (fichier,true);
    			BufferedWriter bw = new BufferedWriter (fw);
    			PrintWriter fichierSortie = new PrintWriter (bw); 
    				fichierSortie.write(contenu+"\n");
    				fichierSortie.flush();
    				fichierSortie.close();
    				bw.close();
    				fw.close();
     
    		}
    		catch (Exception e){
    	System.out.println(e.toString());
    }
    		return contenu; 
    		}
     
    public String readFile(String fichier) { // Fonction lire dans un fichier
     
    	String chaine = "";
     
    	// lecture du fichier texte
    	try {
    		InputStream ips = new FileInputStream(fichier);
    		InputStreamReader ipsr = new InputStreamReader(ips);
    		BufferedReader br = new BufferedReader(ipsr);
    		String ligne;
    		int compteur=0; // initialisation du compteur pour les lignes d'un fichier
    		String nom1="M4";
    		String nom2="E3";
    		//String al="9";
    		StringBuffer sb= new StringBuffer();
    		while ((ligne = br.readLine()) != null) {  // lecture ligne par ligne
    			String[] tab=formules(ligne);
     
    			if (tab[1].equals(nom1)){   
    				//compteur++;
    				sb.append(" "+tab[0]);
    				sb.append(" "+tab[2]);
    				sb.append(" "+tab[3]);
    				sb.append(" "+tab[4]);
     
     
     
     
    				//sb.append(tab[23]+"\n");
    				//System.out.println(tab[4]);
    			}
    		//	else if(!tab[6].equals(al)) {
    				//if(tab[0].equals(nom)){
     
    				write(sb.toString(), "C:/Documents and Settings/nonoffice/Desktop/form.txt");//...
    //				System.err.println(sb.toString());
    			//	sb=new StringBuffer();
    				//compteur=0;
     
    				//nom=tab[0];
    				//al=tab[6];
     
    			}
     
     
     
    		System.err.println(compteur);
    		br.close();
    	} catch (Exception e) {
    		System.out.println(e.toString());
    	}
     
    	return chaine;
     
    }
     
     
    public static void main(String[] args){
    	Recuperer R=new Recuperer();
    	R.readFile("C:/Documents and Settings/nonoffice/Desktop/for.txt");
     
     
    }
     
    }





    java.lang.ArrayIndexOutOfBoundsException: 1

  4. #4
    Membre expérimenté Avatar de fastdeath124
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Août 2011
    Messages : 117
    Par défaut
    Le problème se trouve ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sb.append(" "+tab[0]);
    sb.append(" "+tab[2]);
    sb.append(" "+tab[3]);
    sb.append(" "+tab[4]);
    En effet, cette exception est retournée lorsqu'on accède à un index supérieur à la taille d'une structure.
    Dans ton exemple, si une valeur est vide, la taille de "tab" est 3 ( de 0 à 2). Par conséquent "tab[3]" et "tab[4]" retournent ArrayIndexOutOfBoundsException.
    Je te propose de boucler dynamiquement selon la taille de "tab".
    J'ai une autre remarque qui concerne l'optimisation du code, je préfère que le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		while ((ligne = br.readLine()) != null) {  // lecture ligne par ligne
    			String[] tab=formules(ligne);
    soit remplacé par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		String[] tab;
    while ((ligne = br.readLine()) != null) {  // lecture ligne par ligne
    			tab=formules(ligne);
    Ceci permettra d'éviter la création de plusieurs instances de String[].

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut
    Bonjour,

    l'exception java.lang.ArrayIndexOutOfBoundsException se produit lorsque tu veux accéder à un élément d'un table avec l'idex dépassant la taille de la table.
    Ici se produit lors de l'accès à la table tab, ta méthode formules retourne un table avec un seul élément qui contient la ligne complète. Essais de corriger cette méthode en utilisant StringTokenizer.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut
    D'accord,

    Supposons que dans man fichier txt j'ai:
    ;a;a;a;;;;;;;
    b;b;;;;

    comment je divise en enlevant les ; avec split

    resultat: a a a
    b b

    String[] formules(String ligne)
    {
    //String []a = ligne.split("(\\t)+");
    String []a = ligne.split(";");
    return a ;
    }

  7. #7
    Membre expérimenté Avatar de fastdeath124
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Août 2011
    Messages : 117
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0;i<tab.length;i++){
        sb.append(" "+tab[i]);
    }

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut
    Voici un exemple de méthode formules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     String[] formules(String ligne) {
    		String[] a = null;
    		StringTokenizer st = new StringTokenizer(ligne);
     
    		if (st.countTokens() > 0) {
    			a = new String[st.countTokens()];
     
    			for (int i = 0; i < a.length; i++) {
    				a[i] = st.nextToken();
    			}
    		}
    		return a;
    	}
    N'oublie pas de tester si la table retournée est null.

    Si tu veux utiliser ";" comme séparateur, il suffit de modifier le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringTokenizer st = new StringTokenizer(ligne, ";");

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

Discussions similaires

  1. modifier fichier texte en java
    Par billouth dans le forum Langage
    Réponses: 5
    Dernier message: 06/08/2009, 17h52
  2. Question sur lecture d'un fichier text en Java
    Par ovcrash dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 27/11/2007, 17h14
  3. Transfert d'un fichier texte avec java
    Par mokhtarmaroc dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 25/08/2007, 10h58
  4. Probléme d'ecriture dans un fichier texte en java
    Par oldscrout dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 19/01/2007, 19h10
  5. Comment ouvrir un fichier text sous Java ?
    Par mpascolo dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 11/10/2006, 14h59

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