Файлы с последовательным доступом
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

• Для просмотра файла текстовым редактором.

• Без последующей разборки записей на данные.

• Самое дружественное представление информации на экране.

 

Примечание. Записи не структурированы, поэтому не предпо­лага­ется их разбор на переменные. Каждая запись – это одна переменная типа string.

 

Форматирование:

Метод Format() для каждой записи, то есть одна запись – это одна строка. В записи, кроме переменных, предполагается наличие связующих слов.

 

 str = Format("Это {0}-ая строка", i);

 

Вывод в файл:

Способ 1. В цикле методом WriteLine класса StreamWriter:

 

sw. WriteLine ("Группа 171-1");

sw. WriteLine (Format("Студент {0}, курс {1}", fio, kurs) );

 

Способ 2. Накапливать строки в массиве строк и выводить их одним вызовом статического метода WriteAllLines класса File:

 

string[ ] text = { "Hello", "And", "Welcome" };

File.WriteAllLines (@"c:\temp\Text.txt", text );

 

Проблема: не всегда при создании массива строк изначально известен его размер.

 

Чтение:

только последовательное методом ReadLine в цикле или методом ReadAllLines за один вызов без последующей разборки записи на данные.

Достоинство метода WriteAllLines: размерность массива строк устанавливается методом.

 

Найти требуемую строку можно методами класса String, например, StartsWith.

 

Загрузка в базу данных:

не предполагается, так как все строки разные.

 

 

• Для просмотра файла текстовым редактором.

• Для редактирования файла вручную из текстового редактора.

• Для загрузки файла в программу и разбиения записей на составляющие данные.

 

1. Выводимые данные могут содержать внутри себя произвольное количество пробелов (разделителей).

 

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

Поэтому предлагается способ вывода каждой переменной в виде отдельной строки.

 

Форматирование:

Каждая нестроковая переменная преобразуется в строку методом ToString. В каждой записи в строго фиксированном месте могут присутствовать связующие слова.

 

int kurs ;

str = ToString(kurs) ;

 

Вывод в файл:

Способ 1. Каждая переменная выводится в виде отдельной строки методом WriteLine() класса StreamWriter:

 

 sw. WriteLine (fio);

 sw. WriteLine (kurs.ToString());

 

Способ 2. Все выводимые строки накапливаются в массиве строк и этот массив выводится одним вызовом статического метода WriteAllLines класса File:

 

 string[ ] text = new string[200] ;

 text[0] = fio; text[1] = kurs.ToString(); // и т.д. для всех переменных

         . . .           // и т.д. для всех записей

 text[i] = fio; text[i+1] = kurs.ToString(); // и т.д. для всех переменных

 

 File.WriteAllLines ("Text.txt", Text );

 

Проблема: не всегда при создании массива строк известен его размер. Следует использовать класс ArrayList.

 

Чтение:

только последовательное методом ReadLine в цикле или методом ReadAllLines за один вызов.

 

Загрузка в базу данных:

Каждая прочитанная строка (т.е. переменная) преобра­зу­ет­ся в исходный тип:

kurs = int.Parse ( text );   // после ReadLine

-или-

kurs = int.Parse ( text[i] ); // после ReadAllLines

 

Связующие слова пропускаются

 

2. Выводимые данные не содержат внутри себя пробелов (разделителей) или содержат их фиксированное количество.

Примечание. Можно объединить все данные в одну строку, отде­ляя их друг от друга пробелом (разделителями). Разобрать такую запись после ее чтения из файла на данные можно методом Split класса String.

 

Форматирование:

Формируется одна строка на запись, состоящая из данных, преобразованных в подстроки методами Format() и/или ToString.

Данные друг от друга должны отделяться одним или несколькими пробелами (уникальными разделителями), на которые при разборке будет реагировать метод Split.

В записях, кроме переменных, могут находиться связующие слова, которые при разборке строки пропускаются.

 

str = Format ("Запись-1 " + fio + " " + kurs);

-или-

str = "Запись-1 " + fio + " " + ToString (kurs);

 

Вывод в файл :

Способ 1. Методом WriteLine класса StreamWriter:

 

sw. WriteLine (str);

 

Способ 2. Накапливать строки в массиве строк и выводить их одним вызовом статического метода WriteAllLines класса File:

 

 string[ ] text ;

. . .

 File.WriteAllLines (@"c:\temp\Text.txt", text );

 

Чтение:

только последовательное методом ReadLine в цикле или методом ReadAllLines за один вызов.

 

Загрузка в базу данных:

Каждая прочитанная строка разбивается на массив подстрок, каждая из которых потом преобразуется с помощью метода Parse:

 

char [ ] delimiter = { ', ' }; // запятая и пробел - разделители

string record = "Иванов, курс 2";

string [ ] data = null;

 

data = record.Split (delimiter);  // data[0] – fio, data[2] – kurs

fio = data[0] ; kurs = int.Parse (data[2]);

 

Связующие слова пропускаются (в примере - data[1]).

 

Дата: 2019-02-02, просмотров: 246.