Читайте также:
|
|
Считывание строк из открытого текстового файла производится командой fgetl, входным аргументом которой является идентификатор файла, присвоенный ему при открытии, а выходным – строковая переменная. Каждое обращение к fgetl позволяет последовательно считывать строки по одной от начала до конца файла. Контроль за достижением конца файла осуществляется функцией feof с входным аргументом – идентификатором файла, feof возвращает логическую единицу, если в файле нет больше строк и логический ноль в противном случае.
Функция fscanfпозволяет последовательно считывать данные из текстового файла, разделенные одним или несколькими пробелами, и записывать их в переменные подходящих типов. Условно можно считать, что fscanf осуществляет обратное действие по отношению к fprintf, а именно, считывание в заданном формате. Содержимое текстового файла составляют такие элементы, как текст и числа. Текст всегда считывается в строковые переменные, а числа можно занести как в строковые, так и числовые переменные.
Вызов функции fscanf производится с тремя входными аргументами – идентификатором файла, строкой с форматом, числом считываемых в данном формате объектов и одним выходным аргументом, в который записывается результат.
а = fscanf(идентификатор, 'список_форматов', число считываемых элементов)
Для считывания строки предусмотрен спецификатор формата s, для целых чисел – d, а для вещественных – g. Необходимо следить за соответствием формата и данных, хранящихся в файле. Работу с функцией fscanf проще всего понять на нескольких простых примерах. Пусть, например, в файле studentl.txt, состоящем из одной строки, содержится информация о студенте:
Александров 1990 учащийся 201 4.5
Пример 4. Файл-программа, записывающая фамилию Александров в строковую переменную Family, целое число (год) 1990 – в переменную Year, звание учащийся– в строковую переменную status, целое число (номер группы) 201– в Group, вещественное число (средний балл) 4.5 – в MeanMark. Считывание сопровождается выводом в командное окно для контроля. Перед запуском программы не забудьте создать файл studentl.txt с информацией о студенте
F = fopen('student1.txt', 'r');
Family = fscanf(F, '%s', 1)
Year = fscanf(F, '%d', 1)
Status = fscanf(F, '%s', 1)
Group = fscanf(F, '%s', 1)
MeanMark = fscanf(F, '%g', 1)
fclose(F);
Результат работы программы
Family =
Александров
Year =
Status =
учащийся
Group =
MeanMark =
4.5000
Разобранный выше пример демонстрирует самый простой вариант использования fscanf – поэлементное считывание, при котором каждый вызов fscanf заносит в переменную соответствующее значение. Замените команды с fscanf на одну
str = fscanf(F, '%s', 5)
и посмотрите содержимое str. В данном случае вся информация интерпретируется как текстовая и заносится в одну строковую переменную:
str =
Александров1990учащийся2014.5
Допустимо не указывать число считываемых объектов и вызывать функцию fscanf только с двумя входными аргументами. Если при этом используется формат %s, то все содержимое считается в строковую переменную так же, как показано выше. Числовые форматы %d и %g позволяют записать содержимое файла, состоящего из чисел, в вектор. Считывание чисел продолжается до тех пор, пока не будет достигнут конец файла или не встретится текст.
Пример 5. Пусть в файле res.dat хранится следующая информация (необязательно в одну строку):
1.2274 1.4998
-2.0337 (результаты измерений)
F = fopen('res.dat', 'r');
vect = fscanf(F, '%g')
fclose(F);
Функция fscanf заносит числовые значения в вектор vect, состоящий из трех элементов, и отображает его содержимое в командном окне. Для последующего считывания строки перед закрытием файла следовало бы применить fscanf с форматом %s. Если числовая информация, представленная в файле, обладает матричной структурой, то задание вектора, содержащего размеры матрицы, в качестве третьего аргумента fscanf позволяет записать информацию в матрицу.
Дата добавления: 2015-07-15; просмотров: 65 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Запись данных массивов структур в текстовый файл | | | Основы теории |