Matlab прочитать текстовый файл

Обновлено: 06.07.2024

Недавняя работа требует обработки большого количества данных результатов восприятия и сохранения их в текстовом файле с определенным типом структуры. Необходимо использовать MatLab для отображения результатов перцептивных данных, сравнения и анализа с Ground Truth

Функции чтения и записи текстовых файлов Matlab можно разделить на две категории: одна - это функции высокого уровня, а другая - функции низкого уровня. Обычно считается, что функции высокого уровня просты в использовании, но имеют плохую настройку. Использование базовой функции сложно, но гибкость высока. Поскольку MATLAB предоставляет множество функций, которые могут читать текстовые файлы, такие как load, importdata, textread, dlmread, csvread, выяснить область применения этих функций непросто. Использование функций fscanf и textcan, так что он легко справится с чтением общих текстовых файлов. Далее кратко описывается использование нескольких расширенных функций, основное внимание уделяется использованию двух низкоуровневых функций fscanf и textcan.

1. load/importdata/csvread

Для чтения простых текстовых файлов (содержимое файла содержит только числовые значения, а в качестве разделителя используется запятая или пробел), общее использование этих трех функций в основном одинаково.
Распространенное использование load, importdata, csvread:

filename - это файл, который вам нужно прочитать.

Например, создайте файл test.txt, содержащий следующие данные:
16,2,3,13
5,11,10,8
9,7,6,12
4,14,15,1
Прочитать весь файл:

2. dlmread

Использование dlmread немного сложнее, чем csvread, он может указывать разделитель (csvread может читать только разделитель запятых и разделитель пробелов).
Распространенное использование dlmread:

Где filename - это читаемый файл, а delimiter - разделитель.

Пример: для текстовых файлов со следующим содержанием:
16。2。3。13
5。11。10。8
9。7。6。12
4。14。15。1
, который вы можете указать 。 ’Прочтите разделитель:

Если количество строк и столбцов не совпадает, dlmread автоматически заполнит пустые данные 0.

Пример: для текстовых файлов со следующим содержанием:
40 5 30 1.6 0.2 1.2
15 25 35 0.6 1 1.4
20 45 10 0.8 1.8 0.4

2.6667 0.33333 2
1 1.6667 2.3333
1.3333 3 0.66667

3. fscanf

Чтение данных из текстового файла в указанном формате. Использование:

Текстовый файл для чтения идентифицируется идентификатором файла fileID, и fileID файла может быть получен через функцию fopen. Когда вы закончите чтение, вы должны не забыть использовать функцию fclose, чтобы закрыть файл.
Использование легких функций может быть трудным для понимания, и следующий пример будет проще для понимания. Пример: текстовый файл test.txt содержит следующие данные:
16。2。3。13
5。11。10。8
9。7。6。12
4。14。15。1

fscanf

Далее подробно объясняется принцип чтения fscanf:
При открытии файла с помощью fopen в начале файла будет указатель файла. fscanf считывает данные через заданную вами строку формата formatSpec (formatSpec состоит из строки и escape-спецификатора, где escape-спецификатор начинается с% и заканчивается буквой преобразования.% d в приведенном выше примере - escape Спецификатор представляет целое число, и обычно используются% f и% s, которые соответственно представляют числа и строки с плавающей запятой). Первый символьный блок formatSpec является escape-спецификатором% d, затем fscanf сначала считывает первое целое число 16 в A, затем указатель файла переходит вправо от 16, а второй символьный блок formatSpec представляет собой строку ’. «Поскольку это не спецификатор escape, указатель файла будет пропущен». «Прибытие». «Справа. После escape-спецификатора% d прочитайте 2 в A и так далее.
Используйте следующую картинку для иллюстрации:

Если код чтения этого примера записан как:

Причина в том, что когда указатель файла читает 13, строка формата, которой нужно соответствовать formatSpec, 。 ’, Но следующая строка из 13 - 5, совпадение не удается и fscanf перестает читать.
Давайте рассмотрим более сложный текстовый файл в качестве примера:
Пример. Текстовый файл test.txt содержит следующие данные:
lambda: 7.580000e-05
lambdaB: 8.000000e-05
initial pulse width: 7.853636e-13
output pulse width: 6.253030e-13
dispersion length: 6.307732e-02
nonlinear length: 9.572495e-01

lambda: 7.590000e-05
lambdaB: 8.000000e-05
initial pulse width: 7.848788e-13
output pulse width: 5.778485e-13
dispersion length: 5.852858e-02
nonlinear length: 9.195277e-01

Теперь я хочу извлечь всю цифровую информацию:

4. textscan

Использование текстового сканирования аналогично fscanf. Рекомендуется уточнить использование fscanf перед просмотром текстового сканирования.

Общее использование текстов может:

Как и fscanf, fileID - это идентификатор файла, а formatSpec - строка формата. N - количество повторений форматного формата.
В отличие от fscanf, тексты могут использовать ячейку для хранения всех данных, соответствующих экранирующему спецификатору formatSpec. И текстовое сканирование имеет много опций, таких как «Заголовки», вы можете указать, чтобы пропустить первые n строк файла, «Разделитель», можно указать разделитель и т. Д.

A = fscanf( fileID , formatSpec ) reads data from an open text file into column vector A and interprets values in the file according to the format specified by formatSpec . The fscanf function reapplies the format throughout the entire file and positions the file pointer at the end-of-file marker. If fscanf cannot match formatSpec to the data, it reads only the portion that matches and stops processing.

The text file is indicated by the file identifier, fileID . Use fopen to open the file, specify the character encoding, and obtain the fileID value. When you finish reading, close the file by calling fclose(fileID) .

A = fscanf( fileID , formatSpec , sizeA ) reads file data into an array, A , with dimensions, sizeA , and positions the file pointer after the last value read. fscanf populates A in column order. sizeA must be a positive integer or have the form [m n] , where m and n are positive integers.

[ A , count ] = fscanf( ___ ) additionally returns the number of fields that fscanf reads into A . For numeric data, this is the number of values read. You can use this syntax with any of the input arguments of the previous syntaxes.

Examples

Read File Contents into Column Vector

Create a sample text file that contains floating-point numbers.

View the contents of the file.

Open the file for reading, and obtain the file identifier, fileID .

Define the format of the data to read. Use '%f' to specify floating-point numbers.

Read the file data, filling output array, A , in column order. fscanf reapplies the format, formatSpec , throughout the file.

A is a column vector containing data from the file.

Read File Contents into Array

Create a sample text file that contains integers and floating-point numbers.

View the contents of the file.

Open the file for reading, and obtain the file identifier, fileID .

Define the format of the data to read and the shape of the output array.

Read the file data, filling output array, A , in column order. fscanf reuses the format, formatSpec , throughout the file.

Transpose the array so that A matches the orientation of the data in the file.

Skip Specific Characters in File

Skip specific characters in a sample file, and return only numeric data.

Create a sample text file containing temperature values.

Read the numbers in the file, skipping the text, °C. Also return the number of values that fscanf reads. The extended ASCII code 176 represents the degree sign.

A is a vector containing the numeric values in the file. count indicates that fscanf read five values.

Input Arguments

File identifier of an open text file, specified as an integer. Before reading a file with fscanf , you must use fopen to open the file and obtain the fileID .

Data Types: double

Format of the data fields in the file, specified as a character vector or string scalar of one or more conversion specifiers. When fscanf reads a file, it attempts to match the data to the format specified by formatSpec .

Numeric Fields

This table lists available conversion specifiers for numeric inputs. fscanf converts values to their decimal (base 10) representation.

The values in the file determine the base:

The default is base 10.

If the initial digits are 0x or 0X , then the values are hexadecimal (base 16).

If the initial digit is 0 , then values are octal (base 8).

64-bit values, base 10, 8, or 16

Base 16 (hexadecimal)

64-bit values, base 10, 8, or 16

Floating-point fields can contain any of the following (not case sensitive): Inf , -Inf , NaN , or -NaN .

Character Fields

This table lists available conversion specifiers for character inputs.

Character vector or string scalar

Read all characters excluding white spaces.

Read any single character, including white space.
To read multiple characters at a time, specify field width.

Read only characters in the brackets up to the first nonmatching character or white space.

Example: %[mus] reads 'summer ' as 'summ' .

If formatSpec contains a combination of numeric and character specifiers, then fscanf converts each character to its numeric equivalent. This conversion occurs even when the format explicitly skips all numeric values (for example, formatSpec is '%*d %s' ).

Optional Operators

Fields and Characters to Ignore

fscanf reads all numeric values and characters in your file in sequence, unless you tell it to ignore a particular field or a portion of a field. To skip fields, insert an asterisk ( * ) after the percent sign ( % ). For example, to skip integers, specify %*d .

To specify the maximum number of digits or text characters to read at a time, insert a number after the percent character. For example, %10c reads up to 10 characters at a time, including white space. %4f reads up to 4 digits at a time, including the decimal point.

Literal Text to Ignore

fscanf ignores specified text appended to the formatSpec conversion specifier.

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 . Для числовых данных это - количество чтения значений. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.

Примеры

Чтение содержимого файла в вектор - столбец

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

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

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

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

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

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

Чтение содержимого файла в массив

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

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

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

Задайте формат данных, чтобы читать и форма выходного массива.

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

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

Пропуск определенных символов в файле

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

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

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

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

fileID — Идентификатор файла
целое число

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

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

formatSpec — Формат полей данных
вектор символов | строковый скаляр

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

Numeric Fields

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

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

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

Значение по умолчанию основное 10.

Если начальными цифрами является 0x или 0X , затем значения являются шестнадцатеричными (базируйтесь 16).

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

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

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

Базируйтесь 8 (восьмеричный)

Базируйтесь 16 (шестнадцатеричный)

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

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

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

Character Fields

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

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

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

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

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

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

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

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

Optional Operators

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

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

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

Буквенный текст, чтобы проигнорировать

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

Считайте и напишите числовые и нечисловые данные в файлах разграниченного и форматированного текста, включая .csv и .txt файлы. Импортируйте данные о текстовом файле в интерактивном режиме с помощью Import Tool. Импортируйте или экспортируйте текстовые данные программно с помощью функций на этой странице.

Функции

Импортирование данных в интерактивном режиме

Чтение и запись таблиц или Timetables

Базовый импорт и экспорт

readtable Составьте таблицу из файла
writetable Запись таблицы в файл
readtimetable Создание объекта Timetable из файла
writetimetable Запись timetable в файл

Определение правил импорта

detectImportOptions Создайте настройки импорта на основе содержимого файла
delimitedTextImportOptions Настройки импорта возражают для разделенного текста
fixedWidthImportOptions Настройки импорта возражают для текстовых файлов фиксированной ширины
xmlImportOptions Настройки импорта возражают для XML-файлов
htmlImportOptions Настройки импорта возражают для файлов HTML
wordDocumentImportOptions Настройки импорта возражают для файлов документов Microsoft Word
getvaropts Получите переменные настройки импорта
setvaropts Установите переменные настройки импорта
setvartype Установите типы данных переменных
preview Предварительный просмотр восьми строк из файла с помощью параметров импорта

Чтение и запись матриц и массивов

readmatrix Считайте матрицу из файла
writematrix Запишите матрицу в файл
readcell Считайте массив ячеек из файла
writecell Запишите массив ячеек в файл
readvars Считайте переменные из файла
textscan Считайте отформатированные данные из текстового файла или строки
type Отобразите содержимое файла
fileread Считайте содержимое файла как текст
readlines Прочитайте строки файла как массив строк

Объекты

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

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

Лучший способ представлять табличные данные из текстовых файлов в MATLAB находится в таблице, поскольку таблицы могут сохранить неоднородный (соединение числовых и текста) данные, а также имена строки и переменная.

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

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

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

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

Импортируйте форматированные даты и время (такие как '01/01/01' или '12:30:45' ) из табличных данных, ориентированных на столбцы.

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

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

Запишите табличные данные в текстовые файлы

Экспортируйте табличные данные, содержавшиеся в таблицах, массивах ячеек или числовых массивах от рабочего пространства MATLAB до текстовых файлов.

Читайте также: