Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
5.3. Функции fscanf и fprintf
Описанные выше функции работы с файлами
позволяют записывать и считывать информацию по байтам, которые затем требуется
правильно интерпретировать для преобразования их в числа или строки. В то же
время выходными результатами многих программ являются текстовые файлы, в
которых явным образом записаны те или числа или текст. Например, при экспорте
данных из MS Excel можно получить
файл формата
174500,1.63820,1.63840,1.63660,1.63750,288
где числа записаны в столбик и разделены запятой. Прочитать такой файл побайтно, а затем
интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих
целей были специально разработаны функции чтения
[value, count] = fscanf(fid,
format, size)
и записи
count = fprintf(fid, format,
a,b,...)
таких данных в файл. Здесь value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных; a,b,.. – переменные для записи в файл. Приведем пример чтения данных из файла,
приведенного выше с помощью функции fscanf():
function fscanf_ex
Здесь форматная строка состоит из спецификаторов %d – работа с
целочисленными значениями;
и записана в виде '%d,%f,%f,%f,%f,%d'. Это означает, что сначала должно быть прочитано целочисленное значение из файла, затем, через запятую должно читаться второе вещественное значение, затем третье и так далее до последнего целочисленного значения. Полный список возможных спецификаторов приведен в табл. 5.2. В результате работы программы переменная
S будет
представлять собой вектор-столбец, состоящий из 24 элементов:
S = [174500 1,6382 1,6384 1,6366 1,6375 288 180000 1,6374 1,6395 1,6366
1,6382 361 181500 1,6383 1,6385 1,6368 1,6374 223 183000 1,6372 1,6403 1,6372 1,6402
220]’;
Несмотря на то, что данные были
корректно считаны из файла, они из таблицы были преобразованы в вектор-столбец,
что не соответствует исходному формату представления данных. Чтобы сохранить
верный формат данных, функцию fscanf() в приведенном примере следует
записать так:
S = fscanf(fid,
'%d,%f,%f,%f,%f,%d', [6 4]);
Тогда на выходе получится матрица S размером в 6 столбцов и 4 строки с соответствующими числовыми значениями. Таблица 5.2. Список основных спецификаторов для функций fscanf() и fprintf()
Для записи данных в текстовый файл в
заданном формате используется функция fprintf(). Ниже
представлен пример записи матрицы чисел
180000 1.28210 1.28240 1.28100 1.28120
490
в
файл, в котором числовые значения должны разделяться точкой с запятой. Будем
также предполагать, что данная матрица хранится в переменной Y.
function fprintf_ex
Следует отметить, что в функции fprintf() переменная Y имеет знак транспонирования ‘, т.к. данные в файл записываются по столбцам матрицы. Кроме того, перед спецификаторами стоят числа, которые указывают сколько значащих цифр числа должно быть записано в файл. Например, спецификатор %6d говорит о том, что целые числа должны иметь 6 значащих цифр, а спецификатор %.4f означает, что после запятой будет отображено только 4 цифры. Наконец, в форматной строке были использованы управляющие символы r – возврат
каретки;
которые
необходимы для формирования строк в выходном файле. В итоге, содержимое файла
будет иметь вид:
180000;1.2821;1.2824;1.2810;1.2812;490
С помощью функции fprintf() можно
записать значения двух и более переменных разного формата. Например, для записи
числа и строки можно воспользоваться следующей записью:
str = 'Hello';
и
содержимое файла будет иметь вид:
10
Таким образом можно осуществлять запись разнородных данных в файл в требуемом формате.
|
1 |
Оглавление
|