L'index se trouve en dehors des limites du tableau.

Résolu/Fermé
Vigi - 2 juin 2016 à 09:43
 Vigi - 2 juin 2016 à 16:39
Bonjour,
je suis actuellement en train d'essayer de développer une petit programme permettant de choper des valeurs et de les transférer ensuite dans une machine. Bref, j'ai une erreur :

[Une exception non gérée du type 'System.IndexOutOfRangeException' s'est produite dans ConsoleApplication1.exe

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



Pour l'instant en placant des breakpoints j'en ai déduit que le souci venait de ma boucle if :
 if (laCase[2] != laCase[3] && laCase[0] != "0")
                    {
                    Console.WriteLine("Registre : " + Reg + "\t" + "Adresse : " + laCase[0] + "\t" + "Valeur : " + laCase[2] + "\t" + "Valeur par défaut : " + laCase[3]); // Ecriture sur console du registre, de la valeur et de la valeur par défaut séparés d'une tabulation
                    }

Pourriez vous m'aider s'il vous plaît, je ne trouve pas de solutions à ce problème.
Voici mon programme :
namespace ProgPrincipal
{
    class Program
    {
        static void Main(string[] args)
        {
            using (StreamReader streamReader = new StreamReader(@"Chariot 2012.csv"))
            {
                Console.WriteLine("Start");
                
                while (streamReader.Peek() >= 0)
                {
                    string lu = streamReader.ReadLine();

                    // Console.WriteLine(lu);

                    string checkbox_value = lu;
                    char[] splitters = new char[] { ';' }; // Le séparateur est le signe point-virgule (;)
                    string[] laCase = checkbox_value.Split(splitters); // Séparation des chaînes de caractères en plusieurs cases dans un tableau
                    String Reg = laCase[0];
                    laCase[0] = Adress(laCase[0]).ToString();
                    if (laCase[2] != laCase[3] && laCase[0] != "0")
                    {
                    Console.WriteLine("Registre : " + Reg + "\t" + "Adresse : " + laCase[0] + "\t" + "Valeur : " + laCase[2] + "\t" + "Valeur par défaut : " + laCase[3]); // Ecriture sur console du registre, de la valeur et de la valeur par défaut séparés d'une tabulation
                    }
                    //Console.WriteLine("registre = " + Adress(laCase[0])); 
                }
                Console.WriteLine("End");

                System.Threading.Thread.Sleep(3600000);
            }
        }

        static int Adress(string Case0)
        {
            int registre = 0;
            // Beaucoup de ligne (je pense, pas importantes)
            return registre ;
        }
    }
}


Merci d'avance,
Vigi

1 réponse

Finalement j'ai trouvé la solution ! ^^
Je n'avais simplement pas fait attention au fait que dans mon fichier .csv les valeur étaient écrites sous forme "A1-01" au lieu de A1-01
j'ai donc tout simplement ajouté une ligne à ma fonction Adress qui supprime les caractères " du string (chaîne de caractères):

Case0 = Case0.Replace("\"", "");


ce qui donne au final :

static int Adress(string Case0)
        {
            int registre = 0;
            Case0 = Case0.Replace("\"", "");
            // Beaucoup de ligne (je pense, pas importantes)
            return registre ;
        }


En espérant que ça aidera quelqu'un, à bientôt.
Vigi
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
Modifié par Whismeril le 2/06/2016 à 15:34
Bonjour, c'est super d'avoir poster ta solution,

tu peux ajouter une petite sécurisation après ton split, tu regardes le nombre d'enregistrement dans le tableau, s'il est inférieur à 4, la suite ne pourra pas marcher.

Comme le sujet est résolu, peux tu cliquer sur le lien "Marquer comme résolu" sous le titre de la discussion.
0
Merci beaucoup pour ton conseil.
Dans mon tableau, j'ai 4 colonnes et environ 780 lignes et je n'ai eu aucun souci sur le split.
Le sujet est marqué comme résolu, à bientôt.
Vigi
0