textscan

Чтение форматированных данных из текстового файла или строки

Описание

пример

C = textscan(fileID,formatSpec) считывает данные из открытого текстового файла в массив ячеек, C. Текстовый файл обозначается идентификатором файла fileID. Использование fopen чтобы открыть файл и получить fileID значение. Когда вы закончите чтение из файла, закройте файл, позвонив fclose(fileID).

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

пример

C = textscan(fileID,formatSpec,N) считывает данные файла с помощью formatSpec N раз, где N является положительным целым числом. Чтобы считать дополнительные данные из файла после N циклы, вызов textscan снова используя исходную fileID. Если вы возобновляете текстовый скан файла, вызывая textscan с тем же идентификатором файла (fileID), затем textscan автоматически возобновляет чтение в точке, где завершено последнее чтение.

пример

C = textscan(chr,formatSpec) читает текст из вектора символов chr в C массива ячеек. При чтении текста из вектора символов повторяются вызовы в textscan перезапускать скан с самого начала каждый раз. Чтобы перезапустить скан из последней позиции, запросите position выход.

textscan пытается соответствовать данным в вектор символов chr в формат, заданный в formatSpec.

C = textscan(chr,formatSpec,N) использует formatSpec N раз, где N является положительным целым числом.

пример

C = textscan(___,Name,Value) задает опции с использованием одного или нескольких Name,Value парные аргументы, в дополнение к любому из входных параметров в предыдущих синтаксисах.

пример

[C,position] = textscan(___) возвращает положение в файле или векторе символов в конце скана в качестве второго выходного аргумента. Для файла это значение, которое ftell(fileID) вернется после вызова textscan. Для вектора символов, position указывает, сколько символов textscan читать.

Примеры

свернуть все

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

chr = '0.41 8.24 3.57 6.24 9.27';
C = textscan(chr,'%f');

Спецификатор '%f' в formatSpec говорит textscan для соответствия каждому полю в chr с двойной точностью числа с плавающей запятой.

Отображение содержимого массива ячеек C.

celldisp(C)
 
C{1} =
 
    0.4100
    8.2400
    3.5700
    6.2400
    9.2700

 

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

C = textscan(chr,'%3.1f %*1d');

Спецификатор %3.1f указывает ширину поля 3 цифры и точность 1. The textscan функция считывает в общей сложности 3 цифры, включая десятичную точку и 1 цифру после десятичной точки. Спецификатор, %*1d, говорит textscan чтобы пропустить оставшуюся цифру.

Отображение содержимого массива ячеек C.

celldisp(C)
 
C{1} =
 
    0.4000
    8.2000
    3.5000
    6.2000
    9.2000

 

Считайте вектор символов, который представляет набор шестнадцатеричных чисел. Текст, который представляет шестнадцатеричные числа, включает цифры 0- 9, буквы a- f или A- F, и опционально префиксы 0x или 0X.

Чтобы соответствовать полям в hexnums для шестнадцатеричных чисел используйте '%x' спецификатор. The textscan функция преобразует поля в беззнаковые 64-битные целые числа.

hexnums = '0xFF 0x100 0x3C5E A F 10';
C = textscan(hexnums,'%x')
C = 1x1 cell array
    {6x1 uint64}

Отображение содержимого C как вектор-строка.

transpose(C{:})
ans = 1x6 uint64 row vector

     255     256   15454      10      15      16

Можно преобразовать поля в знаковые или беззнаковые целые числа, имеющие 8, 16, 32 или 64 бита. Преобразование полей в hexnums для знаковых 32-битных целых чисел используйте '%xs32' спецификатор.

C = textscan(hexnums,'%xs32');
transpose(C{:})
ans = 1x6 int32 row vector

     255     256   15454      10      15      16

Можно также задать ширину поля для интерпретации входов. В этом случае префикс отсчитывается по ширине поля. Для примера, если вы задаете ширину поля три, как в %3x, затем textscan разделяет текст на '0xAF 100' в три части текста, '0xA', 'F', и '100'. Три части текста рассматриваются как различные шестнадцатеричные числа.

C = textscan('0xAF 100','%3x');
transpose(C{:})
ans = 1x3 uint64 row vector

    10    15   256

Считайте вектор символов, который представляет набор двоичных чисел. Текст, который представляет двоичные числа, включает цифры 0 и 1, и опционально префиксы 0b или 0B.

Чтобы соответствовать полям в binnums для двоичных чисел используйте '%b' спецификатор. The textscan функция преобразует поля в беззнаковые 64-битные целые числа.

binnums = '0b101010 0b11 0b100 1001 10';
C = textscan(binnums,'%b')
C = 1x1 cell array
    {5x1 uint64}

Отображение содержимого C как вектор-строка.

transpose(C{:})
ans = 1x5 uint64 row vector

   42    3    4    9    2

Можно преобразовать поля в знаковые или беззнаковые целые числа, имеющие 8, 16, 32 или 64 бита. Преобразование полей в binnums для знаковых 32-битных целых чисел используйте '%bs32' спецификатор.

C = textscan(binnums,'%bs32');
transpose(C{:})
ans = 1x5 int32 row vector

   42    3    4    9    2

Можно также задать ширину поля для интерпретации входов. В этом случае префикс отсчитывается по ширине поля. Для примера, если вы задаете ширину поля три, как в %3b, затем textscan разделяет текст на '0b1010 100' в три части текста, '0b1', '010', и '100'. Он рассматривает три части текста как различные двоичные числа.

C = textscan('0b1010 100','%3b');
transpose(C{:})
ans = 1x3 uint64 row vector

   1   2   4

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

Загрузка файловой scan1.dat и предварительный просмотр его содержимого в текстовом редакторе. Снимок экрана показан ниже.

 filename = 'scan1.dat';

Откройте файл и прочитайте каждый столбец с соответствующим спецификатором преобразования. textscan возвращает 1-by-9 C массива ячеек.

fileID = fopen(filename);
C = textscan(fileID,'%s %s %f32 %d8 %u %f %f %s %f');
fclose(fileID);
whos C
  Name      Size            Bytes  Class    Attributes

  C         1x9              2105  cell               

Просмотрите тип данных MATLAB ® каждой из камер в C.

C
C=1×9 cell array
  Columns 1 through 5

    {3x1 cell}    {3x1 cell}    {3x1 single}    {3x1 int8}    {3x1 uint32}

  Columns 6 through 9

    {3x1 double}    {3x1 double}    {3x1 cell}    {3x1 double}

Исследуйте отдельные записи. Заметьте, что C{1} и C{2} являются массивами ячеек. C{5} относится к типу данных uint32, так что первые два элемента C{5} являются максимальными значениями для 32-битное беззнаковое целое число, или intmax('uint32').

celldisp(C)
 
C{1}{1} =
 
09/12/2005
 
 
C{1}{2} =
 
10/12/2005
 
 
C{1}{3} =
 
11/12/2005
 
 
C{2}{1} =
 
Level1
 
 
C{2}{2} =
 
Level2
 
 
C{2}{3} =
 
Level3
 
 
C{3} =
 
   12.3400
   23.5400
   34.9000

 
 
C{4} =
 
   45
   60
   12

 
 
C{5} =
 
   4294967295
   4294967295
       200000

 
 
C{6} =
 
   Inf
  -Inf
    10

 
 
C{7} =
 
       NaN
    0.0010
  100.0000

 
 
C{8}{1} =
 
Yes
 
 
C{8}{2} =
 
No
 
 
C{8}{3} =
 
No
 
 
C{9} =
 
   5.1000 + 3.0000i
   2.2000 - 0.5000i
   3.1000 + 0.1000i

 

Удалите буквенный текст 'Level' из каждого поля во втором столбце данных из предыдущего примера. Предварительный просмотр файла показан ниже.

Откройте файл и совпадите с буквенным текстом во входах formatSpec.

filename = 'scan1.dat';
fileID = fopen(filename);
C = textscan(fileID,'%s Level%d %f32 %d8 %u %f %f %s %f');
fclose(fileID);
C{2}
ans = 3x1 int32 column vector

   1
   2
   3

Просмотрите тип данных MATLAB ® второй камеры в C. Вторая камера 1-by-9 массив ячеек, C, теперь имеет тип данных int32.

disp( class(C{2}) )
int32

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

filename = 'scan1.dat';
fileID = fopen(filename);
dates = textscan(fileID,'%s %*[^\n]');
fclose(fileID);
dates{1}
ans = 3x1 cell
    {'09/12/2005'}
    {'10/12/2005'}
    {'11/12/2005'}

textscan возвращает даты массива ячеек.

Загрузите файл data.csv и предварительный просмотр его содержимого в текстовом редакторе. Снимок экрана показан ниже. Заметьте, что файл содержит данные, разделенные запятыми, а также содержит пустые значения.

Чтение файла, преобразование пустых камер в -Inf.

filename = 'data.csv';
fileID = fopen(filename);
C = textscan(fileID,'%f %f %f %f %u8 %f',...
'Delimiter',',','EmptyValue',-Inf);
fclose(fileID);
column4 = C{4}, column5 = C{5}
column4 = 2×1

     4
  -Inf

column5 = 2x1 uint8 column vector

    0
   11

textscan возвращает 1-by-6 массив ячеек, C. The textscan функция преобразует пустое значение в C{4} на -Inf, где C{4} сопоставлен с форматом с плавающей точкой. Потому что MATLAB ® представляет беззнаковое целое число -Inf как 0, textscan преобразует пустое значение в C{5} на 0, и не -Inf.

Загрузите файл data2.csv и предварительный просмотр его содержимого в текстовом редакторе. Снимок экрана показан ниже. Заметьте, что файл содержит данные, которые могут быть интерпретированы как комментарии и другие записи, такие как 'NA' или 'na' которые могут указывать на пустые поля.

filename = 'data2.csv';

Определите вход, который textscan следует рассматривать как комментарии или пустые значения и сканировать данные на C.

fileID = fopen(filename);
C = textscan(fileID,'%s %n %n %n %n','Delimiter',',',...
'TreatAsEmpty',{'NA','na'},'CommentStyle','//');
fclose(fileID);

Отобразите выход.

celldisp(C)
 
C{1}{1} =
 
abc
 
 
C{1}{2} =
 
def
 
 
C{2} =
 
     2
   NaN

 
 
C{3} =
 
   NaN
     5

 
 
C{4} =
 
     3
     6

 
 
C{5} =
 
     4
     7

 

Загрузите файл data3.csv и предварительный просмотр его содержимого в текстовом редакторе. Снимок экрана показан ниже. Заметьте, что файл содержит повторные разделители.

filename = 'data3.csv';

Чтобы обработать повторные запятые как один разделитель, используйте MultipleDelimsAsOne Параметру и установите значение 1 (true).

fileID = fopen(filename);
C = textscan(fileID,'%f %f %f %f','Delimiter',',',...
'MultipleDelimsAsOne',1);
fclose(fileID);


celldisp(C)
 
C{1} =
 
     1
     5

 
 
C{2} =
 
     2
     6

 
 
C{3} =
 
     3
     7

 
 
C{4} =
 
     4
     8

 

Загрузите файл данных grades.txt для этого примера и предварительный просмотр его содержимого в текстовом редакторе. Снимок экрана показан ниже. Заметьте, что файл содержит повторные разделители.

filename = 'grades.txt';

Чтение заголовков столбцов в формате '%s' четыре раза.

fileID = fopen(filename);
formatSpec = '%s';
N = 4;
C_text = textscan(fileID,formatSpec,N,'Delimiter','|');

Считайте числовые данные в файле.

C_data0 = textscan(fileID,'%d %f %f %f')
C_data0=1×4 cell array
    {4x1 int32}    {4x1 double}    {4x1 double}    {4x1 double}

Значение по умолчанию для CollectOutput является 0 (false), так textscan возвращает каждый столбец числовых данных в отдельном массиве.

Установите индикатор положения файла в начале файла.

frewind(fileID);

Перечитайте файл и установите значение CollectOutput на 1 (true), чтобы собрать последовательные столбцы того же класса в один массив. Можно использовать repmat функция, чтобы указать, что %f спецификатор преобразования должен появиться три раза. Этот метод полезен, когда формат повторяется много раз.

C_text = textscan(fileID,'%s',N,'Delimiter','|');
C_data1 = textscan(fileID,['%d',repmat('%f',[1,3])],'CollectOutput',1)
C_data1=1×2 cell array
    {4x1 int32}    {4x3 double}

Тестовые счета, которые все являются двойными, собираются в один массив 4 на 3.

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

fclose(fileID);

Считайте первый и последний столбцы данных из текстового файла. Пропустите столбец текста и столбец целочисленных данных.

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

filename = 'names.txt';

Считайте первый и последний столбцы данных в файле. Используйте спецификатор преобразования, %q для чтения текста, заключенного двойными кавычками ("). %*q пропускает цитируемый текст, %*d пропускает целочисленное поле и %f читает число с плавающей запятой. Задайте разделитель запятыми, используя 'Delimiter' аргумент пары "имя-значение".

fileID = fopen(filename,'r');
C = textscan(fileID,'%q %*q %*d %f','Delimiter',',');
fclose(fileID);

Отобразите выход. textscan возвращает массив ячеек C где удаляются двойные кавычки, заключающие текст.

celldisp(C)
 
C{1}{1} =
 
Smith, J.
 
 
C{1}{2} =
 
Bates, G.
 
 
C{1}{3} =
 
Curie, M.
 
 
C{1}{4} =
 
Murray, G.
 
 
C{1}{5} =
 
Brown, K.
 
 
C{2} =
 
   71.1000
   69.3000
   64.1000
  133.0000
   64.9000

 

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

filename = 'german_dates.txt';

Откройте файл. Укажите схему кодирования символов, связанную с файлом, как последний вход в fopen.

fileID = fopen(filename,'r','n','ISO-8859-15');

Прочтите файл. Задайте формат дат в файле используя %{dd % MMMM yyyy}D спецификатор. Определение локали дат с помощью DateLocale аргумент пары "имя-значение".

C = textscan(fileID,'%{dd MMMM yyyy}D %f %f',...
    'DateLocale','de_DE','Delimiter',',');
fclose(fileID);

Просмотр содержимого первой камеры в С. Отображение дат на языке, используемом MATLAB, зависит от локали системы.

C{1}
ans = 3x1 datetime
   01 January 2014 
   01 February 2014
   01 March 2014   

Использование sprintf для преобразования выходных последовательностей nondefault в ваши данные.

Создайте текст, который включает в себя символ ленты формы, \f. Затем, чтобы прочитать текст с помощью textscan, вызов sprintf для явного преобразования канала формы.

lyric = sprintf('Blackbird\fsinging\fin\fthe\fdead\fof\fnight');
C = textscan(lyric,'%s','delimiter',sprintf('\f'));
C{1}
ans = 7x1 cell
    {'Blackbird'}
    {'singing'  }
    {'in'       }
    {'the'      }
    {'dead'     }
    {'of'       }
    {'night'    }

textscan возвращает массив ячеек, C.

Возобновите сканирование из положения, отличного от начала.

Если вы возобновите скан текста, textscan читает с начала каждый раз. Чтобы возобновить скан из любой другой позиции, используйте синтаксис аргумента с двумя выходами в вашем первоначальном вызове, чтобы textscan.

Для примера создайте вектор символов под названием lyric. Прочтите первое слово вектора символов, а затем возобновите скан.

lyric = 'Blackbird singing in the dead of night';
[firstword,pos] = textscan(lyric,'%9c',1);
lastpart = textscan(lyric(pos+1:end),'%s');

Входные параметры

свернуть все

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

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

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

Количество спецификаторов преобразования определяет количество камер в выходном массиве, C.

Numeric Fields

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

Численный входной типСпецификатор преобразованияВыходной класс
Целое число, со знаком%dint32
%d8int8
%d16int16
%d32int32
%d64int64
Целое число, без знака%uuint32
%u8uint8
%u16uint16
%u32uint32
%u64uint64
Число с плавающей запятой%fdouble
%f32single
%f64double
%ndouble
Шестнадцатеричное число, беззнаковое целое число%xuint64
%xu8uint8
%xu16uint16
%xu32uint32
%xu64uint64
Шестнадцатеричное число, целое число со знаком%xs8int8
%xs16int16
%xs32int32
%xs64int64
Двоичное число, беззнаковое целое число%buint64
%bu8uint8
%bu16uint16
%bu32uint32
%bu64uint64
Двоичное число, целое число со знаком%bs8int8
%bs16int16
%bs32int32
%bs64int64

Nonnumeric Fields

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

Нечисловой входной типСпецификатор преобразованияПодробнее
Символ%cЧтение любого отдельного символа, включая разделитель.
Текстовый массив%sСчитайте как массив ячеек из векторов символов.
%q

Считайте как массив ячеек из векторов символов. Если текст начинается с двойной кавычки ("), опустить начальный кавычку и ее сопутствующий закрывающий знак, который является вторым образцом одиночной двойной кавычки. Замените сбежавшие двойные кавычки (для примера, ""abc"") с одинокими двойными кавычками ("abc"). %q игнорирует все двойные кавычки, которые появляются после закрытия двойной кавычки.

Пример: '%q' читает '"Joe ""Lightning"" Smith, Jr."' как 'Joe "Lightning" Smith, Jr.'.

Даты и время%D

Читайте так же, как %q выше, а затем преобразуйте в значение datetime.

% {fmt} D

Читайте так же, как %q выше, а затем преобразуйте его в значение datetime. fmt описывает формат входного текста. The fmt Вход является вектором символов буквы идентификаторов, которая является допустимым значением для Format свойство datetime. textscan преобразует текст, который не соответствует этому формату, в NaT значения.

Для получения дополнительной информации о форматах отображения datetime смотрите Format свойство для массивов datetime.

Пример: '%{dd-MMM-yyyy}D' задает формат даты, например '01-Jan-2014' .

Длительность%T

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

% {fmt} Т

Читайте так же, как %q выше, а затем преобразуйте его в значение длительности. fmt описывает формат входного текста. The fmt Вход является вектором символов буквы идентификаторов, которая является допустимым значением для Format свойство длительности. textscan преобразует текст, который не соответствует этому формату, в NaN значения.

Для получения дополнительной информации о форматах отображения длительности смотрите format свойство для массивов длительности.

Пример: '%{hh:mm:ss}T' задает формат длительности, такой как '10:30:15', который представляет 10 часа, 30 минуты и 15 секунды.

Категория%C

Читайте так же, как %q, а затем преобразуйте в имя категории в категориальном массиве. textscan преобразует <undefined> текст к неопределенному значению в выход категориальном массиве.

Соответствие шаблона%[...]

Считайте как массив ячеек из векторов символов, символы в скобках до первого несоответствующего символа. Включение ] в наборе задайте его первым: %[]...].

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

%[^...]

Исключить символы в скобках, считывая до первого совпадающего символа. Чтобы исключить ], укажите его сначала: %[^]...].

Пример: %[^xrg] читает 'summer ' как 'summe'.

Optional Operators

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

Опциональные операторы включают:

  • Поля и символы, которые нужно игнорировать

    textscan считывает все символы в файле последовательно, если только вы не говорите ему игнорировать конкретное поле или фрагмент поля.

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

    Оператор

    Принятые меры

    % * k

    Пропустите поле. k - любой спецификатор преобразования, идентифицирующий поле, которое пропускается. textscan не создает выхода камеры для таких полей.

    Пример: '%s %*s %s %s %*s %*s %s' (пространства необязательны) преобразует текст
    'Blackbird singing in the dead of night' в четыре выходные камеры с
    'Blackbird' 'in' 'the' 'night'

    '% * ns'

    Пропустите до n символы, где n - целое число, меньше или равное количеству символов в поле.

    Пример: '%*3s %s' преобразует 'abcdefg' на 'defg'. Когда разделитель является запятыми, тот же разделитель преобразует 'abcde,fghijkl' в массив ячеек, содержащий 'de';'ijkl'.

    '% * nc'

    Пропустите n символов, включая разделитель символов.

  • Ширина поля

    textscan считывает количество символов или цифр, заданное шириной или точностью поля, или вплоть до первого разделителя, в зависимости от того, что наступит раньше. Десятичная точка, знак (+ или -), экспонентный символ и цифры в числовом выражении считаются символами и цифрами в пределах ширины поля. Для комплексных чисел ширина поля относится к отдельным ширинам вещественной части и мнимой части. Для мнимой части ширина поля включает + или −, но не i или j. Задайте ширину поля путем вставки числа после процентного символа (%) в спецификатор преобразования.

    Пример: %5f читает '123.456' как 123.4.

    Пример: %5c читает 'abcdefg' как 'abcde'.

    Когда оператор ширины поля используется с одинарными символами (%c), textscan также считывает символы разделителя, пробел и конца строки.
    Пример: %7c считывает 7 символов, включая пробел, так 'Day and night' читается следующим 'Day and'.

  • Точность

    Для чисел с плавающей запятой (%n, %f, %f32, %f64), можно задать количество считываемых десятичных цифр.

    Пример: %7.2f читает '123.456' как 123.45.

  • Буквенный текст, который нужно игнорировать

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

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

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

Типы данных: char | string

Количество раз применять formatSpec, заданный как положительное целое число.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Введите текст для чтения.

Типы данных: char | string

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: C = textscan(fileID,formatSpec,'HeaderLines',3,'Delimiter',',') пропускает первые три линии данных, а затем читает оставшиеся данные, обрабатывая запятые как разделитель.

Имена не зависят от регистра.

Логический индикатор, определяющий конкатенацию данных, задается как разделенная разделенными запятой парами, состоящая из 'CollectOutput' и любой из них true или false. Если trueзатем функция импорта конкатенирует последовательные выходные камеры того же основного MATLAB® класс в один массив.

Символы, обозначающие текст, который нужно игнорировать, заданные как разделенная разделенными запятой парами, состоящая из 'CommentStyle' и вектор символов, массив ячеек из векторов символов, строковых или строковых массивов.

Для примера задайте такой символ, как '%' чтобы игнорировать текст, следующий за символом в той же линии. Задайте массив ячеек из двух векторов символов, таких как {'/*','*/'}, чтобы игнорировать любой текст между этими последовательностями.

MATLAB проверяет комментарии только в начале каждого поля, а не в пределах поля.

Пример: 'CommentStyle',{'/*','*/'}

Типы данных: char | string

Локаль для дат чтения, заданная как разделенная разделенными запятой парами, состоящая из 'DateLocale' и вектор символов в форме xx_ YY, где xx является строчным двухбуквенным кодом ISO 639-1, который задает язык и YY является заглавным кодом ISO 3166-1 альфа-2, который задает страну. Список общих значений для локали см. в Locale аргумент пары "имя-значение" для datetime функция.

Использование DateLocale для определения локали, в которой textscan следует интерпретировать имена месяцев и дней недели и сокращения при чтении текста как даты, использующие %D спецификатор формата.

Пример: 'DateLocale','ja_JP'

Символы разделителя полей, заданные как разделенная разделенными запятой парами, состоящая из 'Delimiter' и вектор символов или массив ячеек векторов символов. Задайте несколько разделителей в массиве ячеек из векторов символов.

Пример: 'Delimiter',{';','*'}

textscan интерпретирует повторяющиеся символы разделителя как отдельные разделители и возвращает пустое значение в выходную камеру.

В каждой строке данных разделителем поля по умолчанию является пустое пространство. Белое пространство может быть любой комбинацией пространства (' '), backspace ('\b'), или вкладка ('\t'Персонажи. Если вы не задаете разделитель, то:

  • символы разделителя совпадают с символами пробел. Символы пробела по умолчанию ' ', '\b', и '\t'. Используйте 'Whitespace' аргумент пары "имя-значение" для задания альтернативных символов пробел.

  • textscan интерпретирует многократные символы пробела как один разделитель.

Когда вы задаете одну из следующих escape-последовательностей в качестве разделителя, textscan преобразует эту последовательность в соответствующий управляющий символ:

\bКлавиша Backspace
\nNewline
\rВозврат каретки
\tВкладка
\\Обратная косая черта (\)

Типы данных: char | string

Возвращенное значение для пустых числовых полей в текстовых файлах с разделителями, заданное как разделенная разделенными запятой парами, состоящая из 'EmptyValue' и скаляром.

Символы в конце строки, заданные как разделенная разделенными запятой парами, состоящая из 'LineEnding' и вектор символов или строка. Вектор символов должен быть '\r\n' или должен указывать один символ. Общие символы в конце строки являются символом новой строки ('\n') или возврат каретки ('\r'). Если вы задаете '\r\n', затем функция импорта обрабатывает любое из \r, \n, и комбинация двух (\r\n) в виде символов в конце строки.

Последовательность по умолчанию для конца линии \n, \r, или \r\n, в зависимости от содержимого файла.

Если в конце последней линии файла отсутствуют значения и последовательность в конце строки, функция импорта возвращает пустые значения для этих полей. Это гарантирует, что отдельные камеры в выходном массиве ячеек, C, имеют одинаковый размер.

Пример: 'LineEnding',':'

Типы данных: char | string

Символы экспоненты, заданные как разделенная разделенными запятой парами, состоящая из 'ExpChars' и вектор символов или строка. Символы экспоненты по умолчанию e, E, d, и D.

Типы данных: char | string

Количество линий заголовка, заданное как разделенная разделенными запятой парами, состоящая из 'HeaderLines' и положительное целое число. textscan пропускает линии заголовка, включая оставшуюся часть текущей линии.

Множественная обработка разделителя, заданная как разделенная разделенными запятой парами, состоящая из 'MultipleDelimsAsOne' и любой из них true или false. Если trueзатем функция импорта обрабатывает последовательные разделители как один разделитель. Повторные разделители, разделенные пустым пространством, также рассматриваются как один разделитель. Вы также должны задать Delimiter опция.

Пример: 'MultipleDelimsAsOne',1

Поведение при textscan не может считываться или преобразовываться, задается как разделенная разделенными запятой парами, состоящая из 'ReturnOnError' и любой из них true или false. Если true, textscan завершается без ошибки и возвращает все считанные поля. Если false, textscan завершается ошибкой и не возвращает выходной массив ячеек.

Текст-заполнитель для обработки как пустого значения, заданный как разделенная разделенными запятой парами, состоящая из 'TreatAsEmpty' и вектор символов, массив ячеек из векторов символов, строковых или строковых массивов. Эта опция применяется только к числовым полям.

Типы данных: char | string

Символы белого пространства, заданные как разделенная разделенными запятой парами, состоящая из 'Whitespace' и вектор символов или строка, содержащая один или несколько символов. textscan добавляет пробел символа, char(32), ко всем указанным Whitespace, если только Whitespace пуст ('') и formatSpec включает любой спецификатор преобразования.

Когда вы задаете одну из следующих escape-последовательностей как любой символ белого пространства, textscan преобразует эту последовательность в соответствующий управляющий символ:

\bКлавиша Backspace
\nNewline
\rВозврат каретки
\tВкладка
\\Обратная косая черта (\)

Типы данных: char | string

Выход данных текста, заданный как разделенная разделенными запятой парами, состоящая из 'TextType' и любой из них 'char' или 'string'. Если вы задаете значение 'char', затем textscan возвращает текст как массив ячеек из векторов символов. Если вы задаете значение 'string', затем textscan возвращает текст как массив типа string.

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

свернуть все

Файловые или текстовые данные, возвращенные как массив ячеек.

Для каждого спецификатора числового преобразования в formatSpec, а textscan функция возвращает K-by-1 Числовой вектор MATLAB в массив выходных ячеек, C, где K количество раз, которое textscan находит поле, соответствующее спецификатору.

Для каждого спецификатора преобразования текста (%s, %q, или %[...]) в formatSpec, а textscan функция возвращает K-by-1 массив ячеек из векторов символов, где K количество раз, которое textscan находит поле, соответствующее спецификатору. Для каждого преобразования символов, которое включает оператор ширины поля, textscan возвращает K-by- M символьный массив, где M - ширина поля.

Для каждого спецификатора datetime или категориального преобразования в formatSpec, а textscan функция возвращает K-by-1 datetime или категориальный вектор в массив выходных ячеек, C, где K количество раз, которое textscan находит поле, соответствующее спецификатору.

Положение в конце скана, в файле или векторе символов, возвращаемое как целое число класса double. Для файла, ftell(fileID) вернёт то же значение после вызова textscan. Для вектора символов, position указывает, сколько символов textscan читать.

Алгоритмы

textscan преобразует числовые поля в указанный выходной тип в соответствии с правилами MATLAB, касающимися переполнения, усечения и использования NaN, Inf, и -Inf. Для примера MATLAB представляет целое число NaN как нуль. Если textscan находит пустое поле, сопоставленное со спецификатором целочисленного формата (например %d или %u), оно возвращает пустое значение как нуль, а не NaN.

При сопоставлении данных со спецификатором преобразования текста textscan читается до тех пор, пока не найдет разделитель или символ в конце строки. При сопоставлении данных со спецификатором числового преобразования textscan читается до тех пор, пока не найдет нечисловой символ. Когда textscan не может больше соответствовать данным к конкретному спецификатору преобразования, он пытается соответствовать данным к следующему спецификатору преобразования в formatSpec. Знак (+ или -), символы экспоненты и десятичные точки считаются числовыми символами.

ЗнакЦифрыДесятичная точкаЦифрыЭкспонентный символЗнакЦифры
Считайте один символ знака, если он существует.Считайте одну или несколько цифр.Считайте одну десятичную точку, если она существует.Если существует десятичная точка, прочитайте одну или несколько цифр, которые немедленно следуют за ней.Считайте один символ экспоненты, если он существует.Если существует символ экспоненты, прочтите один символ знака.Если существует символ экспоненты, прочитайте одну или несколько цифр, которые следуют за ним.

textscan импортирует любое комплексное число в целом в комплексное числовое поле, преобразуя действительную и мнимую части в заданный числовой тип (например %d или %f). Допустимые формы для комплексного числа:

± <reservedrangesplaceholder0>± <reservedrangesplaceholder0>

Пример: 5.7-3.1i

± <reservedrangesplaceholder0>

Пример: -7j

Не включать встроенное пустое пространство в комплексное число. textscan интерпретирует встроенное пустое пространство как разделитель полей.

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