Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Функции fscanf и fprintf





Описанные выше функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или числа или текст. Например, при экспорте данных из MS Excel можно получить файл формата

174500,1.63820,1.63840,1.63660,1.63750,288
180000,1.63740,1.63950,1.63660,1.63820,361
181500,1.63830,1.63850,1.63680,1.63740,223
183000,1.63720,1.64030,1.63720,1.64020,220

где числа записаны в столбик и разделены запятой.

Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции чтения

[value, count] = fscanf(fid, format, size)

и записи

count = fprintf(fid, format, a,b,...)

таких данных в файл. Здесь value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных; a,b,.. – переменные для записи в файл.

Приведем пример чтения данных из файла, приведенного выше с помощью функции fscanf():

function fscanf_ex

fid = fopen('my_excel.dat', 'r');
if fid == -1
error('File is not opened');
end

S = fscanf(fid, '%d,%f,%f,%f,%f,%d');
fclose(fid);

Здесь форматная строка состоит из спецификаторов

%d – работа с целочисленными значениями;
%f – работа с вещественными значениями

и записана в виде '%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()

Спецификатор Описание
%d целочисленные значения
%f вещественные значения
%s строковые данные
%c символьные данные
%u беззнаковые целые значения

Для записи данных в текстовый файл в заданном формате используется функция fprintf(). Ниже представлен пример записи матрицы чисел

180000 1.28210 1.28240 1.28100 1.28120 490
190000 1.28100 1.28150 1.27980 1.28070 444
200000 1.28050 1.28080 1.27980 1.28000 399
210000 1.27990 1.28020 1.27880 1.27970 408
220000 1.27980 1.28060 1.27880 1.28030 437
230000 1.28040 1.28170 1.28020 1.28130 419
000000 1.28140 1.28140 1.28010 1.28100 294
010000 1.28080 1.28190 1.28030 1.28180 458
020000 1.28190 1.28210 1.28080 1.28140 384
030000 1.28130 1.28170 1.28080 1.28140 313

в файл, в котором числовые значения должны разделяться точкой с запятой. Будем также предполагать, что данная матрица хранится в переменной Y.

function fprintf_ex

fid = fopen('my_excel.txt', 'w');
if fid == -1
error('File is not opened');
end

fprintf(fid, '%6d;%.4f;%.4f;%.4f;%.4f;%d\r\n', Y');
fclose(fid);

Следует отметить, что в функции fprintf() переменная Y имеет знак транспонирования ‘, т.к. данные в файл записываются по столбцам матрицы. Кроме того, перед спецификаторами стоят числа, которые указывают сколько значащих цифр числа должно быть записано в файл. Например, спецификатор %6d говорит о том, что целые числа должны иметь 6 значащих цифр, а спецификатор %.4f означает, что после запятой будет отображено только 4 цифры. Наконец, в форматной строке были использованы управляющие символы

\r – возврат каретки;
\n – переход на новую строку

которые необходимы для формирования строк в выходном файле. В итоге, содержимое файла будет иметь вид:

180000;1.2821;1.2824;1.2810;1.2812;490
190000;1.2810;1.2815;1.2798;1.2807;444
200000;1.2805;1.2808;1.2798;1.2800;399
210000;1.2799;1.2802;1.2788;1.2797;408
220000;1.2798;1.2806;1.2788;1.2803;437
230000;1.2804;1.2817;1.2802;1.2813;419
0;1.2814;1.2814;1.2801;1.2810;294
10000;1.2808;1.2819;1.2803;1.2818;458
20000;1.2819;1.2821;1.2808;1.2814;384
30000;1.2813;1.2817;1.2808;1.2814;313

С помощью функции fprintf() можно записать значения двух и более переменных разного формата. Например, для записи числа и строки можно воспользоваться следующей записью:

str = 'Hello';
y = 10;
count = fprintf(fid, '%d\r\n%s\r\n', y, str);

и содержимое файла будет иметь вид:

10
Hello

Таким образом можно осуществлять запись разнородных данных в файл в требуемом формате.

Date: 2015-10-19; view: 314; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию