Справочник от Автор24
Поделись лекцией за скидку на Автор24

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

  • 👀 170 просмотров
  • 📌 119 загрузок
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Потоки символов» docx
Потоки символов Символьные потоки StreamWriter и StreamReader предназначены для работы с текстовыми файлами, содержащими Unicode-символы. Существует возможность изменить используемую кодировку с помощью объекта System.Text.Encoding. Эти потоки являются наследниками классов TextWriter и TextReader соответственно, которые обеспечивают их большей частью функциональности. Текстовые файлы наиболее удобны для восприятия человеком, поэтому их удобно использовать для представления данных. В табл. 1 и 2 приведены наиболее важные элементы этих классов. Как видите, произвольный доступ для текстовых файлов не поддерживается. Таблица 1. Наиболее важные элементы базового класса TextWriter Элемент Описание Close Закрыть файл и освободить связанные с ним ресурсы. Если в процессе записи используется буфер, он будет автоматически очищен. Flush Очистить все буферы для текущего файла и записать накопленные в них данные в место их постоянного хранения. Сам файл при этом не закрывается. NewLine Используется для задания последовательности символов, означающих начало новой строки. По умолчанию используется последовательность «возврат каретки» — «перевод строки» (\r\n). Write Записать фрагмент текста в поток. WriteLine Записать строку в поток и перейти на другую строку. Таблица 2. Наиболее важные элементы класса TextReader Элемент Описание Реек Возвратить следующий символ, не изменяя позицию указателя в файле. Read Считать данные из входного потока. ReadBlock Считать из входного потока указанное пользователем количество символов и записать их в буфер, начиная с заданной позиции. ReadLine Считать строку из текущего потока и возвратить ее как значение типа string. Пустая строка (null) означает конец файла (EOF). ReadToEnd Считать все символы до конца потока, начиная с текущей позиции, и возвратить считанные данные как одну строку типа string. Вы уже знакомы с некоторыми методами, приведенными в этих таблицах: мы постоянно использовались методы чтения из текстовых потоков и записи в текстовые потоки, но не для дисковых файлов, а для консоли, которая является их частным случаем. Листинг 1. Вывод в текстовый файл using System; using System.IO; // 1 namespace Example_4 { class Program { static void Main(string[] args) { StreamWriter f = new StreamWriter( "output.txt" ); // 2 int i = 3; double у = 18.12; decimal d = 600m; string s = "Текстовый файл"; f.WriteLine( "i = " + i ); // 3 f.WriteLine( "y = {0} d = {1}", у, d ); // 4 f.WriteLine( "s = " + s ); // 5 f.Close(); // 6 } } } В результате работы программы создаётся текстовый файл со следующим содержимым: В листинге 2 создается текстовый файл, в который записываются две строки. Вторая строка формируется из преобразованных численных значений переменных и поясняющего текста. Содержимое файла можно посмотреть в любом текстовом редакторе. Файл создается в том же каталоге, куда среда записывает исполняемый файл. По умолчанию это каталог ...\Example_1\bin\Debug. Листинг 2. Вывод в текстовый файл using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace { class Program { static void Main(string[] args) { try { StreamWriter f = new StreamWriter( "text.txt" ); f.WriteLine( "Вывод в текстовый файл:" ); double a = 12.234; int b = 29; f.WriteLine( " a = {0,6:C} b = {1,2:X}", a, b ); f.Close(); } catch( Exception e ) { Console.WriteLine( "Error: " + e.Message ); return; } } } } В листинге 3 файл, созданный в предыдущем листинге, выводится на экран. Листинг 3. Чтение текстового файла using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Example_2 { class Program { static void Main(string[] args) { try { StreamReader f = new StreamReader( "text.txt" ); string s = f.ReadToEnd(); Console.WriteLine(s); f.Close(); } catch( FileNotFoundException e ) { Console.WriteLine( e.Message ); Console.WriteLine( " Проверьте правильность имени файла!" ); return; } catch( Exception e ) { Console.WriteLine( "Error: " + e.Message ); return; } } } } Результат работы: В этой программе весь файл считывается за один прием с помощью метода ReadToEnd. Чаще возникает необходимость считывать файл построчно, такой пример приведен в листинге 4. Каждая строка при выводе предваряется номером. Листинг 4. Построчное чтение текстового файла using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Example_3 { class Program { static void Main(string[] args) { try { StreamReader f = new StreamReader("TextFile1.txt"); string s; long i = 0; while ((s = f.ReadLine()) != null) Console.WriteLine("{0}: {1}", ++i, s); f.Close(); } catch (FileNotFoundException e) { Console.WriteLine(e.Message); Console.WriteLine("Проверьте правильность имени файла!"); return; } catch (Exception e) { Console.WriteLine("Error; " + e.Message); return; } } } } Для текстового файла TextFile1.txt, содержащего фрагмент программы: StreamReader f = new StreamReader("TextFile1.txt"); string s; long i = 0; while ((s = f.ReadLine()) != null) Console.WriteLine("{0}: {1}", ++i, s); f.Close(); Результат работы программы будет: } Пример преобразования чисел, содержащихся в текстовом файле, в их внутреннюю форму представления приведен в листинге 5. В программе вычисляется сумма чисел в каждой строке. На содержимое файла накладываются весьма строгие ограничения: числа должны быть разделены ровно одним пробелом, после последнего числа в строке пробела быть не должно, файл не должен заканчиваться символом перевода строки. Методы разбиения строки и преобразования в целочисленное представление рассматривались ранее. Листинг 5. Преобразования строк в числа using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Example_4 { class Program { static void Main(string[] args) { try { StreamReader f = new StreamReader( "numbers.txt" ); string s; const int n = 20; int[] a = new int[n]; string[] buf; while ( ( s = f.ReadLine() ) != null ) { buf = s.Split(' '); long sum = 0; for ( int i = 0; i < buf.Length; ++i ) { a[i] = Convert.ToInt32( buf[i] ); sum += a[i]; } Console.WriteLine( "{0} сумма: {1}", s, sum ); } f.Close(); } catch( FileNotFoundException e ) { Console.WriteLine( e.Message ); Console.WriteLine( " Проверьте правильность имени файла!" ); return; } catch( Exception e ) { Console.WriteLine( "Error: " + e.Message ); return; } } } } Для текстового файла numbers.txt, содержащего целые числа: 3 4 12 34 56 8 11 35 78 Результат работы программы: В следующем примере из текстового файла TextFile1.txt, содержимое которого представлено на рисунке ниже, считываются данные и помещаются в список List list. Листинг 5. Преобразования строк в значения типа int. using System; using System.Collections.Generic; using System.IO; namespace Example_5 { class Program { static void Main(string[] args) { try { StreamReader f = new StreamReader("TextFile1.txt"); List list = new List(); string s; while ((s = f.ReadLine()) != null) { list.Add(int.Parse(s)); } foreach (int x in list) Console.Write(x + ","); Console.WriteLine(); f.Close(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } Результат работы программы: В следующем примере из текстового файла TextFile1.txt, содержимое которого представлено на рисунке ниже, считываются данные и помещаются в список List list. Листинг 6. Преобразования строк в значения типа int. using System; using System.Collections.Generic; using System.IO; namespace Examle_6 { class Program { static void Main(string[] args) { try { StreamReader f = new StreamReader("TextFile2.txt"); List list = new List(); string s = f.ReadToEnd(); string[] buf = s.Split(' '); for (int i = 0; i < buf.Length; i++ ) { list.Add(int.Parse(buf[i])); } foreach (int x in list) Console.Write(x + ","); Console.WriteLine(); f.Close(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } Результат работы программы: Листинг 6. Заполнение списка случайными значения типа int. using System; using System.Collections.Generic; namespace Example_7 { class Program { static void Main(string[] args) { List list = new List(); Random rnd = new Random(); for (int i = 0; i < 10; i++) { list.Add(rnd.Next(10)); } foreach (int x in list) Console.Write(x + ", "); Console.WriteLine(); } } } Результат работы программы: Листинг 7. Заполнение файла в заданной папке случайными значения типа int. using System; using System.Collections.Generic; using System.IO; namespace Example_8 { class Program { static void Main(string[] args) { try { string path = "C:\\Temp\\TextFile1.txt"; StreamWriter f = new StreamWriter(path); Random rnd = new Random(); int n; for (int i = 0; i < 10; i++) { n = rnd.Next(100); f.WriteLine(n); Console.Write(n + ","); } Console.WriteLine(); f.Close(); string path1 = @"C:\Temp\TextFile1.txt"; StreamReader g = new StreamReader(@path1); List list = new List(); string s; while ((s = g.ReadLine())!= null) { list.Add(int.Parse(s)); } list.Sort(); foreach (int x in list) Console.Write(x + ","); Console.WriteLine(); g.Close(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } Результат работы программы:
«Потоки символов» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot