Файлы с последовательным доступом
• Для просмотра файла текстовым редактором.
• Без последующей разборки записей на данные.
• Самое дружественное представление информации на экране.
Примечание. Записи не структурированы, поэтому не предполагается их разбор на переменные. Каждая запись – это одна переменная типа 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-08; просмотров: 664;