exponenta event banner

textscan

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

Описание

пример

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

textscan пытается сопоставить данные в файле со спецификатором преобразования в formatSpec. 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. 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' спецификатор. 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' спецификатор. 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. 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);

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

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

Использовать sprintf для преобразования не используемых по умолчанию escape-последовательностей в данные.

Создание текста, содержащего символ канала формы. \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.

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

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

Тип числового вводаСпецификатор преобразованияКласс вывода
Целое число, с подписью%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

Нечисловые поля

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

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

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

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

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

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

%{fmt}D

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

Дополнительные сведения о форматах отображения datetime см. в разделе Format для массивов datetime.

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

Продолжительность%T

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

%{fmt}T

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

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

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

Категория%C

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

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

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

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

%[^...]

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

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

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

Спецификаторы преобразования в 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 alpha-2, определяющим страну. Список общих значений для языкового стандарта см. в разделе Locale аргумент пары имя-значение для datetime функция.

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

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

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

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

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

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

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

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

Если в качестве разделителя указана одна из следующих переходных последовательностей, 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 включает любой спецификатор преобразования.

Если в качестве любого символа пробела указана одна из следующих переходных последовательностей, 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около-M символьный массив, где M - ширина поля.

Для каждого спецификатора преобразования даты и времени или категории в 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). Допустимыми формами для комплексного номера являются:

±<real>±<imag>i|j

Пример: 5.7-3.1i

±<imag>i|j

Пример: -7j

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

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