Перенос части текста из одного файла в другой - C#
Формулировка задачи:
Задача:
_______
Распечатать анкетные данные студентов, получивших за все время обучения одну оценку 4, а все остальные оценки - 5.
_______
Предположим, дан фаил, в котором записаны фамилии и оценки, примерно так:
Gelz |5,4,5,5,5,5
Nevelson |3,4,5,5,5,5
Grimp |3,4,5,5,5,5
Brown |4,4,5,5,5,5
Harris |5,4,5,5,5,5
Lee |2,4,5,5,5,5
Lewis |4,5,5,5,5,5
Walker |5,4,5,5,5,5
Phillips |5,5,5,5,4,5
Из данного файла надо перенести данные только об студентах, получивших за все время обучения одну оценку 4, а все остальные оценки - 5.
Решение задачи: «Перенос части текста из одного файла в другой»
textual
Листинг программы
/// <summary>
/// Проверяем строку на следование условию
/// </summary>
/// <param name="line">Строка</param>
/// <returns>True - НЕ соответствует условию</returns>
private bool testLine(string line)
{
bool ex = false;
//Переменная, для считывания оценки
int num;
//Флаг наличия одной четвёрке в списке оценок
bool forFlag = false;
//Парсим строку на имена и оценки
var buff = line.Split(new string[] { "\t|" }, StringSplitOptions.None);
//Просто проверка на некорректные строки
if(buff.Length > 1)
{
//Парсим на отдельные оценки
buff = buff[1].Split(new char[] { ',' }, StringSplitOptions.None);
//Проходимся по всем оценкам
foreach(var s in buff)
{
//Парсим оценку в число, и сразу же проверяем на ошибки
if(int.TryParse(s, out num))
{
//Если найдена четвёрка
if (num == 4)
{
//И она уже не первая
if (forFlag)
{
//Говорим, что проверка не пройдена
ex = true;
//И тупо выходим из цикла
break;
}
//Говорим, что 4 уже была
forFlag = true;
}
//Если оценка меньше 4, то тупо выходим из цикла
else if (num < 4)
{
//Говорим, что проверка не пройдена
ex = true;
break;
}
//А, при пятёрках мы ничего не делаем
}
}
}
return ex;
}
/// <summary>
/// Перенос строк из одного файла в другой
/// </summary>
/// <param name="inputPath">Путь к файлу с входными данными</param>
/// <param name="outputPath">путь к файлу для записи данных</param>
private void moveLines(string inputPath, string outputPath)
{
//Считываем все строки из файла, и переводим их в список
var lines = System.IO.File.ReadAllLines(inputPath).ToList();
//Удаляем все строки, не соответствующие условию
lines.RemoveAll(testLine);
//Записываем отсортированные строки в файл
System.IO.File.WriteAllLines(outputPath, lines);
}