在ASP.Net中使用C#计算每个组的模式/字符串出现次数

时间:2017-01-30 04:30:11

标签: c# asp.net string file-upload

这是示例文本文件

enter image description here

行按日期分类,每行日期可以重复,例如,12月1日和2日有两个条目。 预期输出应该计算模式" D;"例如每个日期

2016-12-01 - 7 
2016-12-02 - 9
2016-12-03 - 5

这就是我目前所拥有的

 using (StreamReader stRead = new StreamReader(FileUpload1.PostedFile.InputStream))
        {

            while (!stRead.EndOfStream)
            {
                var readedLine = stRead.ReadLine();

                if (!string.IsNullOrWhiteSpace(readedLine))
                {

                    for (int j = 01; j <= 31; j++)
                    {
                        int readedLineTime = Convert.ToInt32(readedLine.Substring(09, 02));
                        if (readedLineTime == j)
                        {

                            MatchCollection collection = Regex.Matches(readedLine, @"D;");
                            countedChars = collection.Count;

                            textfileOutput += readedLine.Substring(0, 11) + " - " + countedChars + Environment.NewLine;

                        }
                    }
                }
                textfileContent += readedLine + Environment.NewLine;
                i++;
            }

            TextBox1.Text = textfileOutput;
            TextBox2.Text = textfileContent;
            Label1.Text = i.ToString();
            //Label1.Text =  this.TextBox1.Text.Split(new Char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Length.ToString();
          //  Label2.Text = filename;

        }

这是当前输出,它显示在多行文本框

2016-12-01  - 4
2016-12-01  - 3
2016-12-02  - 4
2016-12-02  - 5
2016-12-03  - 5

2 个答案:

答案 0 :(得分:1)

如果有效,请告诉我。

Dictionary<string, int> dMyobject = new Dictionary<string, int>();

while (!stRead.EndOfStream)
            {
                var readedLine = stRead.ReadLine();

                if (!string.IsNullOrWhiteSpace(readedLine))
                {

                    int readedLineTime = Convert.ToInt32(readedLine.Substring(09, 02));
                    string sDate = readedLine.Substring(0, 11);

                    MatchCollection collection = Regex.Matches(readedLine, @"D;");
                    countedChars = collection.Count;

                    if (!dMyobject.Keys.Contains(sDate))
                    {
                        dMyobject.Add(sDate, collection.Count);
                    }
                    else
                    {
                        dMyobject[sDate] = dMyobject[sDate] + collection.Count;
                    }
                }
                textfileContent += readedLine + Environment.NewLine;
                i++;
            }

您需要在某些集合中推送这些值。这样你就可以检查一下。

稍后,要将这些值用于打印或其他任何内容,请使用以下

foreach (var item in dMyobject)
            {
                Console.WriteLine(item.Key + "  " + item.Value);
            }

答案 1 :(得分:0)

 string line = "";
        Dictionary<string, int> list = new Dictionary<string, int>();
        int count;
        if (File.Exists(fileName) == true)
        {
            StreamReader objReader;
            objReader = new StreamReader(fileName);
            StreamWriter file = new StreamWriter(OutputfileName");
            do
            {
                line = objReader.ReadLine();
                string temp = line.Substring(0, 10);
                if (!list.ContainsKey(temp))
                {
                    MatchCollection collection = Regex.Matches(line, @"D;");
                    count = collection.Count;
                    list.Add(temp, count);
                }
                else
                {
                    MatchCollection collection = Regex.Matches(line, @"D;");
                    count = collection.Count;
                    var val = list[temp];
                    list[temp] = count + val;
                }
            } while (objReader.Peek() != -1);
            foreach (var j in list)
            {
                file.WriteLine(j.Key + "  -  " + j.Value+"\n");
            }
            file.Close();
        }