0

我希望 c# windows 窗体应用程序能够将一整列数字放入列表中,数据将是文本库,因此例如它将包含 4 列,如下所示:

100 200 300 400
100 200 300 400
101 292 83  7312

我可以将整个文本放入一个列表中,但我希望有 4 个不同的列表,如果有意义的话,将每一列放入自己的列表中。

我是否必须阅读每一行以及如何将拆分然后添加到列表中?

附言。我不希望代码只是能够做到这一点的最好方法,如果我走在正确的轨道上?

4

2 回答 2

0

你在正确的轨道上。我个人喜欢File.ReadAllLines(@"yourTxtFile")。在我看来,它使代码变得简单。

foreach(var line in File.ReadAllLines(@"yourTxtFile"))
{
   // split and add to the respective lists here
}
于 2013-03-01T21:12:20.090 回答
0

我不会将这些值读入单独的列表中。如果您维护单独的列表,则需要担心保持所有列表同步。我将创建一个对象,您可以使用它来保存一行中的所有信息。

public class Entry
{
    // give meaningful names to the column values
    public int Column1 { get; set; }
    public int Column2 { get; set; }
    public int Column3 { get; set; }
    public int Column4 { get; set; }

    // overriden to make re-constructing the line for the file easier
    public override string ToString()
    {
        // assuming tab as the delimiter, replace with whatever you're using
        return string.Format("{0}\t{1}\t{2}\t{3}", this.Column1, this.Column2,
            this.Column3, this.Column4);
    }
}

然后,当您读取值时,您可以执行以下操作:

var entries = new List<Entry>();

using (var fStream = File.OpenRead(fileLocation))
using (var reader = new StreamReader(fStream))
{
    while (!reader.EOF)
    {
        var line = reader.ReadLine();

        // assuming tab as the delimiter, replace with whatever you're using
        var parts = line.Split('\t');

        if (parts.Length != 4)
        {
            // whatever you need to do for error handling
            // you could throw an error or just skip to the next line
            continue;
        }

        entries.Add(
            new Entry
            {
                // ideally you'd use int.TryParse to provide further error handling
                Column1 = int.Parse(parts[0]),
                Column2 = int.Parse(parts[1]),
                Column3 = int.Parse(parts[2]),
                Column4 = int.Parse(parts[4])
            }
        );
    }
}

然后,如果您只需要与一个列值进行交互,您可以使用 LINQ 来查询您需要的值

var column1Values = from entry in entries
                    select entry.Column1;
于 2013-03-01T22:01:26.497 回答