C # Попытка сравнить строки текстового поля и подсчитать количества для (иногда дублирующихся) строк с разными количествами - PullRequest
0 голосов
/ 19 февраля 2012

Я все еще новичок в программировании и создаю некоторые инструменты для моих сотрудников на работе для некоторых лишних задач. Как я сказал в заголовке, я хотел бы сделать что-то вроде этого:

Textbox1 может иметь:

яблоки 3

Яблоки 4

Апельсины 1

Я бы хотел перенести это в текстовое поле 2 так:

яблоки 7

Апельсины 1

Он принял во внимание, что яблоки появились дважды, и добавил общее количество. У меня до сих пор не работает код enter code here, и я уже некоторое время борюсь с этим:

{
            foreach (var lines in textBox1.Lines)
            {

                    string line = lines.TrimEnd();

                    if (line.Length > 0)
                    {
                        int findIndex = line.LastIndexOf(" ") + 1;
                        var qty = (line.Substring(findIndex));
                        int lineInt;

                        try
                        {
                            lineInt = Convert.ToInt32(qty);  //convert whatever the qty detected was, to int32

                            {
                                textBox2.Text += line + lineInt+Environment.NewLine.ToString();
                            }
                        }

                        catch (Exception)
                        {
                        }
                    }

                }
            }

Результат:

яблоки 33

Яблоки 44

Апельсины 11

Что не так, потому что я не удаляю поле начального количества в конце, и я также не суммирую целочисленное значение правильно, чтобы поставить в конец, я просто присоединяю количество в конце. Моя конечная цель - составить список множества различных продуктов / количеств и суммировать их и посмотреть, какие количества могли измениться по сравнению с предыдущими заказами, выполнив заданную разницу / дельта или что-то подобное, чего я не могу сделать, пока не получу правильные данные в textbox2. Самое сложное для меня - объединить дублирующиеся линии продуктов, но все же складывать их общее количество. Любое понимание будет с благодарностью, спасибо за чтение!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2012
        string previousLine = "";
        foreach (var lines in textBox1.Lines) 
        { 
                string line = lines.TrimEnd(); 
                if (line.Length > 0 && previousLine != "") 
                { 
                    int findIndex = line.LastIndexOf(" ") + 1;
                    //check to ensure the item in this line is equal to the item in the previous line 
                    if(line.substring(0, findIndex - 2) == previousLine.substring(0, findIndex - 2))
                    {
                        var qty = (line.Substring(findIndex)); 
                        int lineInt; 

                        try 
                        {
                            lineInt = Convert.ToInt32(qty);  //convert whatever the qty detected was, to int32 
                            {
                                int previousStringNum = Int32.TryParse(previousLine.Substring(previousLine.LastIndexOf(" ") + 1)

                                int sumOfLineAndPreviousLine = lineInt + previousStringNum;
                                //set the line variable equal to its new value which includes the value from the previous line
                                line = line.substring(0, line.length - 2) + sumOfLineAndPreviousLine.ToString();
                                //textBox2.Text += line + lineInt+Environment.NewLine.ToString();
                                //set the previousLine variable equal to line so that the next pass of the foreach loop if that object equals the object in previousLine, it will continue to add them... 
                                previousLine = line;

                            }
                        }
                        catch (Exception)
                        {

                        }
                    }
                    else
                    {
                         //the object in this line is not equal to the object in the previousLine
                         //so append the previousLine to the TextBox2.Text and then
                         //set the previousLine object equal to the current Line so that on the 
                         //next pass of the loop will work correctly
                         textBox2.Text = textBox2.Text + previousLine;
                         previousLine = line;

                    }
                }  
        } 

Я считаю, что это может достичь того, что вы хотите, хотя это довольно ограничено.Это предполагает, что все объекты будут иметь только одну цифру.Код должен быть изменен для обработки двузначных чисел и т. Д.

0 голосов
/ 19 февраля 2012

Попробуйте это

ASPX

 <asp:Panel ID=pnl1 runat=server>    
    <asp:TextBox ID=TextBox1 runat=server></asp:TextBox>
    <asp:TextBox ID=TextBox2 runat=server></asp:TextBox>
    <asp:TextBox ID=TextBox3 runat=server></asp:TextBox>
    <asp:TextBox ID=TextBox4 runat=server></asp:TextBox>
    <asp:TextBox ID=TextBox5 runat=server></asp:TextBox>
    <asp:TextBox ID=TextBox6 runat=server></asp:TextBox>
    </asp:Panel>
    <br />
    Total
    <asp:Panel ID=Panel1 runat=server>    

    </asp:Panel>

    <asp:Button ID=btn runat=server Text=Total onclick="btn_Click" />

CS.Сиде

protected void btn_Click(object sender, EventArgs e)
        {
            Dictionary<string, int> obj = new Dictionary<string, int>();
            foreach (Control cn in pnl1.Controls)
            {
                if (cn.GetType() == typeof(TextBox))
                {
                    if (((TextBox)cn).Text.Trim() != "")
                    {
                        string[] spValue = ((TextBox)cn).Text.Split(' ');

                        if (obj.ContainsKey(spValue[0]))
                        {
                            obj[spValue[0]] = obj[spValue[0]] + Convert.ToInt32(spValue[1]);
                        }
                        else
                        {
                            obj.Add(spValue[0], Convert.ToInt32(spValue[1]));
                        }
                    }
                }
            }
            foreach (string k in obj.Keys)
            {
                TextBox tx = new TextBox();
                tx.Text = k + " " + obj[k].ToString();
                pnl1.Controls.Add(tx);
            }
        }
...