0

C# 中有一些很酷的类、技巧和捷径。我知道这一点,但我使用 C# 的工作不足以让他们记住它们。

一个很酷的技巧是这个。如果您从文件中读取数据,该数据以类似的逐行结构排列,其中每行排列在由制表符隔开的列中,则可以将数据读入 C# 中的一种类,然后您可以解析出一个通过简单地执行“for each”命令来获取数据列。有谁知道这是如何做到的?

基本上,我所说的就是这个。我了解如何逐行读取文件:

int counter = 0;
string line;
System.IO.StreamReader file =
   new System.IO.StreamReader(filename);

while ((line = file.ReadLine()) != null)
{
    Console.WriteLine(line);
    counter++;
}

file.Close();

Console.WriteLine(line);现在,如果输入文件中的行列由 /t(制表符)分隔,我将如何替换将自动将数据组织到类成员中的代码?

4

2 回答 2

2

你可以打电话给line.Split('\t')这会给你string[]数组。然后,您可以将每个元素解析为正确的数据类型。

MyData LineToMyData(string line)
{
    try
    {
        string[] arr = line.Split('\t');

        return new MyData()
        {
            Time = DateTime.Parse(arr[0]),
            Name = arr[1],
            Age = Int32.Parse(arr[2])
        };
    }
    catch (Exception ex)
    {
        throw new ArgumentException("line", ex);
    }
}
于 2012-08-13T19:02:04.727 回答
0

好吧,我认为您需要一堂课:

public class Stuff
{
    public string field1 {get; set;}
    public string field2 {get; set;}
    public string fieldn {get; set;}
    public Stuff()
    {
        field1 = "";
        field2 = "";
        fieldn = "";
    }
}

然后在 While-->read 之前创建一个新类的列表。在 while-->read 中,创建你的类,并使用上面提到的 split 填充数据。

List<Stuff> lotsaStuff = new List<Stuff>();        
while ((line = file.ReadLine()) != null)         
{         
    string[] fields = line.Split('\t');
    Stuff newStuff = new Stuff();
    newStuff.field1 = fields[0].ToString();
    newStuff.field2 = fields[1].ToString();;
    newStuff.fieldn = fields[2].ToString();;
    lotsaStuff.Add(newStuff);         
}

文件关闭后,您可以使用您的列表:

foreach (Stuff mystuff in lotsaStuff)
{
    if (mystuff.field2 == "useME")
    {
        //do something here...
    }
}

您将希望将数据类型(为简单起见,我使用所有字符串)与您的数据相匹配,无论是在类中,还是在您从读取的行中填充类时。

于 2012-08-13T19:33:22.253 回答