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

avec Java Discussion :

Erreur avec arraycopy


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut Erreur avec arraycopy
    Bonjour,
    j'ai un petit programme qui doit lire un fichier,chaque ligne de ce fichier je la mets dans un tableau de caractere afin de pouvoir traitrer les donnés de chaque ligne du fichier,puis parfois si les données m interessent je copie le tableau(tab) dans un autre(tab_date),mais la il y a une erreur et vraiment je ne la trouve pas!!

    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
    73
    74
    75
    76
    77
    78
    try
    		{
    			//String nomFichier = reader.readLine();
    			FileReader fr = new FileReader( nom_fichier );
    			BufferedReader br = new BufferedReader( fr );
    			String ligne = null;
     
     
    			while( ( ligne = br.readLine() ) != null )
    			{
     
     
    				tableau=ligne;
     
     
    				char tab[]=new char[tableau.length()];
     
    				for (int i=0; i<tableau.length();i++)
     
    				{
     
    				tab[i]=tableau.charAt(i);
     
    				}
    				int i=0;
     
    				if((tab[0]=='A') && (tab[1]=='G') && (tab[2]=='R'))  //je me trouve dans la ligne ou il y a écrit la date
    					{
    					while( (tab[i]!='P') && (tab[i+1]!='E') && (tab[i+2]!='R'))
     
    						i++;
     
     
    					//je vais stocker la date dans un nouveau tableau
     
    					i=i+7;
     
    					/* for(int k=i;k<tab.length;k++)
    					       {
    						       tab_date[j]=tab[k];
    					           j++;
    					       }*/
     
    					System.arraycopy(tab_date,0,tab,i,tab.length);
     
     
    					}
    				System.out.println(tab[0]);
     
    				//System.out.println(tab_date);
     
     
     
     
     
    			fr.close();	
    			}//fin du while de lecture du fichier
     
     
     
     
     
     
     
    		}//fin du try
     
    		catch( IOException e )
    		{
    			JOptionPane.showMessageDialog(null, 
     
    	                "Problème inconnue lors de la lecture du fichier", "convertion", 
     
    	                JOptionPane.ERROR_MESSAGE); 
     
     
    		}
     
    		}
    Merci d'avance pour votre aide!

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par ramon.dekker Voir le message
    il y a une erreur et vraiment je ne la trouve pas!!
    Si au moins tu affichais l'erreur, ça pourrait aider ...
    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
     
    		catch( IOException e )
    		{
    			JOptionPane.showMessageDialog(null, 
     
    	                "Problème lors de la lecture du fichier : "+e.getMessage(), "convertion", 
     
    	                JOptionPane.ERROR_MESSAGE);
     
                           // si tu n'as pas de sortie console, affiche le dans une boite de dialogue 
                            e.printStackTrace();			 
     
    		}
     
    		}

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Alors j ai mis ton code in mais il me met la meme chose que je le mette ou non,voila ce que j ai en console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "main"  
     
     
    java.lang.ArrayIndexOutOfBoundsException
    	at java.lang.System.arraycopy(Native Method)
    	at ouvr.main(ouvr.java:77)
    La ligne qui pose probleme est la ligne qui contient justement le fameux arraycopy,mais le truc c est que quand je mets la ligne de arraycopy en commentaire il me sort une autre erreur pour la ligne suivante :if((tab[0]=='A') && (tab[1]=='G') && (tab[2]=='R'))



  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    alors je vois plusieurs erreurs:

    tu confond la source et la destination dans tes argument. C'est System.arrayCopy(source,sourcepos,destination,destination,nbreelementsacopier).
    Ensuite, tu confond la taille de "tab" avec le nombre d'éléments à copier (-> tu va
    largement déborder).

    Tu ferme ton ficher dans la boucle plutot qu'après la boucle, tu va merder dés la deuxième ligne!
    Je rajouterais aussi, ta boucle pour transofmrer en tableau de char sert à rien. T'ira 10
    coup plus vite en travaillant directement sur la string. Enfin, ton while sur "P","E","R" est douteux. Bien que ok d'un point de vue grammatical, je ne suis pas sur que çà recherche ce que tu pense que çà recherche. Ca s'arretera, par exemple, sur les shémas suivants:
    'PAX', 'POO', 'LEA', 'AGR' (tiens tiens) . en fait, puisque AGR matche, et que ont sait qu'on commence par AGR, on peut en conclure que i vaudra toujours 0+7

    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
    while( ( ligne = br.readLine() ) != null )
    		{
    			int i=0;	
    			if(ligne.startsWith("AGR"))  //je me trouve dans la ligne ou il y a écrit la date
    				{
    				while( (ligne.charAt(i)!='P') && (ligne.charAt(i+1)!='E') && (ligne.charAt(i+2)!='R'))				
    				i++;
     
     
    				//je vais stocker la date dans un nouveau tableau
     
    				i=i+7;
     
    				String date = ligne.subString(i);
    				// faire qqch avec la date!!!!
    				System.out.println(date);
    				}
     
    			//System.out.println(tab_date);
     
    		}//fin du while de lecture du fichier
    	fr.close();

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Merci ENORMEMENT pour votre aide!!!!

    @tchize
    SI je mets le string dans un tableau c est pout pouvoir manipuler tranquillement les données de ce string car d apres ce que je sais (je ne sais pas grand chose vu que je suis un débutant en JAVA) il est difficle de manipuler les données d un string(caractere par caractere puis copier...etc)

    P.S ah oui ca marche MERCI BEAUCOUP A VOUS je viens de mettre copier coller de ton code tchiiiiiiize merki merki beaucoup

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par ramon.dekker Voir le message
    d apres ce que je sais (je ne sais pas grand chose vu que je suis un débutant en JAVA) il est difficle de manipuler les données d un string(caractere par caractere puis copier...etc)
    non, çà ne pose aucun problème, et comme je le montre, l'avantage d'une string c'est que tu peux manipuler tous les caractère d'un coup, sans avoir à réécrire du code qui, de toutes facons, se trouve déjà dans String. Le tableau de char[], d'après mon expérience, est rarement utilisé en java. Ce qui est vra, cependant, c'est qu'une String n'est pas modifiable. Mais qu'à cela ne tienne, on en refait une nouvelle C'est souvent bien plus performant et rentable que d'écrire 50 ligne pour manipuler un char[].

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 07h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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