Практическая работа №29, 30, 31, 32
Название практической работы:создание проектов с использованием текстовых файлов.
Создание проектов на обработку текстовых файлов
Цель работы: 1) освоить приемы работы с текстовыми файлами;
знания (актуализация)
· понятие файла;
· правила организации доступа к файловым данным;
· причины возникновения распространенных ошибок при работе с файлами;
умения:
· создавать проекты для работы с текстовыми файлами.
Теоретический материал
Файл — это именованная структура данных, представляющая собой последовательность элементов данных, причем количество элементов последовательности практически не ограничено. В первом приближении файл можно рассматривать как массив переменной длины неограниченного размера.
В пространстве имен System.IO предусмотрено четыре класса, которые предназначены для работы с файловой системой компьютера, т.е для создания, удаления переноса и т.д. файлов и каталогов:
- Directory и Fi1е реализуют свои возможности с помощью статических методов, поэтому данные классы можно использовать без создания соответствующих объектов (экземпляров классов);
- DirectoryInfo и FileInfo обладают схожими функциональными возможностями c Directory и Fi1е, но порождены от класса FileSystemInfo и поэтому реализуются путем создания соответствующих экземпляров классов.
Для записи и чтения текстовых файлов очень удобно использовать классы StreamWriter и StreamReader.
Примерчтения и записи текстовых файлов
// Подключаем пространство имен System.IO:
using System.IO;
// Работаем с файлом
private void buttonlO_Click(object sender, EventArgs e)
{
string fileName = @"c:\wutemp\text.txt";
// Если файл с указанным именем существует – прекращаем с ним работу
if (File.Exists(fileName))
{
MessageBox.Show("Указанный файл уже существует.", fileName);
return;
}
// Создаем новый файл и записываем в него информацию
StreamWriter sr = File.CreateText(fileName);
sr.WriteLine("Раз, два, три, четыре, пять");
sr.WriteLine("1, 2, 3. 9 1/2 и так далее");
sr.WriteLine("Я изучаю {0} и {1}.", "С#", "Visual Basic");
sr.Close();
}
Пример добавления текста в существующий файл:
private void buttonll_Click(object sender, EventArgs e)
{
string fileName = @"c:\wutemp\text.txt";
// Добавляем одну строчку в текстовый файл
using (StreamWriter sw = File.AppendText(fileName))
{
sw.WriteLine("Добавили еще одну строчку");
}
}
Примерпострочного чтения текстового файла
private void buttonl2_Click(object sender, EventArgs e)
{
// 1 способ
using (StreamReader sr= new StreamReader (@"c:\ text.txt"))
{ string line;
// Читаем каждую строку, пока не достигнем конца файла
while ((line = sr.ReadLine()) != null)
{
listBox1.Items.Add(line);
}
// 2 способ
using (StreamReader sr = File.OpenText (fileName) )
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
listBox1.Items.Add(line);
}
}
}
Ход работы
1. Создайте проект для решения предложенных ниже задач.
Рекомендации: старайтесь работать с данными из файлов с использованием классов.
Написать программу, которая создает файл «числа.txt» и записывает в него 5 введенных пользователем целых чисел. Убедитесь, что каждое число находится в отдельной строке. Определите сумму и произведение этих чисел. Результат допишите в другой файл. | |
Написать программу, которая вычисляет среднее арифметическое чисел, находящихся в файле. | |
На городской олимпиаде по информатике участникам было предложено выполнить 3 задания, каждое из которых оценивалось по 25-балльной шкале. Известно, что общее количество участников первого тура олимпиады не превосходит 250 человек. На вход программы подаются сведения о результатах олимпиады. В первой строке вводится количество участников N. Далее следуют N строк, имеющих следующий формат: <Фамилия> <Имя> <Баллы> Здесь: - <Фамилия> – строка, состоящая не более чем из 20 символов; - <Имя> – строка, состоящая не более чем из 15 символов; - <Баллы> – строка, содержащая три целых числа, соответствующих баллам, полученным участником за каждое задание первого тура. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> могут быть разделены пробелами и символами табуляции (разным количеством). Примеры входных строк: Петрова Ольга 25 18 16 Калиниченко Иван 14 19 15 Определите фамилию и имя участника, набравшего максимальное количество баллов. Если среди остальных участников есть ученики, набравшие такое же количество баллов, то их фамилии и имена также следует вывести. При этом имена и фамилии можно выводить в произвольном порядке. | |
На вход программы подаются сведения о результатах соревнований по студенческому многоборью. Многоборье состоит из соревнований по четырем видам спорта, участие в каждом из которых оценивается баллами от 0 до 10 (0 баллов получает ученик, не принимавший участия в соревнованиях по данному виду спорта). Победители определяются по наибольшей сумме набранных баллов. Известно, что общее количество участников соревнований не превосходит 100. В первой строке вводится количество учеников, принимавших участие в соревнованиях, N. Далее следуют N строк, имеющих следующий формат: <Фамилия> <Имя> <Баллы> Здесь: - <Фамилия> – строка, состоящая не более чем из 20 символов; - <Имя> – строка, состоящая не более чем из 15 символов; - <Баллы> - строка, содержащая четыре целых числа, соответствующих баллам, полученным на соревнованиях по каждому из четырех видов спорта. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> могут быть разделены пробелами и символами табуляции (разным количеством). Примеры входных строк: Иванова Мария 5 8 6 3 Петров Сергей 9 9 5 7 Напишите программу, которая будет выводить на экран фамилии и имена трех лучших участников многоборья. Если среди остальных участников есть ученики, набравшие то же количество баллов, что и один из трех лучших, то их фамилии и имена также следует вывести. При этом имена и фамилии можно выводить в произвольном порядке. | |
В некотором вузе абитуриенты проходят предварительное тестирование, по результатам которого могут быть допущены к сдаче вступительных экзаменов в первом потоке. Тестирование проводится по двум предметам, по каждому предмету абитуриент может набрать от 0 до 100 баллов. При этом к сдаче экзаменов в первом потоке допускаются абитуриенты, набравшие по результатам тестирования не менее 30 баллов по каждому из двух предметов. На вход программы подаются сведения о результатах предварительного тестирования. Известно, что общее количество участников тестирования не превосходит 500. В первой строке вводится количество абитуриентов, принимавших участие в тестировании, N. Далее следуют N строк, имеющих следующий формат: <Фамилия> <Имя> <Баллы> Здесь: - <Фамилия> – строка, состоящая не более чем из 20 символов; - <Имя> – строка, состоящая не более чем из 15 символов; - <Баллы> – строка, содержащая два целых числа, соответствующих баллам, полученным на тестировании по каждому из двух предметов. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> могут быть разделены пробелами и символами табуляции (разным количеством). Примеры входных строк: Ветров Роман 68 59 Анисимова Екатерина 64 88 Напишите программу, которая будет выводить на экран фамилии и имена абитуриентов, потерпевших неудачу, то есть не допущенных к сдаче экзаменов в первом потоке. При этом фамилии должны выводиться в алфавитном порядке. | |
Напишите программу, которая дописывает в файл «phone.txt» фамилию, имя, и номер телефона, например, вашего товарища. Если файла на диске нет, то программа должна создать его. Добавьте в проект возможность поиска нужных данных как по телефону, так и по фамилии человека. Если в справочнике есть люди с одинаковыми фамилиями, то программа должна выводить список всех этих людей со своими телефонами. |
2. Ответьте на контрольные вопросы:
- Что такое файл? В чем заключаются особенности текстового файла?
- В чем преимущество использования файлов по сравнению с массивами?
- Какие операции можно производить с файлами?
- Может ли файл состоять из одного элемента?
- Какой файл называется текстовым?
- Можно ли текстовый файл открыть одновременно для чтения и для записи?
3. Оформите и сдайте отчет преподавателю.