L'index se trouve en dehors des limites du tableau. [Résolu/Fermé]

Signaler
-
 Vigi -
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
Messages postés
15365
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 janvier 2021
641
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.
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