Подсчет статистики по файлу разными потоками - C#

Узнай цену своей работы

Формулировка задачи:

Не смог до конца разобраться в коде. Делает ли код то, чего требует задание? Задание: Необходимо написать программу, ведущую подсчет статистики по файлу разными потоками (количество символов, количество слов, количество строк, количество символов-цифр, слова разделяются специальными символами разделителями, задаваемыми пользователем). Операции доступа к разделяемым ресурсам нужно осуществлять внутри критической секции. У критической секции имеется два метода: вход и выход. Весь программный код от точки входа до точки выхода принадлежит критической секции. Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string data = File.ReadAllText("test.txt");
            List<char> NotDigits = new List<char>();
            List<char> NotLetters = new List<char>();
            for (int i = 0; i < data.Length; i++)
            {
                char c = data[i];
                if (!Char.IsLetter(c) && !NotLetters.Contains(c)) NotLetters.Add(c);
                if (!Char.IsDigit(c) && NotDigits.Contains(c)) NotDigits.Add(c);
            }
            var nums = data.Split(NotDigits.ToArray(),
                StringSplitOptions.RemoveEmptyEntries)
                .Select(int.Parse);
            string count = nums.Count().ToString();
            File.WriteAllText("out.txt", count);
            int max = nums.Max();
            int min = nums.Min();
            Console.WriteLine("MAX = {0}, MIN = {1}", max, min);
            string[] words = data.Split(NotLetters.ToArray(),
                StringSplitOptions.RemoveEmptyEntries);
            foreach (var s in words)
                Console.WriteLine(s);
            Thread t = new Thread(CountSymb);
            t.Start(data);
            Thread t2 = new Thread(CountLine);
            t2.Start(data);
            
        }
        private void CountSymb(string data)
        {           
            Console.WriteLine("{0}", data.Length);
        }
        private void CountLine(string data)
        {
            FileStream fs = new FileStream(@"D:\Test.txt");
            string curLine;
            int count = 0;
            StreamReader sr = new StreamReader(fs);
            while ((curLine = sr.ReadLine()) != null)
            {
                Console.WriteLine(curLine);
                count += curLine.Length;
            }
            fs.Close();
            Console.WriteLine("В файле: {0} строк", count);
        }
    }
}

Решение задачи: «Подсчет статистики по файлу разными потоками»

textual
Листинг программы
if (!Char.IsDigit(c) && NotDigits.Contains(c)) NotDigits.Add(c);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы