Перенаправление стандартных потоков — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Перенаправление стандартных потоков

2019-09-26 497
Перенаправление стандартных потоков 0.00 из 5.00 0 оценок
Заказать работу

Тремя стандартными потоками, доступ к которым осуществляется через свойства Console.Out, Console.In и Console.Error, могут пользоваться все программы, работающие в пространстве имен System. Свойство Console.Out относится к стандартному выходному потоку. По умолчанию это консоль. Например, при вызове метода Console.WriteLine() информация автоматически передается в поток Console.Out. Свойство Console.In относится к стандартному входному потоку, источником которого по умолчанию является клавиатура. Например, при вводе данных с клавиатуры информация автоматически передается потоку Console.In, к которому можно обратиться с помощью метода Console.ReadLine(). Свойство Console.Error относится к ошибкам в стандартном потоке, источником которого также по умолчанию является консоль. Однако эти потоки могут быть перенаправлены на любое совместимое устройство ввода-вывода, например, на работу с физическими файлами.

Перенаправить стандартный поток можно с помощью методов SetIn(), SetOut() и SetError(), которые являются членами класса Console:

static void Setln(TextReader input)

static void SetOut(TextWriter output)

static void SetError(TextWriter output)

Пример перенаправления потоков проиллюстрирован следующей программой, в которой двумерный массив вводится из файла input.txt, а выводится в файл output.txt

static void Main()

{

 try

 {

int[,] MyArray;

StreamReader file=new StreamReader("input.txt");

Console.SetIn(file); // перенаправляем стандартный входной поток на file

string line=Console.ReadLine();

string []mas=line.Split(' ');

int n=int.Parse(mas[0]);

int m=int.Parse(mas[1]);

MyArray = new int[n,m];

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

{

line = Console.ReadLine();

mas = line.Split(' ');

for (int j = 0; j < m; j++)

{

MyArray[i,j] = int.Parse(mas[j]);

}

}

PrintArray("исходный массив:", MyArray, n, m);

file.Close();

}

static void PrintArray(string a, int[,] mas, int n, int m)

{

 StreamWriter file=new StreamWriter("output.txt"); // перенаправляем стандартный входной поток на file

 Console.SetOut(file);

 Console.WriteLine(a);

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

 {

for (int j=0; j<m; j++) Console.Write("{0} ", mas[i,j]);

Console.WriteLine();

 }

 file.Close();

}

___input.txt_________3 41 4 2 84 9 0 15 7 4 2

При необходимости восстановить исходное состояние потока Console.In можно следующим образом:

TextWriter str = Console.In; // первоначально сохраняем исходное состояние входного потока

Console.SetIn(str); // при необходимости восстанавливаем исходное состояние входного потока

Аналогичным образом можно восстановить исходное состояние потока Console.Out:

TextWriter str = Console.Out; // первоначально сохраняем исходное состояние выходного потока…

// при необходимости восстанавливаем исходное состояние выходного потока

Console.SetOut(str);

Вопрос. Для чего нужно два потока Console.Out и Console.Error, если они оба при стандартной работе выводят информацию на экран.

Задания на лабораторную работу.

1. Работа с двоичными файлами:

Создать файл и записать в него вещественные числа из диапазона от a до b с шагом h. Вывести на экран все компоненты файла с нечетными порядковыми номерами.

Пример:

using System;

using System.Text;

using System.IO;

namespace MyProgram

{

 class Program

 {

static void Main()

{

Console.Write("a= ");

double a=double.Parse(Console.ReadLine());

Console.Write("b= ");

double b=double.Parse(Console.ReadLine());

Console.Write("h= ");

double h=double.Parse(Console.ReadLine());

//Записываем в файл t.dat вещественные числа из заданного диапазона

FileStream f=new FileStream("t.dat",FileMode.Open);

BinaryWriter fOut=new BinaryWriter(f);

for (double i=a; i<=b; i+=h)

{

fOut.Write(i);

}

fOut.Close();

//Объекты f и fIn связаны с одним и тем же файлом

f=new FileStream("t.dat",FileMode.Open);

BinaryReader fIn=new BinaryReader(f);

long m=f.Length; //определяем количество байт в потоке

//Читаем данные из файла t.dat начиная с элемента с номером 1, т.е с 8 байта,

  //перемещая внутренний указатель на 16 байт, т.е. на два вещественных числа

for (long i=8; i<m; i+=16)

{

f.Seek(i,SeekOrigin.Begin);

a=fIn.ReadDouble();

Console.Write("{0:f2} ",a);

}

fIn.Close();

f.Close();

}

 }

}

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

2. Создать файл и записать в него обратные натуральные числа 1,1/2,...,1/n. Вывести на экран все компоненты файла с порядковым номером, кратным 3.

3. Создать файл и записать в него n первых членов последовательности Фибоначчи. Вывести на экран все компоненты файла с порядковым номером, не кратным 3.

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

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

6. Дана последовательность из n целых чисел. Создать файл и записать в него числа последовательности, попадающие в заданный интервал. Вывести содержимое файла на экран.

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

8. Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все компоненты, не попадающие в данный диапазон.

9. Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все компоненты файла с нечетными номерами, большие заданного числа.

10. Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все компоненты файла с четными номерами, меньшие заданного числа.

11. Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все положительные компоненты файла.

12. Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Подсчитать среднее арифметическое компонентов файла, стоящих на четных позициях.

13. Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Найти максимальное значение среди компонентов файла, стоящих на нечетных позициях.

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

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

16. Создать файл, состоящий из слов. Вывести на экран все слова, которые начинаются на заданную букву.

17. Создать файл, состоящий из слов. Вывести на экран все слова, длина которых равна заданному числу.

18. Создать файл, состоящий из слов. Вывести на экран все слова, которые начинаются и заканчиваются одной буквой.

19. Создать файл, состоящий из слов. Вывести на экран все слова, которые начинаются на ту же букву, что и последнее слово.

2. Работа с текстовым (символьным) файлом.

Дан текстовый файл. Найти количество строк, которые начинаются с данной буквы.

Пример:

Замечание: Напоминаем, что файл text.txt должен содержать английский текст

using System;

using System.Text;

using System.IO;

using System.Text.RegularExpressions;

namespace MyProgram

{

 class Program

 {

static void Main()

{

Console.Write("Введите заданную букву: ");

char a=char.Parse(Console.ReadLine());

StreamReader fileIn = new StreamReader("text.txt");

string text=fileIn.ReadToEnd(); //считываем из файла весь текст

fileIn.Close();

int k=0;

//разбиваем текст на слова используя регулярные выражения

string []newText=Regex.Split(text,"[,.:;]+");

//подсчитываем количество слов, начинающихся на заданную букву

foreach(string b in newText)

if (b[0]==a)++k;

Console.WriteLine("k= "+k);

}

 }

}

1. Дан текстовый файл. Найти количество строк, которые начинаются и заканчиваются одной буквой.

2. Дан текстовый файл. Найти самую длинную строку и ее длину.

3. Дан текстовый файл. Найти самую короткую строку и ее длину.

4. Дан текстовый файл. Найти номер самой длинной строки.

5. Дан текстовый файл. Найти номер самой короткой строки.

6. Дан текстовый файл. Выяснить, имеется ли в нем строка, которая начинается с данной буквы. Если да, то напечатать ее.

7. Дан текстовый файл. Напечатать первый символ каждой строки.

8. Дан текстовый файл. Напечатать символы с k1 по k2 в каждой строке.

9. Дан текстовый файл. Напечатать все нечетные строки.

10. Дан текстовый файл. Напечатать все строки, в которых имеется хотя бы один пробел.

11. Дан текстовый файл. Напечатать все строки, длина которых равна данному числу.

12. Дан текстовый файл. Напечатать все строки, длина которых меньше заданного числа.

13. Дан текстовый файл. Напечатать все строки с номерами от k1 до k2.

14. Дан текстовый файл. Получить слово, образованное k-ыми символами каждой строки.

15. Дан текстовый файл. Переписать в новый файл все его строки, вставив в конец каждой строки ее номер.

16. Дан текстовый файл. Переписать в новый файл все его строки, вставив в конец каждой строки количество символов в ней.

17. Дан текстовый файл. Переписать в новый файл все его строки, длина которых больше заданного числа.

18. Дан текстовый файл. Переписать в новый файл все его строки четной длины.

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

Контрольные вопросы.


 


Лабораторная работа 15.  
C#. Файловая система

Теоретические сведения.

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

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

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

Следующие типы - DirectoryInfo и FileInfo обладают схожими функциональными возможностями c Directory и Fi1е, но порождены от класса FileSystemInfo и поэтому реализуются путем создания соответствующих экземпляров классов.

Работа с каталогами


Поделиться с друзьями:

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.