2016-10-26 3 views
0

va essayer de rester court. Donc j'ai eu ce long code, j'ai continué à obtenir l'erreur System.IndexOutOfRangeException, bien que je vais commencer depuis le début, et c'est arrivé avec une seule boucle, donc je demande ici. Le code lui-même est très simple, le problème est définitivement quelque part ici.System.IndexOutOfRangeException lorsque vous parcourez une chaîne avec une variable croissante

using (var streamReader = new StreamReader(fileStream, Encoding.UTF8)) 
     { 
      string line; 
      while ((line = streamReader.ReadLine()) != null) 
      { 
       int i = 0; 
       for(;;) 
       { 
        if(line[i] == 's' && line[i+1] == 'e' && line[i+2] == ':') break; 
        i++; 

       } 
       i = i + 2; 
       line.Substring(i, line.Length - i); 
       Console.WriteLine(line); 
      } 

pour expliquer l'instruction if - Je cherche quand le mot « exercice: » se termine, je ne pouvais donc avoir ce qui suit comme une nouvelle chaîne.

Une idée de pourquoi je reçois cette erreur? Merci.

EDIT: fichier texte Voici exemple, je lirais:

Exercice: bench press. Groupes musculaires engagés poitrine, épaules

Exercice: Epaule. Groupes musculaires engagés épaules, biceps

Exercice: Rangées de câbles. Groupes musculaires engagés de retour, biceps

+0

Avez-vous des échantillons? –

+0

Oui, c'est parti: Exercice: développé couché. Groupes musculaires engagés poitrine, épaules Exercice: Epaule. Groupes musculaires engagés épaules, biceps Exercice: rangées de câbles. Groupe musculaire engagé, biceps \ n A dû écrire "\ n" parce que les commentaires n'ont pas de nouvelles lignes. Mon but après cette action serait de sauvegarder le nom (comme avoir une chaîne "bench press" puis de sauvegarder les groupes musculaires comme des chaînes séparées, et de les appliquer comme énumérations, mais d'abord j'ai besoin de résoudre ce problème.) – Gytis39

+0

want line.length - 1, pas line.length - i.Mais je ne pense pas que cela causerait votre problème.Etes-vous sûr qu'il des erreurs sur ces lignes? Cependant, je voudrais juste remplacer 'Exercise:' avec une chaîne vide et imprimer que En outre, quelle langue est-ce? Voulez-vous Console.WriteLine (line.Substring (i, line.Length - 1))? –

Répondre

2

Il n'est pas nécessaire d'utiliser une boucle pour ce que vous voulez. Vous pouvez utiliser des fonctions de chaîne pour extraire vos données, vous pouvez utiliser quelque chose comme ça:

String exercise = "Exercise:hello"; 
var hello = exercise.Substring (exercise.IndexOf (":"));