2013-01-18 3 views
3

У меня есть текстовый файл, который выглядит следующим образом:C# разбить текстовый файл в 2 мерных массив строк в

John,Gauthier,blue,May 
Henry,Ford,Red,June 
James,Bond,Orange,December 

Я хочу разделить его на двухмерном массив строк, так что я мог бы отделить друг линии, то каждый из слов. Пример:

mystring[0][0] = "John" 
mystring[1][3] = "June" 
mystring[2][2] = "Orange" 

Вот что я прямо сейчас:

string[] words = new string [100]; 
System.IO.StreamReader myfile = new System.IO.StreamReader("c:\\myfile.csv"); 

while (fichier.Peek() != -1) 
{ 
    i++; 
    words = myfile.ReadLine().Split(','); 

} 

я застрял. Я могу разбить его на одномерный массив строк, но не на двумерный массив строк. Думаю, мне нужно разбить его два раза; Первый раз с '\ n' и второй раз с ',', а затем поместите эти два вместе.

ответ

8

Это на самом деле один вкладыш:

File.ReadLines("myfilename.txt").Select(s=>s.Split(',')).ToArray() 

Поскольку это начинающий вопрос, вот что происходит:

File.ReadLines (имя файла) возвращает коллекцию всех строк в тексте файл

.Select является метод расширения, который принимает функцию

s => ДЕЛЕНИЕ («») является функция, она разбивает строку s всеми запятыми и возвращает обр ай строк.

.ToArray() принимает коллекцию строковых массивов, созданных с помощью .Select и делает массив из этого, поэтому вы получаете массив массивов.

+0

Jea, но я думаю, что он уже имеет то же самое, что он, Что расколоть сначала, как имена и второй в разных массивах, не один большой массив – Venson

+0

Подтвердил этот ответ с помощью linqPad –

0

Попробуйте

var str = File.ReadAllText("myfile.csv"); 


var arr = str.Split(new string[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries); 

    var multi = arr.Select(x => x.Split(',')).ToArray(); 
0

Try:

var First = new string [100]; 
var Sec = new string [100]; 
System.IO.StreamReader myfile = new System.IO.StreamReader("c:\\myfile.csv"); 

while (fichier.Peek() != -1) 
{ 
    i++; 
    var buff = myfile.ReadLine().Split(','); 
    First[i] = buff[0]; 
    Sec[i] = buff[1]; 
} 

Другая идея, использовать XML serilizer для serilize вашего луночное объекта. Два расширения для этого:

public static void SaveAsXML(this Object A, string FileName) 
    { 
     var serializer = new XmlSerializer(A.GetType()); 
     using (var textWriter = new StreamWriter(FileName)) 
     { 
      serializer.Serialize(textWriter, A); 
      textWriter.Close(); 
     } 
    } 

    public static void LoadFromXML(this Object A, string FileName) 
    { 
     if (File.Exists(FileName)) 
     { 
      using (TextReader textReader = new StreamReader(FileName)) 
      { 
       XmlSerializer deserializer = new XmlSerializer(A.GetType()); 
       A = (deserializer.Deserialize(textReader)); 
      } 
     } 
    } 

Добавить чем в любом статическом классе и называют:

YourSaveClassWhitchContainsYourArray.SaveAsXML("Datastore.xml"); 

или

YourSaveClassWhitchContainsYourArray.LoadFromXML("Datastore.xml"); 
Смежные вопросы