2016-02-05 2 views
-2

Я читаю текстовый файл многострочный, который, разделенных запятыми значения, как это:Итерация через IEnumerable массив строк

string[] lines = File.ReadAllLines(path); 
IEnumerable<string[]> resultArray1 = lines.Select(x => x.Split(',')); 

В режиме отладки, когда я смотрю на результаты, которые они выглядят следующим образом:

 
[0] drill down to see [0] "3.22" 
         [1] "4.00 

С помощью следующего цикла я могу распечатать значения, но я не уверен, как это сделать, не указывая [0] и [1], и я не уверен, как узнать, в какую строку я нахожусь файла. У меня это до сих пор:

foreach (string line in lines) 
    { 
     foreach (string[] item in resultArray1) 
     { 
      Console.WriteLine(item[0]); 
      Console.WriteLine(item[1]); 
     } 
    } 

Не могли бы вы показать мне, что мне не хватает?

+4

Что вы хотите делать с самой линией? Это поможет, если вы сможете дать нам более подробную информацию о том, чего вы пытаетесь достичь. –

+0

Вы хотите распечатать все содержимое каждого элемента resultArray1? Или только конкретные? – Marisa

+0

Не доверяйте результатам запросов Linq в отладчике. Linq просто добавляет enumarators вокруг конкретного списка, поэтому вы не можете сказать, каковы фактические результаты. Сначала гидратируйте в список или массив. –

ответ

2

Для распечатки отдельных элементов в string[], я хотел бы использовать for цикл:

foreach (string[] item in resultArray1) 
    { 
     for(var i = 0; i < item.length; i++) 
      Console.WriteLine(item[i]); 
    } 

Как для отслеживания какой строке файла вы находитесь, имеют отдельную переменную следить из этого или измените свой foreach на for. Ниже приведена переменная:

int line = 0; 
foreach (string line in lines) 
{ 
    //Code here 

    line++; 
} 
1

Если каждая строка содержит только два значения, вы можете сделать следующее.

public class Data 
{ 
    public string Property1 { set; get; } 
    public string Property2 { set; get; } 
} 

     string[] lines = File.ReadAllLines(path); 
     IEnumerable<Data> resultArray1 = lines.Select(x => 
     { 
      var line = x.Split(','); 
      return new Data 
      { 
       Property1 = line[0], 
       Property2 = line[1], 
      }; 
     }); 

     //And loop through the enumeration. 
     foreach (var line in resultArray1) 
     { 
      Console.WriteLine(line.Property1); 
      Console.WriteLine(line.Property2); 
     } 
+0

Это тоже выглядит полезным. Спасибо – Richh

+0

, когда у вас есть список или передача некоторых данных в качестве параметров. Всегда полезно использовать объекты вместо простых типов данных таких строк или bools..etc. –