- •Решение прикладных задач в среде c#
- •Введение
- •1. Введение в visual studio.Net. Структура .Net-приложений. Метод main(). Создание проектов с помощью vs.Net
- •Задание 1
- •Операции ввода/вывода. Формат вывода
- •Задание 2
- •Пространство имён system. Класс math. Преобразование типов данных
- •Задание 3.1
- •Задание 3.2
- •4. Операторы языка программирования с#.
- •4.1. Операторы языка программирования с#
- •If (логическое выражение)
- •2. If (выражение)
- •4.2. Операции отношения и условные логические операции
- •Операции отношения в c#
- •Условные логические операции
- •Задания 4
- •Организация циклов
- •Задание 5.2
- •Обработка одномерных массивов
- •6.1. Массивы
- •6.2. Одномерные массивы
- •Класс System.Array и оператор foreach
- •Основные элементы класса Array
- •Задание 6
- •Обработка двумерных массивов
- •7.1. Описания двумерного массива
- •7.2. Обработка исключительных ситуаций
- •Задание 7
- •Запись исходных данных в файл и чтение данных из файла. Цифровая фильтрация. Идентификация объекта управления
- •8.1. Данные для моделирования системы. Понятие файла данных
- •8.2. Объект FileStream для работы с файлами
- •8.3. Запись данных в файл. Класс StreamWriter
- •8.4. Чтение файла. Класс StreamReader
- •8.5. Цифровая фильтрация
- •8.6. Идентификация объекта управления
- •8.7. Определение постоянной времени объекта управления
- •Задание 8.1
- •Задание 8.2
- •Рекомендации
- •Задание 8.3
- •Строки типа string
- •Основные элементы класса System.String
- •Задание 9
8.3. Запись данных в файл. Класс StreamWriter
Класс StreamWriter позволяет осуществлять запись в файл символов и строк, он самостоятельно выполняет все необходимые преобразования и производит запись в объект FileStream.
Существуют разнообразные способы создания экземпляров класса StreamWriter. Если уже имеется объект FileStream, то можно воспользоваться им для создания объекта StreamWriter:
FileStream f = new FileStream("1.txt", FileMode.CreateNew);
StreamWriter sw = new StreamWriter(f);
Объект StreamWriter может также создаваться непосредственно из файла:
StreamWriter sw = new StreamWriter("1.txt", true);
Этот конструктор принимает в качестве параметров имя файла и логическое значение, которое указывает на то, следует ли добавлять информацию к уже существующему файлу или необходимо создать новый. Если это значение равно false, то либо происходит создание нового файла, либо из существующего файла сначала удаляется все хранящаяся в нем информация, а затем он открывается на запись. Если же это значение равно true, то файл просто открывается, а все хранящаяся в нем информация сохраняется. Если такого файла не существует, то создается новый файл.
Обратите внимание на то, что здесь нет такого широкого спектра возможностей, как при создании объекта FileStream. Кроме логического значения, определяющего, следует ли добавлять информацию к уже существующему файлу или создавать новый файл, нет никаких других опций, например, отсутствует возможность задания свойства FileMode, которое мы уже задавали при работе с классом FileStream. Точно так же отсутствует возможность задания свойства FileAccess, поэтому доступ к файлу – чтение/запись. Для того чтобы воспользоваться какой-либо из этих возможностей, следует сначала обратиться к конструктору класса FileStream, а затем создать объект StreamWriter на основе объекта FileStream.
Для того чтобы записать массив значений в файл, необходимо ввести размерность массива, описать его. Ввести элементы массива и записать его в файл. Общая структура программы записи в файл:
static void RecordArrToFile()
{
try
{
……………………………………………………………………
Console.Write("Введите путь к файлу и имя файла:");
string fname = Console.ReadLine();
StreamWriter f = new StreamWriter(fname);
foreach (var elem in a) f.WriteLine(elem);
f.Close();
}
catch (Exception e)
{
Console.Write("Error:" + e.Message);
} }
8.4. Чтение файла. Класс StreamReader
Метод FileStream.Read() является основным средством, позволяющим осуществлять доступ к данным, содержащимся в файле, на который ссылается объект FileStream:
public int Read(byte[] array, int offset, int count);
Первый параметр представляет собой массив байтов, передаваемый для размещения в нем данных, получаемых от объекта FileStream. Второй параметр определяет ту позицию в массиве байтов, начиная с которой должна осуществляться операция записи данных. Обычно этот параметр имеет значение, равное нулю, в результате чего данные из файла заносятся в самое начало массива. Последний параметр определяет, какое количество байтов должно быть считано из файла.
Входные потоки используются для считывания данных, хранящихся во внешних источниках. В большинстве случаев таким источником является дисковый файл или сетевой адрес. Однако не следует забывать, что в качестве такого источника может использоваться любой объект, отправляющий данные, например, сетевое приложение, web-служба и даже консоль.
Для чтения данных используется класс StreamReader. Так же, как и класс StreamWriter, класс StreamReader является общим классом, который может использоваться для любого потока. Наиболее распространенный способ создания таких объектов заключается в использовании заранее созданного объекта FileStream:
FileStream f = new FileStream("1.txt", FileMode.Open);
StreamReader sr = new StreamReader(f);
Так же, как и класс StreamWriter, StreamReader может создаваться непосредственно на основе строки, в которой содержится путь к конкретному файлу:
StreamReader sr = new StreamReader("1.txt");
Для того чтобы осуществить чтение массива из файла, необходимо ввести путь к файлу и имя файла. При чтении файла необходимо разделить строку на элементы, используя заданные разделители и результат поместить в массив строк. Общая структура программы чтение массива из файла:
static void GetdArrFromFile()
{
try
{
Console.Write("Введите путь к файлу и имя файла:");
string fname = Console.ReadLine();
StreamReader f = new StreamReader(fname);
string str;
int size = 0;
string[] b;
Console.WriteLine("Исходный массив:");
while ((str = f.ReadLine()) != null) {
b = str.Split();
double[] a = new double[b.Length];
for (size = 0; size < b.Length; size++) {
a[size] = double.Parse(b[size]);
Console.WriteLine(a[size]);
}
}
f.Close();
}
catch (Exception e)
{
Console.Write("Error:" + e.Message);
}
}
В статическом методе Main() можно использовать меню, например:
static void Main()
{
Console.WriteLine("\t Меню:\n1. Запись в файл\n2. Чтение файла\n3. Выход");
Console.Write("Введите ваш выбор:");
string s = Console.ReadLine();
switch (s) {
case "1": RecordArrToFile();
break;
case "2": GetdArrFromFile();
break;
case "3":
return;
default: Console.WriteLine("");
break;
}
}