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

Поля с плавающей точкой могут содержать любое из следующих (не чувствительный к регистру): InfInfNaN, или -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 ]Читайте в большей части mN числовые значения или символьные поля. n может быть Inf, но m не может. Выход, A, m- n, заполненный порядок следования столбцов.

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

свернуть все

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

  • Если formatSpec содержит только числовые спецификаторы, затем A isnumeric. Если вы задаете 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