Pauvre problème de SubString()

Résolu
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009 - 15 janv. 2009 à 16:11
moussstiqu3 Messages postés 11 Date d'inscription mercredi 18 novembre 2009 Statut Membre Dernière intervention 27 novembre 2010 - 5 mai 2010 à 23:55
Bonjour,

Voila j'ai un pauvre problème avec la fonction SubString et je ne comprend pas pourquoi ca ne marche pas :(

Le but étant de prendre qu'une partie d'un mot contenu dans une List-Box et ca ne fonctionne pas :/

int longueur = lb_Panier.Text.Length - 1;

string nomproduit = lb_Panier.Text.Substring(2, longueur);

l'erreur etant :
ArgumentOutOfRangeException
L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
Nom du paramètre : length
A voir également:

5 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 janv. 2009 à 16:22
Tu essaye de prendre N-1 caractères (longueur) à partir du troisième caractère (position 2). Seuleument à partir du 3eme caractère, il ne te reste que N-2 caractères, donc en prenant N-1 caractères, tu dépasse la fin de la chaine (OutOfRange)

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
3
Michou69004 Messages postés 16 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 17 janvier 2009
17 janv. 2009 à 09:58
Bonjour,
Precision: Dans ton cas, j'ai l'impression que tu veux prendre ta chaine de caractere a partir du 3eme caractere.

En C# tu peux donc faire :

string nomproduit = lb_Panier.Text.Substring(2);

plutot que

string nomproduit = lb_Panier.Text.Substring(2, longueur);

Plus rapide.

Cordialement.
3
moussstiqu3 Messages postés 11 Date d'inscription mercredi 18 novembre 2009 Statut Membre Dernière intervention 27 novembre 2010 1
5 mai 2010 à 23:55
Bonjour j'ai aussi ce problème, mais je ne vois pas d'où ça viens.
Le message d'erreur est le suisvant
startIndex ne peut pas être supérieur à la longueur de la chaîne.
Nom du paramètre : startIndex


Mon but est simple : je recois constemment 6 bytes puis 5 secondes puis 6 bytes puis 5 secondes...etc...

Je veux prendre ces 6 bytes et les spliter dans une textbox (pour le moment) et j'ai l'erreur nommée ci-dessus.

Aussi, si ça marche une fois, ça foire la deuxième fois...je ne vois pas pq!

Voici mon code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace SerialComm
{
    public partial class Form1 : Form
    {
        static SerialPort serialPort1;
        public Form1()
        {
            serialPort1 = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
            InitializeComponent();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

        }
        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.Open();
        }
        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string value = "";
            serialPort1.DiscardInBuffer();

            char[] buffer = new char[6];
            while ((serialPort1.BytesToRead > 0) && (serialPort1.BytesToRead < 6))
            {
                int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
               
                for (int i = 0; i < bytes_read; i++)
                {
                    value += buffer[i];
                }
            }
            safeInput(value.ToString());
            
        }

        private void safeInput(string msg)
        {


            textBox1.Invoke(new EventHandler(delegate
            {

  // donnée isolée de la 3 en prenant 1 donnée (1 byte)

                string message1 = msg.Substring(0,1);
                string message2 = msg.Substring(1,1);
                string message3 = msg.Substring(2,1);
                string message4 = msg.Substring(3,1);

                textBox1.SelectedText = string.Empty;
                textBox1.AppendText(message1);
                textBox1.ScrollToCaret();

                textBox2.SelectedText = string.Empty;
                textBox2.AppendText(message2);
                textBox2.ScrollToCaret();

                textBox3.SelectedText = string.Empty;
                textBox3.AppendText(message3);
                textBox3.ScrollToCaret();

                textBox4.SelectedText = string.Empty;
                textBox4.AppendText(message4);
                textBox4.ScrollToCaret();
            }));
            
        }
    }
}


merci de votre aide
1
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
15 janv. 2009 à 16:28
Bien vu Casy, j'avais pas fait la gymnastique jusqu'au bout ! je valide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
17 janv. 2009 à 11:37
Effectivement je m'embettais pour rien ^^
0
Rejoignez-nous