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

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

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

Не смог до конца разобраться в коде. Делает ли код то, чего требует задание? Задание: Необходимо написать программу, ведущую подсчет статистики по файлу разными потоками (количество символов, количество слов, количество строк, количество символов-цифр, слова разделяются специальными символами разделителями, задаваемыми пользователем). Операции доступа к разделяемым ресурсам нужно осуществлять внутри критической секции. У критической секции имеется два метода: вход и выход. Весь программный код от точки входа до точки выхода принадлежит критической секции. Код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Threading.Tasks;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace ConsoleApplication1
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. string data = File.ReadAllText("test.txt");
  16. List<char> NotDigits = new List<char>();
  17. List<char> NotLetters = new List<char>();
  18. for (int i = 0; i < data.Length; i++)
  19. {
  20. char c = data[i];
  21. if (!Char.IsLetter(c) && !NotLetters.Contains(c)) NotLetters.Add(c);
  22. if (!Char.IsDigit(c) && NotDigits.Contains(c)) NotDigits.Add(c);
  23. }
  24. var nums = data.Split(NotDigits.ToArray(),
  25. StringSplitOptions.RemoveEmptyEntries)
  26. .Select(int.Parse);
  27. string count = nums.Count().ToString();
  28. File.WriteAllText("out.txt", count);
  29. int max = nums.Max();
  30. int min = nums.Min();
  31. Console.WriteLine("MAX = {0}, MIN = {1}", max, min);
  32. string[] words = data.Split(NotLetters.ToArray(),
  33. StringSplitOptions.RemoveEmptyEntries);
  34. foreach (var s in words)
  35. Console.WriteLine(s);
  36. Thread t = new Thread(CountSymb);
  37. t.Start(data);
  38. Thread t2 = new Thread(CountLine);
  39. t2.Start(data);
  40. }
  41. private void CountSymb(string data)
  42. {
  43. Console.WriteLine("{0}", data.Length);
  44. }
  45. private void CountLine(string data)
  46. {
  47. FileStream fs = new FileStream(@"D:\Test.txt");
  48. string curLine;
  49. int count = 0;
  50. StreamReader sr = new StreamReader(fs);
  51. while ((curLine = sr.ReadLine()) != null)
  52. {
  53. Console.WriteLine(curLine);
  54. count += curLine.Length;
  55. }
  56. fs.Close();
  57. Console.WriteLine("В файле: {0} строк", count);
  58. }
  59. }
  60. }

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

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

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


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

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

15   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы