Substring et condition ? [débutant]

Signaler
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011
-
Messages postés
9
Date d'inscription
lundi 26 février 2007
Statut
Membre
Dernière intervention
21 juin 2010
-
Bonjour,

J'aurais souhaité savoir s'il était possible de poser une condition de réussite sur le fonction substring:

je m'explique : l'utilisateur entre la variable numberofcolumn qui correspond au debut de la chaine de caractères à extraire et lengthofcolumn pour le nombre de caracteres à extraire à partir du début.
Seulement certaines lignes du fichier texte que je traite sont vides ou bien ne vont pas jusqu'au nombre du debut de chaine. J'ai alors une erreur...
Comment faire alors pour que le programme passe à la ligne suivante si le substring échoue ?

Voici mon code

string

numberofcolumn = textBoxcolumn.Text;

string lengthofcolumn = textBoxlength.Text;

string value = textBoxvalue.Text;

string charschecked;

StreamReader rd =
new
StreamReader(path);

string line;

while ((line = rd.ReadLine()) !=
null){

charschecked = line.Substring(

Int32.Parse(numberofcolumn),
Int32.Parse(lengthofcolumn));listBoxresultchecked.Items.Add(charschecked);

}

rd.Close();

Merci de votre attention.
Cordialement,
Anz.

10 réponses

Messages postés
63
Date d'inscription
lundi 2 février 2004
Statut
Membre
Dernière intervention
19 mai 2010

Tu entoures le tout avec un try catch
Messages postés
63
Date d'inscription
lundi 2 février 2004
Statut
Membre
Dernière intervention
19 mai 2010

Dans ton while pardon

while ((line = rd.ReadLine()) !=
null){

try

{

charschecked = line.Substring(

Int32.Parse(numberofcolumn),
Int32.Parse(lengthofcolumn));listBoxresultchecked.Items.Add(charschecked);

}

catch

{

}

}
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
64
Ou alors tu vrifie que tu peux faire le substring

if (line!=null && line.Length>=numberofcolumn+lengthofcolumn)
{
charschecked = line.Substring(Int32.Parse(numberofcolumn), Int32
.Parse(lengthofcolumn));
listBoxresultchecked.Items.Add(charschecked);
}

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
21
catch (IndexOutOfRangeException)
{}

pas de catch universel.

::|The S@ib|::
MVP C#.NET
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

C'est pas mal sauf que.. il s'arrette alors d'extraire à la premiere ligne vide et ne passe pas à la suivante.. peut-être ai-je mal compris l'utilisation...^^ si tu pouvais m'eclairer ?

 
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

Autant pour moi j'avais mal placé mon try / catch :s
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

Ca marche nikel :D merci à tous !!
Messages postés
63
Date d'inscription
lundi 2 février 2004
Statut
Membre
Dernière intervention
19 mai 2010

Et dans ce cas  quelle est la différence entre un try catch universel et un try catch ciblé si tu n'exploite pas l'exception ?
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
21
Même si tu ne l'exploite pas ca te permet de la voir, si tu catch 'Exception', tu ne verras jamais le bug. Il ne faut catcher que ce que tu sais qu'il peut arriver et ainsi gerer ce cas, faire de la reprise sur erreur, du log spécifique à l'exception. On ne catch jamais exception, celà fait parti des best practices.

::|The S@ib|::
MVP C#.NET
Messages postés
9
Date d'inscription
lundi 26 février 2007
Statut
Membre
Dernière intervention
21 juin 2010

Bonjour,

Avec un peu de retard, je ne suis pas tout à fait d'accord.
On peut en effet avoir besoin de catch vides dans certains cas.

J'ai eu besoin récemment de calculer la taille d'un dossier (avec sous dossiers) (avec une fonction récursive évidemment).
Plutôt que de prévoir tout les cas possibles (en étant quasi sûr qu'on va en oublier) j'ai encadrer tout ça par un try catch vide.
Au moins les dossiers inaccessibles ou posant problème ne sont simplement pas pris en compte et ne polluent pas l'utilisateur avec des erreurs incessantes.

Si le catch vide fait partie des instructions disponibles, c'est qu'il sert à quelque chose ... sinon le compilo l'aurait interdit !

C'est un peu comme ceux qui disent que le goto ne sert à rien : il fait partie des intructions et de l'algorithmie de base et peut dans certains cas (très très rares) être utile !

Donc best practices ou pas, on ne dit jamais jamais ! :)

@+