Подсчет статистики по файлу разными потоками - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д