2014-10-13 4 views
0

У меня есть файл, a.csv, который содержит квадратную матрицу п по п измерений, в следующем формате:Как читать файл CSV в межд [] C#

1,2,3 
4,5,6 
7,8,9 

И я хочу читать его в междунар [], что-то вроде:

StreamReader csv = new StreamReader("a.csv"); 
     int n = 3 
     string[] lines = new string[n]; 
     int[] intlines = new int[n] 
     int q = 0; 
     bool exiting = false; 
     do 
     { 
      if (csv.ReadLine() != "") 
      { 
       exiting = true; 
      } 

      if (exiting == false) 
      { 
       lines[q] = (((csv.ReadLine()).Split(",")).ToString()); 
       q++; 
      } 
     } 
     while (exiting == false);   
     Console.WriteLine("Finished Reading!"); 
     System.Threading.Thread.Sleep(500); 
     int q2 = 0;   
     foreach (string s in lines) 
     { 
      Console.WriteLine("lines: {0}", s); 
      intlines[q2] = int.Parse(s); 
     } 
     foreach (int i in intlines) 
     { 
      Console.WriteLine("intlines: {0}", i.ToString()); 
     } 
     Console.ReadKey(); 

на данный момент, есть что-то не так с ним, как компилятор происходит около полукокса [] s. В любом случае, как бы я мог читать горизонтальные линии и вертикальные линии, в двумерный int []? Спасибо.

+0

любая причина, по которой вы используете массив над списком? – jzm

+0

woah nelly. Так много того, что вы делаете, уже доступно в многочисленных библиотеках. Это можно сделать в 3-4 строках кода – Jonesopolis

+0

@malik В конечном счете, я хотел бы иметь двумерный int [] для управления, поэтому я бы предпочел не использовать списки. Я придумал: Список lines = new Список (); \t \t \t int Row = 0; \t \t \t в то время как (sr.EndOfStream!) \t \t \t { \t \t \t строка [] = Line sr.ReadLine() Split (''). \t \t \t lines.Add (Line); \t \t \t Строка ++; \t \t \t} – vasilescur

ответ

2

Попробуйте это:

using (var sr = new StreamReader("a.csv")) 
{ 
    var myArray = sr.ReadToEnd() 
     .Split('\n') 
     .SelectMany(s => s.Split(',') 
      .Select(x => int.Parse(x))) 
     .ToArray<int>(); 

    foreach(var x in myArray) 
     Console.WriteLine (x); 
} 
+0

Да, определенно что-то вроде этого или 'File.ReadAllLines' – Jonesopolis

+0

Большое вам спасибо, malik – vasilescur

0

Просто другой вариант от @ ответ Малика.

string[] data = File.ReadAllText(@"D:\code\cs\sample.txt") 
        .Split(new char[] { ',','\r','\n' }); 

int[] ints = data.Where(x => x.Count() != 0) 
       .Select(x => int.Parse(x)).ToArray(); 
foreach(var e in ints) 
{ 
    Console.WriteLine(e); 
} 
Смежные вопросы