Отношение между С# и .NET
Модуль 5. Объектно-ориентированный подход (ООП). Общие сведения.
Операции ввода-вывода
Установочные и завершающие операции
Используя классы StreamWriter и StreamReader можно создать свои файловые объекты для выполнения различных операций с текстовыми файлами.
//создание нового файла или перезапись существующегоStreamWriter outStream = new StreamWriter(@"c:\a1.txt");//outStream - созданный нами объект //открытие существующего файла на чтениеStreamReader inStream = new StreamReader(@"c:\a1.txt");//inStream - созданный нами объектДля завершения работы с файлом используют метод Close.
outStream.Close();inStream.Close();Для записи в открытый файл используют методы Write и Writeline.
outStream.WriteLine(x);outStream.Write("Z={0}",z);outStream.Write();Для чтения строки из открытого файла используют метод ReadLine.
string s = inStream.ReadLine();Для проверки, достигнут ли конец файла при чтении используют метод Peek или свойство EndOfStream.
while (inStream.Peek()>-1) { string s = inStream.ReadLine(); Console.Writeline(s); }//равнозначный вариантwhile (!inStream.EndOfStream) { string s = inStream.ReadLine(); Console.Writeline(s); }Для того, чтобы считывать отдельные элементы из строки, её считывают целиком, а затем разбивают на массив элементов с помощью метода Split.
while (inStream.Peek()>-1) { string s = inStream.ReadLine(); string[] elements = s.Split( ' ', ',', '.', ':', '\t' ); foreach (string e in elements) { if (e != "") { int d = Convert.ToInt32(e); Console.Write("{0} ", d); } } Console.WriteLine(); }Пример: Транспонировать матрицу, содержащуюся в текстовом файле. Двухмерные массивы использовать нельзя.
using System.IO;static void enter(string filename){ //описываем необходимые переменные int i, j, M, N; string s; //вводим число элементов Console.Write("Введите число строк матрицы N="); s = Console.ReadLine(); N = Convert.ToInt32(s); Console.Write("Введите число столбцов матрицы M="); s = Console.ReadLine(); M = Convert.ToInt32(s); StreamWriter outStream = new StreamWriter(filename); //запускаем циклы по всем элементам матрицы for (i = 0; i < N; i++) //цикл по строкам { for (j = 0; j < M; j++) //цикл по столбцам { //вводим i,j-ый элемент Console.Write("Введите элемент матрицы ({0},{1}) ", i + 1, j + 1); s = Console.ReadLine(); outStream.Write("{0,3} ", s); } outStream.WriteLine(); } outStream.Close();} static void transpose(string filename, string filename2){ StreamReader inStream = new StreamReader(filename); int N = 0; int M = 0; int Mmax = 0; while (inStream.Peek() > -1) { string s = inStream.ReadLine(); string[] elements = s.Split(' '); M = 0; foreach (string e in elements) if (e != "") { M++; if (M > Mmax) Mmax = M; } N++; } inStream.Close(); StreamWriter outStream = new StreamWriter(filename2); for (int j = 0; j < M; j++) //цикл по столбцам { inStream = new StreamReader(filename); for (int i = 0; i < N; i++) //цикл по строкам { string s = inStream.ReadLine(); string[] elements = s.Split(' '); int k = 0; foreach (string e in elements) if (e != "") { if (k == j) { outStream.Write("{0,3} ", e); } k++; } } inStream.Close(); outStream.WriteLine(); } outStream.Close();} static void print(string filename){ StreamReader inStream = new StreamReader(filename); int N = 0; int M = 0; int Mmax = 0; while (inStream.Peek() > -1) { string s = inStream.ReadLine(); Console.WriteLine(s); } inStream.Close();} static void Main(string[] args){ enter(@"c:\a1.txt"); transpose(@"c:\a1.txt", @"c:\a2.txt"); print(@"c:\a2.txt"); Console.ReadKey();}С# — это относительно новый язык программирования, который характеризуется двумя следующими преимуществами.
§ С# спроектирован и разработан специально для применения с Microsoft .NET Framework (развитой платформой разработки, развертывания и выполнения распределенных приложений).
§ С# — язык, основанный на современной объектно-ориентированной методологии проектирования, при разработке которого специалисты из Microsoft опирались на опыт создания подобных языков, построенных в соответствии с предложенными около 20 лет назад объектно-ориентированными принципами.
Нужно подчеркнуть то важное обстоятельство, что С# — это полноценный язык программирования. Хотя он и предназначен для генерации кода, выполняемого в среде .NET, сам по себе он не является частью .NET Существует ряд средств, которые поддерживаются .NET, но не поддерживаются С#, и, есть также средства, поддерживаемые С# и не поддерживаемые .NET (например, некоторые случаи перегрузки операций). Однако поскольку язык С# предназначен для применения на платформе .NET, вам, как разработчику, важно иметь представление о .NET Framework, если вы хотите эффективно разрабатывать приложения на С#. Поэтому в настоящей главе мы потратим некоторое время на то, чтобы заглянуть "за кулисы" .NET