ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Функции 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 Таким образом можно осуществлять запись разнородных данных в файл в требуемом формате. Не нашли, что искали? Воспользуйтесь поиском:
|