2015-05-14 5 views
0

Я пытаюсь назначить переменные (var1-4) для четырех частей моего второго (lines2) массива.Назначение переменных массива

static void Main(string[] args) 
{ 
    string var1; 
    string var2; 
    string var3; 
    string var4; 

    string readContents; 
    using (StreamReader streamReader = new StreamReader(@"File.txt")) 
    { 
     readContents = streamReader.ReadToEnd(); 
     string[] lines = readContents.Split('\r'); 
     foreach (string s in lines) 
     { 
      string[] lines2 = s.Split('\t'); 
      foreach (string s2 in lines2) 
      { 
       var1 = lines2[0]; 
       var2 = lines2[1]; 
       var3 = lines2[2]; 
       var4 = lines2[3]; 
       Console.WriteLine(var4); 
      } 
     } 
    } 
} 

На данный момент я имею вопрос, где var1 возвращает данные, которые я хочу, но консоль показывает больше значения 8х, чем на самом деле существует в моем файле. И я всегда получаю IndexOutOfRangeException на каждые var после первого во время выполнения. Не уверен, что вызывает одну из этих ошибок.

EDIT: Данные из текстового файла - отделенные друг от друга язычка:

2015-04-19 00:00:00 HostName.ErrorLevel IP Address "Error Message" 
2015-04-19 00:00:00 HostName.ErrorLevel IP Address "Error Message" 
2015-04-19 00:00:01 HostName.ErrorLevel IP Address "Error Message" 
+0

Вы можете разместить данные в текстовом файле, чтобы мы могли лучше идея, что происходит? – TomSlick

+5

Вы 'foreach'-через каждую строку в' lines2', но никогда не используете 's2'. Вот почему вы слишком много пишете на консоли. Исключение, скорее всего, связано с тем, что в строке содержится менее 4 элементов, разделенных вкладкой. Это должно сделать обе проблемы очевидными. –

+0

Если вы установили точку останова в первой строке и шаг за шагом отлаживаете, вы получаете ожидаемый результат на этих двух разбиениях? –

ответ

1

Вы можете либо перебор результатов Split и сделать что-то с каждыми или получить доступ к результатам по индексу. Ваш код, делающий и то, и другое, имеет шанс быть правильным, он будет повторять назначение несколько раз.

Кроме того, вы не проверяете количество деталей в строке и получаете «индекс вне диапазона» в качестве результата.

Существует уже метод, который читает все строки в перечислимы - File.ReadAllLines, поэтому единственное, что остается, чтобы правильно разделить каждую строку:

foreach (string s in lines) 
    { 
     string[] lines2 = s.Split('\t'); 
     if (lines2.Length == 4) 
     { 
      var1 = lines2[0]; 
      var2 = lines2[1]; 
      var3 = lines2[2]; 
      var4 = lines2[3]; 
      Console.WriteLine(var4); 
     } 
     else 
     { 
      // report error? 
     } 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^