создать цикл на основе 30 пользователей? - PullRequest
0 голосов
/ 15 сентября 2009

Я создаю приложение, которое заполняет 30 текстовых полей значениями, основанными на результате подсчета слов.

в окончательной версии будет 30 слов, но в этот тест включены только 3 из них

Как ты собираешься сделать это в цикле?

    int[] totX = new int[30];


    string nav1 = "test1";
    string nav2 = "test2";
    string nav3 = "test3";



    public Form1()
    {

        using (StreamReader sr = new StreamReader(@"c:\temp\output.txt"))
        {
            var total = 0;

            while (!sr.EndOfStream)
            {
                var counts = sr
                    .ReadLine()
                    .Split('"')
                    .GroupBy(s => s)
                    .Select(g => new { Word = g.Key, Count = g.Count() });
                var wc = counts.SingleOrDefault(c => c.Word == nav1);
                total += (wc == null) ? 0 : wc.Count;
                totX[0] = total;
            }

        }
        using (StreamReader sr = new StreamReader(@"c:\temp\output.txt"))
        {
            var total = 0;

            while (!sr.EndOfStream)
            {
                var counts = sr
                    .ReadLine()
                    .Split('"')
                    .GroupBy(s => s)
                    .Select(g => new { Word = g.Key, Count = g.Count() });
                var wc = counts.SingleOrDefault(c => c.Word == nav2);
                total += (wc == null) ? 0 : wc.Count;
                totX[1] = total;
            }

        }
        using (StreamReader sr = new StreamReader(@"c:\temp\output.txt"))
        {
            var total = 0;

            while (!sr.EndOfStream)
            {
                var counts = sr
                    .ReadLine()
                    .Split('"')
                    .GroupBy(s => s)
                    .Select(g => new { Word = g.Key, Count = g.Count() });
                var wc = counts.SingleOrDefault(c => c.Word == nav3);
                total += (wc == null) ? 0 : wc.Count;
                totX[2] = total;
            }

        }

        InitializeComponent();


    }

    private void button1_Click_1(object sender, EventArgs e)
    {
        textBox1.Text = totX[0].ToString();
        textBox2.Text = totX[1].ToString();
        textBox3.Text = totX[2].ToString();

    }


}

}

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

Сделайте регулярный цикл for вокруг вашего потока и используйте счетчик в качестве индекса в вашем массиве totX. Строка навигации также может быть создана во время каждой итерации.

Кроме того, на самом деле нет необходимости читать один и тот же файл 30 раз, поэтому я предлагаю вам прочитать файл один раз, а затем изучить его по мере необходимости.

0 голосов
/ 15 сентября 2009

THX Брайан получил это работает

int[] totX = new int[3];
    string[] navX = new string[] {"test1", "test2", "test3"};


    public Form1()
    {

        for (int i = 0; i < 3; i++)
        {
            using (StreamReader sr = new StreamReader(@"c:\temp\output.txt"))
            {

                var total = 0;

                while (!sr.EndOfStream)
                {
                    var counts = sr
                        .ReadLine()
                        .Split('"')
                        .GroupBy(s => s)
                        .Select(g => new { Word = g.Key, Count = g.Count() });
                    var wc = counts.SingleOrDefault(c => c.Word == navX[i]);
                    total += (wc == null) ? 0 : wc.Count;
                    totX[i] = total;
                }

            } 
        }

        InitializeComponent();


    }


    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = totX[0].ToString();
        textBox2.Text = totX[1].ToString();
        textBox3.Text = totX[2].ToString();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...