none
Informations supplémentaires : L'index se trouve en dehors des limites du tableau. RRS feed

  • Question

  • Bonjour,

    je lit d'un fichier et jecrit dans un autre fichier et ca dans toutes mes fonctions,et  lort de l'execution de mon programme  je recois cette erreur (Informations supplémentaires : L'index se trouve en dehors des limites du tableau.
    ) je travaille avec vc++ 2005 windows forms .merci

    mercredi 9 juin 2010 12:53

Réponses

  •  

    Bonjour,

     

    J’ai reproduit l’erreur :

    Dans la cas où une ligne du fichier name_fichier est vide, la chaîne de caractère word est vide et l’instruction word[1]==’I’ provoque l'erreur.

    Pour éviter cela, vous pouvez par exemple vérifier la longueur de la chaîne word avant de tester les valeurs word[0] et word[1] en remplaçant :

    if(word[0]=='#' && word[1]=='I')

    par :

    if(word->Length>=2 && word[0]=='#' && word[1]=='I')

     

    Cordialement,

    Chris

     

     

    • Proposé comme réponse Alex Petrescu jeudi 10 juin 2010 09:53
    • Marqué comme réponse fleurs dimanche 13 juin 2010 23:40
    jeudi 10 juin 2010 08:51
  • Bonjour,

    voici une poursion de code

    using

     

    namespace System::IO;

    bool indexation::stop_dict(String ^name_fichier,String ^name_fichier1)
    {indexation index;
    String ^word;
    bool b=false;
    
    //if(name_fichier=="doc_token.txt" && name_fichier1=="doc_stoped.txt")
    //{
    	StreamReader^ f3 = gcnew StreamReader( name_fichier);
    StreamWriter^ f4 = gcnew StreamWriter(name_fichier1);
    
    
    if( File::Exists(name_fichier) && File::Exists(name_fichier1))
    {word = f3->ReadLine();
     
         while(!f3->EndOfStream)
    		 { 
    			  if(word[0]=='#' && word[1]=='I')
    			 {
             f4->WriteLine(word); 
    				 word=f3->ReadLine();
    			 } 
    		 
    				else {
               if (word == "#W" || word == "#T" || word == "#K")
    					 {
    					f4 ->WriteLine(word); 
    						 
    				    while ( !f3->EndOfStream && (word = f3->ReadLine()) && word[0]!= '#')
    							  
    						
    						if( index.appartient_stop_word(word) == false) f4->WriteLine(word);
    					 }
    avec un fichier ca marche trés bien mais quand je change le fichier je recoi l'erreur.merci

    • Marqué comme réponse fleurs dimanche 13 juin 2010 23:40
    mercredi 9 juin 2010 21:38
  • Bonjour,

     

    Si l’erreur si produit dans le 2e while, je pense que c’est l’instruction

    word[0] != ‘#’

    qui produit cette erreur, et ce parce que la chaîne de caractère word est vide.

    Dans ce cas, il faudrait faire la même chose que ce que j’avais proposé dans mon message précédent pour une autre ligne de code, c’est-à-dire tester la taille de la chaîne avant de lire word[0].

    Par exemple remplacer :

    while (!f3->EndOfStream && (word = f3->ReadLine()) && word[0] != ‘#’)

    par

    while (!f3->EndOfStream && (word = f3->ReadLine()) && word->Length>=1 && word[0] != ‘#’)

     

    Cordialement,

    Chris

     

    • Marqué comme réponse fleurs lundi 14 juin 2010 10:16
    lundi 14 juin 2010 07:43

Toutes les réponses

  • Bonjour,

     

    Quelle classe utilisez-vous pour manipuler les fichiers ? Avez-vous un exemple de code ?

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    mercredi 9 juin 2010 14:27
  • Bonjour,

    voici une poursion de code

    using

     

    namespace System::IO;

    bool indexation::stop_dict(String ^name_fichier,String ^name_fichier1)
    {indexation index;
    String ^word;
    bool b=false;
    
    //if(name_fichier=="doc_token.txt" && name_fichier1=="doc_stoped.txt")
    //{
    	StreamReader^ f3 = gcnew StreamReader( name_fichier);
    StreamWriter^ f4 = gcnew StreamWriter(name_fichier1);
    
    
    if( File::Exists(name_fichier) && File::Exists(name_fichier1))
    {word = f3->ReadLine();
     
         while(!f3->EndOfStream)
    		 { 
    			  if(word[0]=='#' && word[1]=='I')
    			 {
             f4->WriteLine(word); 
    				 word=f3->ReadLine();
    			 } 
    		 
    				else {
               if (word == "#W" || word == "#T" || word == "#K")
    					 {
    					f4 ->WriteLine(word); 
    						 
    				    while ( !f3->EndOfStream && (word = f3->ReadLine()) && word[0]!= '#')
    							  
    						
    						if( index.appartient_stop_word(word) == false) f4->WriteLine(word);
    					 }
    avec un fichier ca marche trés bien mais quand je change le fichier je recoi l'erreur.merci

    • Marqué comme réponse fleurs dimanche 13 juin 2010 23:40
    mercredi 9 juin 2010 21:38
  •  

    Bonjour,

     

    J’ai reproduit l’erreur :

    Dans la cas où une ligne du fichier name_fichier est vide, la chaîne de caractère word est vide et l’instruction word[1]==’I’ provoque l'erreur.

    Pour éviter cela, vous pouvez par exemple vérifier la longueur de la chaîne word avant de tester les valeurs word[0] et word[1] en remplaçant :

    if(word[0]=='#' && word[1]=='I')

    par :

    if(word->Length>=2 && word[0]=='#' && word[1]=='I')

     

    Cordialement,

    Chris

     

     

    • Proposé comme réponse Alex Petrescu jeudi 10 juin 2010 09:53
    • Marqué comme réponse fleurs dimanche 13 juin 2010 23:40
    jeudi 10 juin 2010 08:51
  • Bonjour, svp mon probleme n'est pas résolu,le programme s'arrete dans le 2eme while ,il marche  trés bien qd je lis a partir d'un petit fichier, mais qd je change et je lit a partir d'un grand fichier de mots ,le programme s'arrete avec lerreur L'index se trouve en dehors des limites du tableau.
    svp aide moi je suis vrément perturbé.
    dimanche 13 juin 2010 18:46
  • Bonjour,

    Pouvez-vous mettre ici la fonction de lecture de fichier? parceque ce n'est pas evident de donner une solution precise comme ça.

     

    dimanche 13 juin 2010 20:37
  • Bonjour,

     

    Si l’erreur si produit dans le 2e while, je pense que c’est l’instruction

    word[0] != ‘#’

    qui produit cette erreur, et ce parce que la chaîne de caractère word est vide.

    Dans ce cas, il faudrait faire la même chose que ce que j’avais proposé dans mon message précédent pour une autre ligne de code, c’est-à-dire tester la taille de la chaîne avant de lire word[0].

    Par exemple remplacer :

    while (!f3->EndOfStream && (word = f3->ReadLine()) && word[0] != ‘#’)

    par

    while (!f3->EndOfStream && (word = f3->ReadLine()) && word->Length>=1 && word[0] != ‘#’)

     

    Cordialement,

    Chris

     

    • Marqué comme réponse fleurs lundi 14 juin 2010 10:16
    lundi 14 juin 2010 07:43