Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 61 стр.

UptoLike

Составители: 

61
Задача 13 (2 способ решения): Из файла удалить слова, в которых
содержится хотя бы одна буква предпоследней строки.
Размышления о ходе решения задачи.
1. Первые четыре шага аналогичны первым четырем шагам в задаче 12 (2
способ решения). Для работы с файлами воспользуемся потоками.
Отметим, что обработка строки аналогична обработке строки в первом
способе решения задачи
.
2. Возникает вопрос о том, как найти последнюю строку. Если потоки
позволяют считывать построчно, то надо считывать построчно, пока не
закончится файл. Последняя считанная строка в файле будет последней.
И для выполнения этого действия потребуется проход по всему файлу.
В виде кодов эта реализация будет выглядеть следующим образом:
public string findLastString(string inFileName) {
string res = "";
using (StreamReader reader = File.OpenText(inFileName)) {
if (reader.Peek() < 0) {
return res;
}
res = reader.ReadLine();
}
return res;
}
3. После этого (первого прохода по файлу) у нас будет последняя строка.
Остальное решение будет аналогично решению задачи 12 (2 способ).
public class FileWorker {
public string findLastString(string inFileName) {
string res = "";
using (StreamReader reader = File.OpenText(inFileName)) {
if (reader.Peek() < 0) {
return res;
}
res = reader.ReadLine();
}
return res;
}
public void processFile(string inFileName, string outFileName)
{
try {
string lastLine = findLastString(inFileName);
using (StreamReader reader = File.OpenText(inFileName)) {
using (StreamWriter writer =
File.CreateText(outFileName)) {
while (true) {
if (reader.Peek() < 0) {
break;
}
string tempStr = reader.ReadLine();
StringWorker worker = new StringWorker();
worker.str = tempStr;