Кодировка текстовых потоков

  • docx
  • 18.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-002151.docx

 

Кодировка текстовых потоков

 

В   C#   используются   следующие   статические   свойства   класса

System.Text.Encoding для кодировки текстовых потоков

 

Кодировка

Описание

ASCII

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

Unicode

Кодировка UNICODE. Для представления символов используется 16 бит (т. е. 2 байта). Сигнатура = FF FE в


 

нач.файла

для StreamWriter

UTF7

Кодировка UCS Transformation Format. Применяется для представления символов UNICODE. В ней использу-

ются младшие 7 бит данных

UTF8

To же, но для представления символов UNICODE в ней

используется 8 бит данных

Default

Системная кодировка ANSI (не путайте ее с кодиров-

кой ASCII). В этой кодировке для представления каждого символа используется 8 бит данных

 

Свойства класса кодировки System.Text.Encoding: ASCII 1 байт (старший бит = 0);

Default – по умолчанию (UTF8); Unicode – 2 байта;

UTF32 4 байта;

UTF7 – 1 байт, старший бит не используется; UTF8 1 байт (по умолчанию в ,NET).

 

Примеры произвольного доступа к записям. Задача 1.

/*

Разработать класс «Студент». Каждый студент определяется полями: Фамилия, имя (тип string);

Год рождения (тип int);

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

 

Создать программу учета студентов группы (в виде массива). Информацию о студен- тах ввести с клавиатуры. Признаком конца списка является ввод пробела в качестве фами- лии студента.

 

Вывести на экран информацию обо всех студентах.

 

Информацию обо всех студентах сохранить в файле С:\Temp\GroupDirect.bin с произ- вольным доступом. Обеспечить постоянную длину всех записей. */

 

using System; using System.IO;

using System.Collections;

 

class Student

{

public string     fio; public uint        yar;

public float      ball;

 

public Student(string f, uint y, float b)

{

fio = f; yar = y; ball = b;

}


public void Show()

{

Console.WriteLine("Студент {0}, год рождения {1}, ср.балл = {2}", fio, yar, ball);

}

}

 

class Example1

{

public static void Main()

{

string            fio = " ";

uint               god = 0, n = 1;

float              ball = 0;

Student        std;

BinaryWriter dataOut;

FileStream     fs;

 

ArrayList tableStd = new ArrayList(); while (true)

{

Console.WriteLine(

"\n                                        Студент {0}                                                        ",

n);

Console.Write(

"Введите фамилию (не > 15 символов, пробел - конец списка): "); fio = Console.ReadLine();

if (fio == " " || fio.Length == 0) break;

try

{

Console.Write("Введите год рождения: "); god = uint.Parse(Console.ReadLine());

 

Console.Write("Введите средний балл: "); ball = float.Parse(Console.ReadLine());

}

catch

{

Console.WriteLine("==ОШИБКА== Неверный формат ввода. Повторите!"); continue;

}

 

std = new Student(fio, god, ball); tableStd.Add(std);

n++;

}

 

// Таблица создана. выведем ее на экран и сохраним в файле

Console.WriteLine("\n");

 

try


{

fs = new FileStream(@"c:\Temp\GroupDirect.bin", FileMode.Create,

Fil-

eAccess.Write);

dataOut = new BinaryWriter(fs, System.Text.Encoding.Unicode);

 

 

for (int i = 0; i < tableStd.Count; i++)

{

std = (Student)tableStd[i]; std.Show();

 

dataOut.Write("Студент"); fio = std.fio.PadRight(15); dataOut.Write(fio); dataOut.Write(std.yar); dataOut.Write(std.ball);

}

}

 

catch (Exception e)

{

Console.WriteLine("Error: " + e.Message); return;

}

fs.Close();

}

}

 

Задача 2.

/*

Вывести на экран информацию из файла С:\Temp\GroupDirect.bin о студентах, заданных порядковым номером.

Номера студентов ввести с клавиатуры. Первый студент имеет номер 1.

Признаком конца списка является ввод 0 в качестве номера студента.

*/

 

using System; using System.IO;

using System.Collections; using System.Text;

 

class Example

{

public static void Main()

{

string fio; uint god; float ball;

 

uint    N;      // порядковый номер студента в файле

 

string str;


string path = @"c:\Temp\GroupDirect.bin";

uint kRec;                              // количество записей

const uint lRec = (7*2+1)+(15*2+1)+4+4; // длина записи дент,fio,god,ball)

if (!File.Exists(path))

{


 

 

//                        (Сту-


Console.WriteLine("Файл отсутствует."); return;

}

 

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); BinaryReader dataIn = new BinaryReader(fs, Encoding.Unicode);

 

kRec = (uint)fs.Length / lRec; //кол.записей = длина файла /

 

длина записи

Console.WriteLine("В файле студентов: {0}", kRec);

 

while (true)

{

 

Console.WriteLine("\n                                                                                     "); Console.Write("Введите номер студента (0 - конец поиска): ");

try

{

N = uint.Parse(Console.ReadLine());

}

catch

{

Console.WriteLine("==ОШИБКА== Повторите ввод целого числа."); continue;

}

if (N == 0) break;

 

if (N > kRec)

{

Console.WriteLine("\n==ОШИБКА== Студента с таким номером нет."); Console.WriteLine("         Всего в файле студентов: {0}", kRec);

continue;

}

 

// Позиционируем указатель записи fs.Seek((N - 1) * lRec, SeekOrigin.Begin); try

{

str = dataIn.ReadString(); fio = dataIn.ReadString(); god = dataIn.ReadUInt32(); ball = dataIn.ReadSingle();

 

Console.WriteLine("Студент {0}, год рождения {1}, ср.балл = {2}\n", fio,                    god,          ball);


}

catch (Exception e)

{

Console.WriteLine("Error: " + e.Message); return;

}

}

fs.Close();

}

}