fscanf

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

Синтаксис

A = fscanf(fileID,formatSpec)
A = fscanf(fileID,formatSpec,sizeA)
[A,count] = 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.

Numeric Fields

Эта таблица приводит доступные спецификаторы преобразования для числовых входных параметров. 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

Character Fields

Эта таблица приводит доступные спецификаторы преобразования для символьных входов.

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

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

%s

Считайте все символы, исключая пробелы.

%c

Считайте любой отдельный символ, включая пробел.
Чтобы считать несколько символов за один раз, задайте ширину поля.

Сопоставление с образцом

%[...]

Символы только для чтения в скобках до первого символа несоответствия или пробела.

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

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

Optional Operators

  • Поля и символы, чтобы проигнорировать

    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-by-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