42732

Работа с файлами в С#

Лабораторная работа

Информатика, кибернетика и программирование

Потоки в С Под файлом обычно подразумевается именованная информация на внешнем носителе например на жестком или гибком магнитном диске. Логически файл можно представить как конечное количество последовательных байтов поэтому такие устройства как дисплей клавиатура и принтер также можно рассматривать как частные случаи файлов.

Русский

2013-10-30

288.5 KB

130 чел.

ЛАБОРАТОРНАЯ РАБОТА № 3

Работа с файлами в С#

Цель работы: Рассмотреть возможности С# для работы с потоками байтов символов и строк.

1. РАБОТА С ФАЙЛАМИ

1.1. Потоки в С#

Под файлом обычно подразумевается именованная информация на внешнем носителе, например на жестком или гибком магнитном диске.

Логически файл можно представить как конечное количество последовательных байтов, поэтому такие устройства, как дисплей, клавиатура и принтер, также можно рассматривать как частные случаи файлов.

Передача данных с внешнего устройства в оперативную память называется чтением, или вводом, обратный процесс — записью, или выводом.

Ввод-вывод в С# выполняется с помощью подсистемы ввода-вывода и классов библиотеки .NET. В этой лабораторной работе рассматривается обмен данными с файлами. Обмен данными реализуется с помощью потоков.

Поток (stream) — это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику. Потоки обеспечивают надежную работу как со стандартными, так и с определенными пользователем типами данных, а также единообразный и понятный синтаксис.

Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для повышения скорости передачи данных производится, как правило, через специальную область оперативной памяти — буфер. Буфер выделяется для каждого открытого файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор, пока весь буфер не заполнится. Только после этого или после специальной команды сброса происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем не столько, сколько запрашивается, а сколько помещается в буфер.

Механизм буферизации позволяет более быстро и эффективно обмениваться информацией с внешними устройствами.

Для поддержки потоков библиотека .NET содержит иерархию классов, основная часть которой представлена на рисунке 1. Эти классы определены в пространстве имен System.IO.

Рисунок 1 - Классы библиотеки .NET для работы с потоками

Классы библиотеки позволяют работать в различных режимах с файлами, каталогами и областями оперативной памяти. Краткое описание классов приведено в таблице 1.

Таблица 1. Основные классы пространства имен System.IO

Класс

Описание

BinaryReader, BinaryWriter

Чтение и запись значений простых встроенных типов (целочисленных, логических, строковых и т. п.) во внутренней форме представления

BufferedStream

Временное хранение потока байтов (например, для последующего переноса в постоянное хранилище)

Directory, Directorylnfo,

File, Filelnfo

Работа с каталогами или физическими файлами: создание, удаление, получение свойств. Возможности классов File и Directory реализованы в основном в виде статических методов. Аналогичные классы Directorylnfo и Filelnfo используют обычные методы

FileStream

Произвольный (прямой) доступ к файлу, представленному как поток байтов

MemoryStream

Произвольный доступ к потоку байтов в оперативной памяти

StreamWriter, StreamReader

Чтение из файла и запись в файл текстовой информации (произвольный доступ не поддерживается)

StringWriter, StringReader

Работа с текстовой информацией в оперативной памяти

Как можно видеть из таблицы, выполнять обмен с внешними устройствами можно на уровне:

  •  двоичного представления данных (BinaryReader, BinaryWriter);
  •  байтов (FlleStream);
  •  текста, то есть символов (StreamWriter, StreamReader).

В .NET используется кодировка Unicode, в которой каждый символ кодируется двумя байтами. Классы, работающие с текстом, являются оболочками классов, использующих байты, и автоматически выполняют перекодирование из байтов в символы и обратно.

Двоичные и байтовые потоки хранят данные в том же виде, в котором они представлены в оперативной памяти, то есть при обмене с файлом происходит побитовое копирование информации. Двоичные файлы применяются не для просмотра их человеком, а для использования в программах.

Доступ к файлам может быть последовательным, когда очередной элемент можно прочитать (записать) только после аналогичной операции с предыдущим элементом, и произвольным, или прямым, при котором выполняется чтение (запись) произвольного элемента по заданному адресу.

Текстовые файлы позволяют выполнять только последовательный доступ, в двоичных и байтовых потоках можно использовать оба метода.

Прямой доступ в сочетании с отсутствием преобразований обеспечивает высокую скорость получения нужной информации

Методы форматированного ввода, с помощью которых можно выполнять ввод с клавиатуры или из текстового файла значений арифметических типов, в С# не поддерживаются. Для преобразования из символьного в числовое представление используются методы класса Convert или метод Parse.

Форматированный вывод, то есть преобразование из внутренней формы представления числа в символьную, понятную человеку, выполняется с помощью перегруженных методов ToString, результаты выполнения которых передаются в методы текстовых файлов.

Помимо перечисленных классов в библиотеке .NET есть классы XmlTextReader.

Использование классов файловых потоков в программе предполагает следующие операции:

  1.  Создание потока и связывание его с физическим файлом.
  2.  Обмен (ввод-вывод).
  3.  Закрытие файла.

Каждый класс файловых потоков содержит несколько вариантов конструкторов, с помощью которых можно создавать объекты этих классов различными способами и в различных режимах.

Например, файлы можно открывать только для чтения, только для записи или для чтения и записи. Эти режимы доступа к файлу содержатся в перечислении FileAccess, определенном в пространстве имен System.IO. Константы перечисления приведены в таблице 2.

Таблица 2. Значения перечисления FileAccess

Значение

Описание

Read

Открыть файл только для чтения

ReadWrite

Открыть файл для чтения и записи

Write

Открыть файл только для записи

Возможные режимы открытия файла определены в перечислении FileMode (таблица 3).

Таблица 3. Значения перечисления FileMode

Значение

Описание

Append

Открыть файл, если он существует, и установить текущий указатель в конец файла. Если файл не существует, создать новый файл

Creat

Создать новый файл. Если в каталоге уже существует файл с таким же именем, он будет стерт

CreateNew

Создать новый файл. Если в каталоге уже существует файл с таким же именем, возникает исключение IOException

Open

Открыть существующий файл

OpenOrCreate

Открыть файл, если он существует. Если нет, создать файл с таким именем

Truncate

Открыть существующий файл. После открытия он должен быть обрезан до нулевой длины

Режим FileMode.Append можно использовать только совместно с доступом типа FileAccess.Write, то есть для файлов, открываемых для записи.

Режимы совместного использования файла различными пользователями определяет перечисление FileShare (таблица 4.).

Таблица 4. Значения перечисления FileShare

Значение

Описание

None

Совместное использование открытого файла запрещено. Запрос на открытие данного файла завершается сообщением об ошибке

Read

Позволяет открывать файл для чтения одновременно нескольким пользователям. Если этот флаг не установлен, запросы на открытие файла для чтения завершаются сообщением об ошибке

ReadWrite

Позволяет открывать файл для чтения и записи одновременно нескольким пользователям

Write

Позволяет открывать файл для записи одновременно нескольким пользователям

1.2. Потоки байтов

Ввод-вывод в файл на уровне байтов выполняется с помощью класса FileStream, который является наследником абстрактного класса Stream, определяющего набор стандартных операций с потоками. Элементы класса Stream описаны в таблице 5.

Таблица 5. Элементы класса Stream

Элемент

Описание

BeginRead, BeginWrite

Начать асинхронный ввод или вывод

CanRead, CanSeek, CanWrite

Свойства, определяющие, какие операции поддерживает поток: чтение, прямой доступ и/или запись

Close

Закрыть текущий поток и освободить связанные с ним ресурсы (сокеты, указатели на файлы и т. п.)

EndRead, EndWrite

Ожидать завершения асинхронного ввода; закончить асинхронный вывод

Flush

Записать данные из буфера в связанный с потоком источник данных и очистить буфер. Если для данного потока буфер не используется, то этот метод ничего не делает

Length

Возвратить длину потока в байтах

Position

Возвратить текущую позицию в потоке

Read, ReadByte

Считать последовательность байтов (или один байт) из текущего потока и переместить указатель в потоке на количество считанных байтов

Seek

Установить текущий указатель потока на заданную позицию

SetLength

Установить длину текущего потока

Write, WriteByte

Записать последовательность байтов (или один байт) в текущий поток и переместить указатель в потоке на количество записанных байтов

Класс FileStream реализует эти элементы для работы с дисковыми файлами. Для определения режимов работы с файлом используются стандартные перечисления FileMode, FileAccess и FileShare. Значения этих перечислений приведены в таблицах 2—4.  Пример работы с потоком байтов приведен в разделе 2.1.

1.3. Потоки символов

Символьные потоки StreamWriter и StreamReader работают с Unicode-символами, следовательно, ими удобнее всего пользоваться для работы с файлами, предназначенными для восприятия человеком. Эти потоки являются наследниками классов TextWriter и TextReader соответственно, которые обеспечивают их большей частью функциональности. В таблицах .6 и 7 приведены наиболее важные элементы этих классов. Произвольный доступ для текстовых файлов не поддерживается.

Таблица 6. Наиболее важные элементы базового класса TextWriter

Элемент

Описание

Close

Закрыть файл и освободить связанные с ним ресурсы. Если в процессе записи используется буфер, он будет автоматически очищен

Flush

Очистить все буферы для текущего файла и записать накопленные в них данные в место их постоянного хранения. Сам файл при этом не закрывается

NewLine

Используется для задания последовательности символов, означающих начало новой строки. По умолчанию используется последовательность «возврат каретки» — «перевод строки» (\r\n)

Write

Записать фрагмент текста в потоr

WriteLine

Записать строку в поток и перейти на другую строку

Таблица 7. Наиболее важные элементы класса TextReader

Элемент

Описание

Peek

Возвратить следующий символ, не изменяя позицию указателя в файле

Read

Считать данные из входного потока

ReadBl ock

Считать из входного потока указанное пользователем количество символов и записать их в буфер, начиная с заданной позиции

ReadLine

Счмтать строку из текущего потока и возвратить ее как значение типа string. Пустая строка null означает конец файла (EOF)

ReadToEnd

Считать все символы до конца потока, начиная с текущей позиции, и возвратить считанные данные как одну строку типа string

 Пример работы с потоком символов приведен в разделе 2.2.

1.4. Асинхронный ввод-вывод

Класс Stream (и, соответственно, FileStream) поддерживает два способа выполнения операций ввода-вывода: синхронный и асинхронный. По умолчанию файлы открываются в синхронном режиме, то есть последующие операторы выполняются только после завершения операций ввода-вывода.

Для длительных файловых операций более эффективно выполнять ввод-вывод асинхронно, в отдельном потоке выполнения. При этом в первичном потоке можно выполнять другие операции.

Для асинхронного ввода-вывода необходимо открыть файл в асинхронном режиме, для этого используется соответствующий вариант перегруженного конструктора. Асинхронная операция ввода инициируется с помощью метода BeginRead. Помимо характеристик буфера, в который выполняется ввод, в этот метод передается делегат, задающий метод, выполняемый после завершения ввода.

Этот метод может инициировать обработку полученной информации, возобновить операцию чтения или выполнить любые другие действия, например, проверить успешность ввода и сообщить о его завершении. Обычно в этом методе вызывается метод EndRead, который завершает асинхронную операцию.

Аналогично выполняется и асинхронный вывод. В разделе  приведен пример асинхронного чтения из файла большого объема и параллельного выполнения диалога с пользователем.

1.5. Двоичные потоки

Двоичные файлы хранят данные в том же виде, в котором они представлены в оперативной памяти, то есть во внутренней форме представления. Двоичные файлы применяются не для просмотра их человеком, а для использования в программах.

Выходной поток BinaryWriter поддерживает произвольный доступ, то есть имеется возможность выполнять запись в произвольную позицию двоичного файла. Двоичный файл открывается на основе базового потока, в качестве которого чаще всего используется поток FileStream. Входной двоичный поток содержит перегруженные методы чтения для всех простых встроенных типов данных.

Основные методы двоичных потоков приведены в таблицах 8 и 9.

Таблица 8. Наиболее важные элементы класса BinaryWriter

Элемент

Описание

BaseStream

Базовый поток, с которым работает объект BinaryWriter

Close

Закрыть поток

Flush

Очистить буфер

Seek

Установить позицию в текущем потоке

Wri te

Записать значение в текущий поток

Таблица 9. Наиболее важные элементы  класса BinaryReader

Элемент

Описание

BaseStream

Базовый поток, с которым работает объект BinaryReader

Close

Закрыть поток

PeekChar 

Возвратить следующий символ без перемещения внутреннего указателя в потоке

Read

Считать поток байтов или символов и сохранить в массиве, передаваемом как входной параметр

ReadXXXX  

Считать из потока данные определенного типа (например, ReadBoolean, ReadByte, Readlnt32 и т. д.)

Пример работы с двоичным потоком приведен в разделе 2.3.

1.6 Методы класса Directory

Класс Directory имеет следующие методы (все они являются статичными и доступны без создания объекта):

  •  CreateDirectory() — создает все вложенные папки в указанном в качестве параметра пути;
  •  Delete () —удалить указанную папку;
  •  Exists () — позволяет определить, существует ли указанная в качестве параметра папка;
  •  GetAccessControl () — возвращает права доступа для указанной папки;
  •  GetCreationTime () — возвращает время создания указанной папки;
  •  GetCurrentDirectory() — возвращает текущую рабочую папку приложения, в которую будут сохраняться файлы, для которых не указан конкретный путь;
  •  GetDirectoryRoot () — возвращает информацию о томе;
  •  GetFiles() — возвращает имена файлов в указанной папке;
  •  GetFileSystemEntries()— возвращает все имена файлов и вложенных папок в указанной папке;
  •  GetLastAccessTime () — время последнего доступа к папке;
  •  GetLastWriteTime () — время последней записи в папке;
  •  GetLogicaiDrives () — возвращает имена логических дисков в системе;
  •  Getparent () — возвращает родительскую папку;
  •  Move ()— перемещает файл или директорию со всем содержимым в новое место;
  •  SetAccessControl () — назначить права доступа;
  •  SetCreationTime ()  — изменить время создания;
  •  SetCurrentDirectory() —изменить текущую папку;
  •  SetLastAccessTime() — изменить время последнего доступа;
  •  SetLastwriteTime() — изменить время последней записи.

1.7 Методы класса File

Класс File имеет следующие методы, которые также являются статичными и доступны без создания объекта:

  •  AppendAllText () — добавить указанный текст в файл. Если файл не существует, то он будет создан; е"
  •  AppendText() —добавить текст в файл, который вернув объект StreamWriter, который можно использовать для дописывания в тот же файл дополнительной информации;
  •  Сору ()  —  копировать указанный файл в новое положение;
  •  Create () — создать файл по указанному пути;
  •  СreateText () — создать файл для записи информации в формате UTF-8;
  •  Decrypt () —дешифровать содержимое файла;
  •  Delete ()—удалить указанный файл;
  •  Encrypt () — зашифровать указанный файл;
  •  Exists () —проверить существование указанного файла;
  •  GetAccessControl () — вернуть права доступа к файлу;
  •  GetAttributes () — вернуть атрибуты файла;
  •  GetCreationTime () — время создания указанного файла;
  •  GetLastAccessTime () — время последнего доступа к файлу;
  •  GetLastWriteTime () — время последней записи в файл;
  •  Move () — переместить файл в новую папку;
  •  Open () — открыть для чтения и изменения указанный файл;
  •  OpenRead() — открыть указанный файл для чтения;
  •  OpenWrite () — открыть указанный файл для записи;
  •  OpenText () — открыть файл для работы с ним как с текстом в формате UTF-8;
  •  ReadAllLines () — прочитать все строки файла;
  •  SetAccessControl () — назначить права доступа;
  •  SetCreationTime () — изменить время создания;
  •  SetLastAccessTimeO —изменить время последнего доступа;
  •  SetLastwriteTime {) — изменить время последней записи;
  •  WriteAllLines() — создать файл и записать в него указанный массив строк.

2. ПРИМЕР ПРИЛОЖЕНИЯ

Рассмотрим работу с файлами в С# на примере приложения, изображенного на рисунке 2.

Рисунок 2 – пример приложения

2.1. Работа с потоком байтов

Для события Click кнопки «Чтение-запись потока байтов» напишем следующий программный код:

 private void button1_Click_1(object sender, EventArgs e)

       {

           textBox1.Clear();

           //Создание файла

           FileStream f = new FileStream("file1.txt", FileMode.Create, FileAccess.ReadWrite);

           Random r = new Random();

           byte a;

           // Запись в файл пятидесяти байт

           for (int i = 0; i < 50; ++i)

           {

               a =(byte) r.Next();

               f.WriteByte(a);

           }

           // установить указатель на начало файла

           f.Seek(0, SeekOrigin.Begin);

           // получить длину файла в байтах

           long j =f.Length;

           // чтение и вывод на экран содержимого файла

           do

           {

               a = (byte)f.ReadByte();

               textBox1.Text += Convert.ToString(a) + (char)13 + (char)10;

               j = j - 1;

           } while (j!=0);

           //while (f.Length != 0);

         

           f.Close();

       }

Текущая позиция в потоке первоначально устанавливается на начало файла (для любого режима открытия, кроме Append) и сдвигается на одну позицию при записи каждого байта.

Для установки желаемой позиции чтения используется метод Seek, имеющий два параметра: первый задает смещение в байтах относительно точки отсчета, задаваемой вторым. Точки отсчета задаются константами перечисления SeekOrigin: начало файла — Begin, текущая позиция — Current и конец файла — End.

В данном примере файл создавался в текущем каталоге. Можно указать и полный путь к файлу, при этом удобнее использовать дословные литералы, например:

FileStream f = new FileStream( @"D:\C#\test.txt", FileMode.Create, FileAccess.ReadWrite );

В дословных литералах не требуется дублировать обратную косую черту.

Операции по открытию файлов могут завершиться неудачно, например, при ошибке в имени существующего файла или при отсутствии свободного места на диске, поэтому рекомендуется всегда контролировать результаты этих операций.

В случае непредвиденных ситуаций среда выполнения генерирует различные исключения, обработку которых следует предусмотреть в программе, например:

  •  FileNotFoundException, если файла с указанным именем в указанном каталоге не существует;
  •  DirectoryNotFoundException, если не существует указанный каталог;
  •  ArgumentException, если неверно задан режим открытия файла;
  •  IOException, если файл не открывается из-за ошибок ввода-вывода.

Возможны и другие исключительные ситуации.

Удобно обрабатывать наиболее вероятные ошибки раздельно, чтобы предоставить пользователю программы в выводимом сообщении наиболее точную информацию.  В данном примере ошибки не обрабатываются.

При закрытии файла освобождаются все связанные с ним ресурсы, например, для файла, открытого для записи, в файл выгружается содержимое буфера. Поэтому рекомендуется всегда закрывать файлы после окончания работы, в особенности файлы, открытые для записи. Если буфер требуется выгрузить, не закрывая файл, используется метод Flush.

2.2. Работа с потоком символов

Окно для работы с потоком символов изображено на рисунке 3.

Рисунок 3 – Работа с потоком символов

Для события Click кнопки «Построчное чтение текстового файла» напишем следующий программный код :

private void button2_Click(object sender, EventArgs e)

       {

           String s;

           textBox2.Clear();

           try

           {

               // Диалог выбора файла

               if (openFileDialog1.ShowDialog() == DialogResult.OK)

               {

                   // Открытие выбранного файла

                   StreamReader f = new StreamReader(openFileDialog1.FileName);

                   // Чтение выбранного файла по строкам

                   while ((s = f.ReadLine()) != null)

                   {

                       textBox2.Text += s + (char)13 + (char)10;

                   }

                   f.Close();

               }

           }

           catch (FileNotFoundException e1)

           {

               textBox2.Text += e1.Message + (char)13 + (char)10;

               textBox2.Text += "Проверьте правильность имени файла";

               return;

           }

           catch (Exception e1)

           {

               textBox2.Text += "Ошибка:" + e1.Message;

           }

       }

2.3. Работа с двоичным потоком

Окно для работы с потоком символов изображено на рисунке 4.

Для события Click кнопки «Формирование двоичного файла» напишем следующий программный код:

private void button3_Click(object sender, EventArgs e)

       {

           try

           {

               BinaryWriter f = new BinaryWriter(new FileStream(@"C:\binary.file", FileMode.Create));

               double d = 0;

               while (d < 4)

               {

                   f.Write(d);

                   d += 0.33;

               };

               f.Seek(16, SeekOrigin.Begin);

               f.Write(8888d);

               f.Close();

           }

           catch (Exception e1)

           {

               textBox2.Text += "Ошибка:" + e1.Message;

               return;

           }

       }

Рисунок 4 – Работа с двоичным потоком

При создании двоичного потока в него передается объект базового потока. При установке указателя текущей позиции в файле учитывается длина каждого значения типа double — 8 байт.

Для события Click кнопки «Считывание двоичного файла» напишем следующий программный код:

private void button4_Click(object sender, EventArgs e)

       {

           try

           {

               FileStream f =new FileStream(@"C:\binary.file", FileMode.Open);

               BinaryReader f1 = new BinaryReader(f);

               // количество чисел в файле

               long n = f.Length / 8;

               double[] x = new double[n];

               long i = 0;

               try

               {

                   while (true) x[i++] = f1.ReadDouble();

               }

               catch (EndOfStreamException e2) { }

               foreach (double d in x) textBox3.Text += Convert.ToString(d) + " ";

               f1.Close();

               f.Close();

           }

           catch (FileNotFoundException e1)

           {

               textBox2.Text += e1.Message + (char)13 + (char)10;

               textBox2.Text += "Проверьте правильность имени файла";

               return;

           }

           catch (Exception e1)

           {

               textBox2.Text += "Ошибка:" + e1.Message;

           }

       }

Попытка просмотра сформированного программой файла в текстовом редакторе  не информативна, поэтому в  программе   помощью экземпляра BinaryReader считывает содержимое файла в массив вещественных чисел, а затем выводит этот массив на экран. При чтении принимается во внимание тот факт, что метод ReadDouble при обнаружении конца файла генерирует исключение EndOfStreamException. Поскольку в данном случае это не ошибка, тело обработчика исключений пустое.

2.4. Асинхронный ввод-вывод

Окно для реализации асинхронного ввода-вывода  изображено на рисунке  5.

.

Рисунок 5 – Асинхронный ввод-вывод

Для удобства восприятия операции чтения из файла и диалога с пользователем оформлены в отдельный класс RWFile:

class RWFile

       {

          

           public void OnCompletedRead(IAsyncResult ar) // 1

           {

               bytes = f.EndRead(ar);

           }

           public void AsyncRead()

           {

               f=new FileStream("D:\\BigFile.txt",FileMode.Open,FileAccess.Read,FileShare.Read,buf.Length,true);  // 2

               callback = new AsyncCallback(OnCompletedRead);  // 3

               f.BeginRead(buf, 0, buf.Length, callback,null);      // 4

           }

           FileStream f;

           public byte[] buf = new byte[77777];

           AsyncCallback callback;

           public int bytes;

       }.

Метод OnCompletedRead (оператор 1) должен получать один параметр стандартного типа IAsyncResult, содержащий сведения о завершении операции, которые передаются в метод EndRead.

Файл открывается в асинхронном режиме, об этом говорит значение true последнего параметра конструктора (оператор 2). В операторе 3 создается экземпляр стандартного делегата AsyncCallback, который инициализируется методом OnCompletedRead.

С помощью этого делегата метод OnCompl etedRead передается в метод BeginRead (оператор 4), который создает отдельный поток, начинает асинхронный ввод и возвращает управление в вызвавший поток. Обратный вызов метода OnCompletedRead происходит при завершении операции ввода.

Объявим переменную типа RWFile:

RWFile fw;

Для события Activate  формы Form1 напишем следующий программный код:

private void Form1_Activated(object sender, EventArgs e)

       {

           fw = new RWFile(); // Созание экземпляра

     // класса

   }

Для события Click кнопки «Начать асинхронный вывод в буфер» запишем следующий программный код:

private void button5_Click(object sender, EventArgs e)

       {

           fw.AsyncRead();

   }

Для события Click кнопки «Просмотр прочитанной информации » запишем следующий программный код:

private void button7_Click_1(object sender, EventArgs e)

       {

           for (int i = 0; i <= fw.bytes; ++i)

           {

               textBox4.Text += Convert.ToString(fw.buf[i]) + " ";

           }

       }

ПРИМЕЧАНИЕ

В данной лабораторной работе асинхронный ввод-вывод не используется

  1.  ЗАДАНИЯ

Вариант 1.

  1.  Сформировать файл последовательности 15 чисел, в которой каждый iкомпонент определяется по формуле

y=sin(i*π / 8),       если i < 8;

y=4cos(i(π +1)/5),     если  i > 8.

Определить   количество   положительных   значений,   содержащихся в сформированном файле.

  1.  Составить программу, определяющую правильность следования скобок в строке символов, используя для этой цели стек на основе файла.

Вариант 2.

  1.  Сформировать файл последовательности 20 чисел, в которой каждый iкомпонент определяется по формуле

y=sin(i*π / 8),       если i < 8;

y=4cos(i(π +1)/5),     если  i > 8.

Определить количество отрицательных значений, содержащихся в сформированном файле.

  1.  Подсчитать количество сдвоенных символов 'ее', 'нн', 'лл' в тексте, расположенном в текстовом файле.

Вариант 3.

  1.  Сформировать файл из значений случайных величин:

0,324; 0,524; 0,789; 0,556; 0,761; 0,248; 0,345; 0,911; 0,216,

Определить для данной последовательности среднее арифметическое компонентов, значения которых меньше 0,5.

  1.  Разбить произвольный текст, находящийся в файле, на строки определенной длины. При переносе слова предусмотреть вывод дефиса.

Вариант 4.

  1.  Откорректировать текст, расположенный в текстовом файле, заменив в нем все вхождения одной буквы на другую.
  2.  Произвести сортировку файла целых чисел методом пузырька.

Вариант 5.

  1.  Сформировать файл, содержащий фамилии нескольких студентов. Добавить к полученному файлу фамилии еще 2-3 студентов.
  2.  Найти в текстовом файле самое длинное и самое короткое слово.

Вариант 6.

  1.  Записать в файл оценки (в баллах), полученные некоторым студентом на экзаменах в течение всех сессий. Добавить в начало файла оценки, полученные на вступительных экзаменах.
  2.  Из строки, расположенной в текстовом файле, исключить все символы, входящие в нее более одного раза.

Вариант 7.

  1.  Записать в файл оценки (в баллах), полученные некоторым студентом на экзаменах в течение всех сессий, и определить средний балл.
  2.  Проверить, правильно ли расставлены в тексте, расположенном в текстовом файле, круглые скобки.

Вариант 8.

  1.  Сформировать два файла. В один из них поместить фамилии пяти ваших знакомых, а в другой - номера их телефонов. Составить программу, которая по фамилии вашего знакомого определяет номер его телефона.
  2.  В последовательности символов, заданной в текстовом файле, подсчитать общее количество символов   '+', '-‘,   '*'.

Вариант 9.

  1.  Сформировать два файла. В один из них поместить фамилии пяти ваших знакомых, а в другой - номера их телефонов. Составить программу, которая по номеру телефона вашего знакомого определяет его фамилию.
  2.  Слова текста, расположенного в текстовом файле, вывести на экран в виде строки и в виде столбика.

Вариант 10.

  1.  В текстовом файле, в предложении, содержащем не менее двух слов, поменять местами первое и последнее слово.
  2.  Для программы, записанной в файле в виде непрерывного текста, преобразовать файл таким образом, чтобы каждый оператор располагался на отдельной строке.

Вариант 11.

  1.  В текстовом файле две строки текста. Необходимо сформировать третью строку, состоящую из символов, входящих одновременно в обе исходные строки, и дописать ее в текстовый файл.
  2.  В столбцах матрицы произвольного размера, размещенной во внешнем файле, провести перестановку ее элементов таким образом, чтобы максимальный элемент каждого столбца оказался на главной диагонали.

Вариант 12.

1. Сформировать файл из значений случайных величин:

0,324; 0,524; 0,789; 0,556; 0,761; 0,248; 0,345; 0,911; 0,216,

Определить для данной последовательности сумму компонентов, значения которых больше 0,5.

2. Подсчитать число слов в предложении, записанном в текстовом файле.

Вариант 13.

  1.  Переписать текстовый файл таким образом, чтобы все слова исходного текста были перевернуты.
  2.  Перемножить два сверхдлинных целых числа, записанных в файле. Результат записать в тот же файл.

Вариант 14.

  1.  В произвольный текстовый файл добавить в конец первое и третье слово из исходного текста.
  2.  В отсортированном файле целых чисел методом бинарного поиска найти заданный элемент и удалить его.

Вариант 15.

  1.  Сформировать файл, компонентами которого являются действительные значения, вычисляемые по формуле

ai=(i+1)2sin(/10)

где i - номер компонента файла.

Определить, сколько в полученном файле содержится положительных значений.

  1.  В произвольный текстовый файл добавить в конец свою фамилию.

Вариант 16.

  1.  Сформировать файл, компонентами которого являются действительные значения, вычисляемые по формуле

ai=(i+1)2sin(/10)

где i - номер компонента файла.

Определить, сколько в полученном файле содержится отрицательных значений.

  1.  В исходном текстовом файле X заменить все вхождения подстроки Р на подстроку Q.

Вариант 17.

  1.  Сформировать файл целых чисел. Вывести на экран только те компоненты файла, значения которых лежат в интервале от 0 до 25.
  2.  Для заданного символа определить, сколько раз он встречается во введенном тексте файла.

Вариант 18.

  1.  Сформировать файл целых чисел. Вывести на экран только четные значения компонентов файла.
  2.  Из текста, расположенного в файле, исключить группы символов, расположенных между круглыми скобками.

Вариант 19.

  1.  Из текста, расположенного в файле, исключить однобуквенные слова. Результат записать в другой файл.
  2.  Пусть некоторый файл содержит числа Фибоначчи U0, U1,..., Un.  Получить и дополнить этот файл очередным компонентом Un+1.

Вариант 20.

  1.  Сформировать файл, элементами которого являются значения функции у= sin(xi) + 2cos(xi) в точках Х = (0,1; 0,2; 0,25; 0,33; 1,78; 2,05; 2,23). Определить компонент файла, имеющий минимальное значение.
  2.  Из текста, расположенного в файле, удалить лишние пробелы, разделяющие слова.

Вариант 21.

  1.  Сформировать файл, элементами которого являются значения функции у= sin(xi) + 2cos(xi) в точках X = (0,1; 0,2; 0,25; 0,33; 1,78; 2,05; 2,23). Определить компонент файла, имеющий максимальное значение.
  2.  Выяснить, верно ли, что среди символов строки произвольной длины, расположенной в файле, имеются все символы, входящие в слово ДЕНЬ.

Вариант 22.

  1.  Сформировать файл целых чисел. Вывести на экран только нечетные значения компонентов файла.
  2.  Для каждого из слов предложения, расположенного в одном текстовом файле, указать, сколько раз оно встречается в предложении, расположенном в другом текстовом файле.

Вариант 23.

  1.  Записать в файл оценки (в баллах), полученные студентами группы по некоторому предмету, и определить средний балл.
  2.  В произвольном текстовом файле исключить первое и последнее слово.

Вариант 24.

  1.  Записать в файл оценки (в баллах), полученные студентами группы по некоторому предмету, и определить процент успеваемости.
  2.  Определить, можно ли из символов заданной в файле строки составить вашу фамилию.

Вариант 25.

  1.  Из произвольной последовательности символов, расположенной в текстовом файле, исключить специальные символы.
  2.  Во внешнем файле создать очередь произвольной длины. Удалять или дополнять ее произвольным количеством элементов.

Вариант 26.

  1.  В файле целых чисел  исключить повторное вхождение одних и тех же чисел.
  2.  Дан файл целых чисел. Преобразовать его таким образом, чтобы вначале шли все отрицательные числа, а затем - неотрицательные.


 

А также другие работы, которые могут Вас заинтересовать

77971. Структура программы. Идентификаторы переменных, констант 57.5 KB
  Программы в Delphi пишутся на языке Object Pscl который является развитием языка Turbo Pscl. Программы работающие в операционных системах семейства Windows называют приложениями. Комментарий во время выполнения программы игнорируется его основное назначение – пояснения к тексту программы.
77972. екстовые файлы. Диалоги для работы с файлами, настройка цвета и шрифта 53.5 KB
  Диалоги для работы с файлами настройка цвета и шрифта. Для облегчения работы с файлами в Delphi каждый отдельный файл представляет файловая переменная. Объявления файлов переменной Файловая переменная в общем виде объявляется в разделе vr примерно так...
77973. Типизированные файлы с идентичными структурами 30.5 KB
  Типизированный файл – это файл в котором записаны идентичные структуры. Например любой файл может считать файлом байтов – т.е можно читать байт за байтом, можно перейти сразу к любому байту по его номеру, можно сразу узнать сколько байт в файле, можно заменить любой байт на другой не перезаписывая файл.
77974. Условный оператор 28 KB
  Встречаются следующие формы условного оператора: Условный оператор с одной ветвью if условие then команды end При выполнении такого оператора вычисляется условие и если оно истинно то выполняются команды до ключевого слова end в противном случае выполнение программы продолжается со следующей за условным оператором команды. Условный оператор с двумя ветвями if условие then команды else команды end Здесь при истинности условия выполняются команды при ложности команды.
77976. Компоненты ввода-вывода информации 125 KB
  Свойство IsMasked: Boolean доступно только для чтения и содержит True, если строка шаблона задана. Свойство EditText: string содержит текст до наложения на него маски шаблона (т. е. то, что ввел пользователь), а свойство Text: String может (в зависимости от шаблона см. ниже) содержать либо исходный текст, либо результат наложения на него маски шаблона.
77977. Палитра компонентов 271 KB
  Для этого используется специальный редактор окно которого появляется на экране после щелчка правой кнопкой мыши на любой пиктограмме в палитре компонентов и выбора опции properties Свойства. Окно редактора палитры компонентов Данное окно позволяет добавлять или удалять компоненты с палитры компонентов или переименовывать названия вкладок: кнопка dd позволяет добавить новую вкладку палитры компонентов; кнопка Delete предназначена для удаления вкладки палитры компонентов. На нем изображены шесть наиболее важных окон Delphi: главное...
77978. Возможности Delphi для ввода и отображения дат и времен. Таймер 193.5 KB
  Таймер Компонент Delphi Timer очень простой компонент который не виден на экране но тем не менее Delphi Timer выполняет очень важные функции в программе. Delphi Timer позволяет вводить необходимые задержки между выполнением тех или иных действий. Компонент Timer имеет всего четыре свойства и одно событие и работать с компонентом Delphi Timer очень просто. Свойство Назначение Enbled Включение-выключение таймера Intervl Интервал срабатывания в миллисекундах Nme Имя компонента в программе Tg Произвольный числовой параметр Помещаем...
77979. Графические файлы в Delphi 63 KB
  У ряда объектов из библиотеки библиотеки визуальных компонент есть свойство Cnvs канва которое предоставляет простой путь для рисования на них. Cnvs является в свою очередь объектом объединяющим в себе поле для рисования карандаш Pen кисть Brush и шрифт Font. Cnvs обладает также рядом графических методов: Drw TextOut rc Rectngle и др. Используя Cnvs вы можете воспроизводить на форме любые графические объекты – картинки многоугольники текст и т.