exponenta event banner

fscanf

Считывание данных из текстового файла

Описание

пример

A = fscanf(fileID,formatSpec) считывает данные из открытого текстового файла в вектор столбца A и интерпретирует значения в файле в соответствии с форматом, указанным в formatSpec. fscanf функция повторно применяет формат по всему файлу и помещает указатель на файл в маркер конца файла. Если fscanf не может соответствовать formatSpec в данные считывается только часть, которая соответствует и прекращает обработку.

Текстовый файл обозначается идентификатором файла, fileID. Использовать fopen чтобы открыть файл, укажите кодировку символов и получите fileID значение. По завершении чтения закройте файл, позвонив по телефону fclose(fileID).

пример

A = fscanf(fileID,formatSpec,sizeA) считывает данные файла в массив, A, с размерами, sizeAи размещает указатель файла после последнего считывания значения. fscanf населяет A в порядке столбцов. sizeA должно быть положительным целым числом или иметь вид [m n], где m и n являются положительными целыми числами.

пример

[A,count] = fscanf(___) дополнительно возвращает число полей, fscanf считывает в A. Для числовых данных это количество считанных значений. Этот синтаксис можно использовать с любым из входных аргументов предыдущих синтаксисов.

Примеры

свернуть все

Создайте образец текстового файла, содержащего числа с плавающей запятой.

x = 100*rand(8,1);
fileID = fopen('nums1.txt','w');
fprintf(fileID,'%4.4f\n',x);
fclose(fileID);

Просмотрите содержимое файла.

type nums1.txt
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882

Откройте файл для чтения и получите идентификатор файла. fileID.

fileID = fopen('nums1.txt','r');

Определите формат считываемых данных. Использовать '%f' для указания чисел с плавающей запятой.

formatSpec = '%f';

Считывание данных файла, заполнение выходного массива, A, в порядке столбцов. fscanf повторно применяет формат, formatSpec, по всему файлу.

A = fscanf(fileID,formatSpec)
A = 8×1

   81.4724
   90.5792
   12.6987
   91.3376
   63.2359
    9.7540
   27.8498
   54.6882

A - вектор столбца, содержащий данные из файла.

Закройте файл.

fclose(fileID);

Создайте образец текстового файла, содержащего целые числа и числа с плавающей запятой.

x = 1:1:5;
y = [x;rand(1,5)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4f\n',y);
fclose(fileID);

Просмотрите содержимое файла.

type nums2.txt
1 0.8147
2 0.9058
3 0.1270
4 0.9134
5 0.6324

Откройте файл для чтения и получите идентификатор файла. fileID.

fileID = fopen('nums2.txt','r');

Определите формат считываемых данных и форму выходного массива.

formatSpec = '%d %f';
sizeA = [2 Inf];

Считывание данных файла, заполнение выходного массива, A, в порядке столбцов. fscanf повторно использует формат, formatSpec, по всему файлу.

A = fscanf(fileID,formatSpec,sizeA)
A = 2×5

    1.0000    2.0000    3.0000    4.0000    5.0000
    0.8147    0.9058    0.1270    0.9134    0.6324

fclose(fileID);

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

A = A'
A = 5×2

    1.0000    0.8147
    2.0000    0.9058
    3.0000    0.1270
    4.0000    0.9134
    5.0000    0.6324

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

Создайте образец текстового файла, содержащего значения температуры.

str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.dat','w');
fprintf(fileID,'%s',str);
fclose(fileID);

Прочитайте цифры в файле, пропустив текст, ° C. Также возвращает количество значений, fscanf читает. Расширенный код ASCII 176 представляет знак степени.

fileID = fopen('temperature.dat','r');
degrees = char(176);
[A,count] = fscanf(fileID, ['%d' degrees 'C'])
fclose(fileID);
A =

    78
    72
    64
    66
    49


count =

     5

A - вектор, содержащий числовые значения в файле. count указывает, что fscanf прочтите пять значений.

Входные аргументы

свернуть все

Идентификатор открытого текстового файла, указанный как целое число. Перед чтением файла с помощью fscanf, вы должны использовать fopen чтобы открыть файл и получить fileID.

Типы данных: double

Формат полей данных в файле, указанный как вектор символов или скаляр строки одного или нескольких спецификаторов преобразования. Когда fscanf читает файл, пытается сопоставить данные с форматом, указанным в formatSpec.

Числовые поля

В этой таблице перечислены доступные спецификаторы преобразования для числовых входных данных. fscanf преобразует значения в их десятичное (базовое 10) представление.

Числовой тип поляСпецификатор преобразованияПодробнее

Целое число, с подписью

%d

База 10

%i

Значения в файле определяют базу:

  • По умолчанию используется база 10.

  • Если начальные цифры 0x или 0X, то значения шестнадцатеричные (база 16).

  • Если начальная цифра равна 0, то значения восьмеричные (основание 8).

%ld или %li

64-разрядные значения, базовые 10, 8 или 16

Целое число, без знака

%u

База 10

%o

Основание 8 (восьмеричное)

%x

База 16 (шестнадцатеричная)

%lu, %lo, %lx

64-разрядные значения, базовые 10, 8 или 16

Число с плавающей запятой

%f

Поля с плавающей запятой могут содержать любое из следующих значений (без учета регистра): Inf, -Inf, NaN, или -NaN.

%e

%g

Символьные поля

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

Тип символьного поляСпецификатор преобразованияОписание

Вектор символов или строковый скаляр

%s

Читать все символы, за исключением пробелов.

%c

Прочитайте любой символ, включая пробел.
Для одновременного чтения нескольких символов укажите ширину поля.

Сопоставление шаблонов

%[...]

Только чтение символов в скобках вплоть до первого несоответствующего символа или пробела.

Пример: %[mus] читает 'summer ' как 'summ'.

Если formatSpec содержит комбинацию числовых и символьных спецификаторов, затем fscanf преобразует каждый символ в числовой эквивалент. Это преобразование происходит, даже когда формат явно пропускает все числовые значения (например, formatSpec является '%*d %s').

Дополнительные операторы

  • Игнорируемые поля и символы

    fscanf считывает все числовые значения и символы в файле в последовательности, если не указано игнорировать определенное поле или часть поля. Чтобы пропустить поля, вставьте звездочку (*после знака процента (%). Например, чтобы пропустить целые числа, укажите %*d.

  • Ширина поля

    Чтобы указать максимальное количество цифр или текстовых символов для чтения за один раз, вставьте число после символа процента. Например, %10c читает до 10 символов одновременно, включая пробел. %4f считывает до 4 цифр одновременно, включая десятичную точку.

  • Пропускаемый текст литерала

    fscanf игнорирует указанный текст, добавленный к formatSpec спецификатор преобразования.

    Пример: Level%u читает 'Level1' как 1.

    Пример: %uStep читает '2Step' как 2.

Размеры выходного массива, A, указано как Inf, целое число или двухэлементный вектор строки.

Форма sizeA ВходОписание
InfЧтение в конце файла.
Для числовых данных вывод, A, - вектор столбца.
Для текстовых данных, A - символьный вектор.
nЧитать максимум n числовые значения или символьные поля.
Для числовых данных вывод, A, - вектор столбца.
Для текстовых данных, A, - символьный вектор.
[m,n]Читать максимум m*n числовые значения или символьные поля. n может быть Inf, но m не может. Выходные данные, Aявляется mоколо-n, заполнен порядок столбцов.

Выходные аргументы

свернуть все

Данные файла, возвращаемые в виде вектора столбца, матрицы, символьного вектора или символьного массива. Класс и размер A зависят от formatSpec входные данные:

  • Если formatSpec содержит только числовые спецификаторы, затем A является числовым. При указании sizeA аргумент, затем A является матрицей указанного размера. В противном случае A является вектором-столбцом. Если входные данные содержат менее sizeA значения, затем fscanf подушки A с нулями.

    • Если formatSpec содержит только 64-разрядные целочисленные спецификаторы со знаком, затем A имеет класс int64.

    • Если formatSpec содержит только 64-разрядные целочисленные спецификаторы без знака, затем A имеет класс uint64.

    • В противном случае A имеет класс double.

  • Если formatSpec содержит только символы или текстовые спецификаторы (%c или %s), то A - символьный массив. При указании sizeA и ввод содержит меньше символов, то fscanf подушки A с char(0).

  • Если formatSpec содержит комбинацию числовых и символьных спецификаторов, затем A числовой, класса double, и fscanf преобразует все текстовые символы в их числовой эквивалент. Это происходит даже тогда, когда formatSpec явно пропускает все числовые поля (например, formatSpec является '%*d %s').

  • Если MATLAB ® не может соответствовать данным файла formatSpec, то A может быть числовым или символьным массивом. Класс A зависит от значений, которые fscanf считывает до прекращения обработки.

Число прочитанных символов, возвращаемых в виде скалярного значения.

Совет

  • Спецификаторы формата для функций чтения sscanf и fscanf отличаются от форматов для функций записи sprintf и fprintf. Функции считывания не поддерживают поле точности. Поле width указывает минимум для записи, но максимум для чтения.

Алгоритмы

MATLAB считывает символы, используя схему кодирования, связанную с файлом. Кодировка задается при открытии файла с помощью fopen функция.

Расширенные возможности

.
Представлен до R2006a