5.3. Функции fscanf и fprintfОписанные выше функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или числа или текст. Например, при экспорте данных из MS Excel можно получить файл формата
где числа записаны в столбик и разделены запятой. Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции чтения
и записи
таких данных в файл. Здесь value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных; a,b,.. – переменные для записи в файл. Приведем пример чтения данных из файла, приведенного выше с помощью функции fscanf():
Здесь форматная строка состоит из спецификаторов %d – работа с целочисленными значениями; и записана в виде '%d,%f,%f,%f,%f,%d'. Это означает, что сначала должно быть прочитано целочисленное значение из файла, затем, через запятую должно читаться второе вещественное значение, затем третье и так далее до последнего целочисленного значения. Полный список возможных спецификаторов приведен в табл. 5.2. В результате работы программы переменная S будет представлять собой вектор-столбец, состоящий из 24 элементов:
Несмотря на то, что данные были корректно считаны из файла, они из таблицы были преобразованы в вектор-столбец, что не соответствует исходному формату представления данных. Чтобы сохранить верный формат данных, функцию fscanf() в приведенном примере следует записать так:
Тогда на выходе получится матрица S размером в 6 столбцов и 4 строки с соответствующими числовыми значениями. Таблица 5.2. Список основных спецификаторов для функций fscanf() и fprintf()
Для записи данных в текстовый файл в заданном формате используется функция fprintf(). Ниже представлен пример записи матрицы чисел
в файл, в котором числовые значения должны разделяться точкой с запятой. Будем также предполагать, что данная матрица хранится в переменной Y.
Следует отметить, что в функции fprintf() переменная Y имеет знак транспонирования ‘, т.к. данные в файл записываются по столбцам матрицы. Кроме того, перед спецификаторами стоят числа, которые указывают сколько значащих цифр числа должно быть записано в файл. Например, спецификатор %6d говорит о том, что целые числа должны иметь 6 значащих цифр, а спецификатор %.4f означает, что после запятой будет отображено только 4 цифры. Наконец, в форматной строке были использованы управляющие символы \r – возврат каретки; которые необходимы для формирования строк в выходном файле. В итоге, содержимое файла будет иметь вид:
С помощью функции fprintf() можно записать значения двух и более переменных разного формата. Например, для записи числа и строки можно воспользоваться следующей записью:
и содержимое файла будет иметь вид:
Таким образом можно осуществлять запись разнородных данных в файл в требуемом формате.
|