0

C#Windowsフォームアプリケーションが数字の列全体をリストに入れることができるようにするためのガイダンスが必要です。データはテキストベースになるため、たとえば次のような4つの列が含まれます。

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

テキスト全体をリストに入れることができますが、4 つの異なるリストを作成し、それが理にかなっている場合は各列を独自のリストに入れたいと考えています。

各行を読んで、どのように分割してリストに追加する必要がありますか?

Ps。私はコードがおそらくこれを行うことができた最善の方法であるとは思っていません。

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

値を個別のリストに読み込むことはしません。別々のリストを維持する場合、すべてのリストの同期を維持することを心配する必要があります。1 行のすべての情報を保持するために使用できるオブジェクトを作成します。

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

次に、1 つの列の値だけを操作する必要がある場合は、LINQ を使用して必要な値だけをクエリできます。

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