Подсчет статистики по файлу разными потоками - 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);