将数据从文本文件解析为数组

时间:2011-05-01 12:38:40

标签: c# winforms c#-4.0

我有一个包含以下数据的平面文本文件;

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

数据保存在服务器上(例如http://domain.com/info.dat),我想读取此文本文件并将其插入数组(年龄和名称)。我想忽略第一行(以下是......)。

我已经使用webclient对代码进行了排序以获取数据文件,并使用streamreader打开dat文件的代码如下所示;

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

                        foreach (string s in channels)
                        {  

                        }
                    }
                }

上述代码的问题在于将其输入到具有正确列的数组中。谁能给我一些指示?

非常感谢

3 个答案:

答案 0 :(得分:5)

使用一些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>您可以ToListToArray点击List<Person>Person[],或者您可以简单地使用foreach循环结果。

更新:这里是Person类,使其更具功能性。

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

答案 1 :(得分:1)

你可以这样做。 (没有错误检查,您可能希望在解析年龄等时检查错误。

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]});       
  }
}

答案 2 :(得分:0)

您应该使用Dictionary而不是Array来存储数据。 示例代码:

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]);
}