- •1 Классы потоков
- •1.3 Символьные классы потоков
- •2.1.2 Запись данных в консольный входной поток
- •2.2 Класс FileStream. Файловый побайтовой ввод-вывод
- •2.2.1 Открытие и закрытие файла
- •2.2.2 Считывание байт из объекта класса FileStream..
- •2.3 Файловый ввод-вывод с ориентацией на символы
- •2.3.1 Использование класса StreamWriter
- •2.3.2 Использование класса StreamReader
- •2.4 Перенаправление стандартных потоков
- •2.5 Считывание и запись двоичных данных
- •2.5.1 Класс BinaryWriter
- •Класс BinaryReader
- •Применение двоичного ввода-вывода
- •2.7 Считывание входных данных из массива и запись их в массив
- •2.9 Преобразование числовых строк во внутреннее представление
2.9 Преобразование числовых строк во внутреннее представление
Рассмотренное множество методов работы с файлами не позволяет выполнять преобразование числовых строк (типа “1000”) в двоичное значение, которое можно было бы хранить в int-переменной, что обеспечивало бы наиболее бережливый (parse) режим хранения. Решение было найдено, когда обратили внимание, что все С#-типы являются псевдонимами (одинаковыми словами) для структур, определенных в среде .NET Framework и все С#-типы значений имеют соответствующие члены .NET-имен структур (см. таблицу).
№ |
.NET-имя структуры |
Метод преобразования |
С#-имя |
1 |
Decimal |
static decimal Parse(string str) |
decimal |
2 |
Double |
static double Parse(string str) |
double |
3 |
Single |
static float Parse(string str) |
float |
4 |
Int16 |
static short Parse(string str) |
short |
5 |
Int32 |
static int Parse(string str) |
int |
6 |
Int64 |
static long Parse(string str) |
long |
7 |
UInt16 |
static ushort Parse(string str) |
ushort |
8 |
Uint32 |
static uint Parse(string str) |
uint |
9 |
Uint64 |
static ulong Parse(string str) |
ulong |
10 |
Byte |
static byte Parse(string str) |
byte |
11 |
Sbyte |
static sbyte Parse(string str) |
sbyte |
Эти структуры определены в пространстве имен System и для каждого имени .NET (например Int32) имеется составное имя для С#-типа (System.Int32), что обеспечивает полную интеграцию типов значений в С#-иерархию объектов. Как видно из таблицы эти числовые структуры определяют статические методы, которые преобразуют числовую строку в соответствующий двоичный эквивалент. Каждый метод возвращает двоичное значение, которое соответствует строке.
Методы Parse() генерируют следующие исключения:
- FormatException - параметр str не содержит числа, допустимого для тпа объекта
- ArgumentNullException - параметр str имеет null-значение
- OverflowException - параметр str превышает диапазон допустмого для типа объекта
Методы синтаксического анализа преобразуют прочитанное значение в виде строки с клавиатуры или текстового файла в соответствующий внутренний формат. Ниже приводится программа, которая определяет среднее арифметическое значение от введенных в виде списка значений. Программа выполняет: ввод чисел, считывает эти числа с помощью метода ReadLine(), с помощью метода Int32.Parse() преобразует строки в целочисленное значение, вводит значения, используя методDouble.Parse() для преобразования строк в их double-эквиваленты.
№ 15
// Усреднение списка чисел
using System;
using System.IO;
class AvgNums
{
public static void Main()
{
string str;
int n;
double sum = 0.0;
double avg, t;
Console.Write("\n Сколько чисел будете вводить: ");
str = Console.ReadLine();
try
{
n = Int32.Parse(str);
}
catch (FormatException exc)
{ Console.WriteLine(" U1");
Console.WriteLine(" " + exc.Message);
n = 0;
}
catch (OverflowException exc)
{ Console.WriteLine(" U2");
Console.WriteLine(" " + exc.Message);
n = 0;
}
Console.WriteLine("\n Введите " + n + " чисел.");
for (int i = 0; i < n; i++)
{ Console.Write(" : ");
str = Console.ReadLine();
try {
t = Double.Parse(str);
}
catch (FormatException exc)
{ Console.WriteLine(" U3");
Console.WriteLine(" " + exc.Message);
t = 0.0;
}
catch (OverflowException exc)
{ Console.WriteLine(" U4");
Console.WriteLine(" " + exc.Message);
t = 0;
}
sum += t;
}
avg = sum / n;
Console.WriteLine(" Среднее равно " + avg);
Console.WriteLine("\n\n\n ");
}
}
Рис 15 Результаты преобразования числовых строк
во внутреннее представление