Разбор данных из текстового файла в массив - PullRequest
4 голосов
/ 01 мая 2011

У меня есть простой текстовый файл, который содержит следующие данные;

Following are the names and ages in a text file.
26|Rachel
29|Chris
26|Nathan

Данные хранятся на сервере (например, http://domain.com/info.dat), Я хотел бы прочитать этот текстовый файл и вставить его в массив (возраст и имя). Я хотел бы игнорировать первую строку (Следующий есть ....).

Я отсортировал код для получения файла данных с помощью веб-клиента и код для открытия файла данных с помощью Streamreader следующим образом:

using (StreamReader sr = new StreamReader(path))
                {
                    while (sr.Peek() >= 0)
                    {
                        string[] channels = Text.Split('|');

                        foreach (string s in channels)
                        {  

                        }
                    }
                }

Проблема с приведенным выше кодом заключается в том, что когда дело доходит до ввода его в массив с правильными столбцами. Кто-нибудь может дать мне несколько советов?

Большое спасибо

Ответы [ 3 ]

5 голосов
/ 01 мая 2011

Как насчет ответа, который использует некоторое LINQ:

var results = from str in File.ReadAllLines(path).Skip(1)
              where !String.IsNullOrEmpty(str)
              let data = str.Split('|')
              where data.Length == 2
              select new Person { Age = Int32.Parse(data[0], NumberStyles.Integer, CultureInfo.CurrentCulture), Name = data[1] };

results теперь IEnumerable<Person>, что вы можете сделать ToList или ToArray, чтобы получить List<Person> или Person[], или вы можете просто использовать результаты с циклом foreach.

ОБНОВЛЕНИЕ: вот класс Person, необходимый для повышения его функциональности.

public class Person
{
   public int Age { get; set; }
   public string Name { get; set; }
}
1 голос
/ 01 мая 2011

Вы могли бы сделать что-то вроде этого.(Проверка ошибок отсутствует, вы можете проверить наличие ошибок при разборе возраста и т. Д.

class Person
{
  string Name {get;set;}
  int Age {get;set;}
}

List<Person> people = new List<Person>();
string line;
using (StreamReader sr = new StreamReader(path))
{
  sr.ReadLine();
  while ((line == sr.ReadLine()) != null)
  {
    string[] channels = line.Split('|');    
    people.Add(new Person() {Age=int.Parse(channels[0]), Name=channels[1]});       
  }
}
0 голосов
/ 01 мая 2011

Вы должны использовать словарь, а не массив для хранения данных. Пример кода:

FileStream fs = new FileStream("filename");
Dictionary<int,string> dict = new Dictionary<int,string>();
string line = "";
fs.ReadLine(); //skip the first line
while( (line = fs.ReadLine()) != null)
{
    string parts = line.split("|".ToCharArray());
    dict.Add(int.Parse(parts[0]), parts[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...