Чтение текстовых значений в переменные matlab из файлов ASCII

рассмотрим следующий файл

var1 var2 variable3
1     2    3
11    22   33

Я хотел бы загрузить числа в матрицу, а заголовки столбцов в переменную, которая будет эквивалентна:

variable_names = char('var1', 'var2', 'variable3');

Я не против разделить имена и числа в двух файлах, однако подготовка файлов кода matlab и их оценка не являются опцией.

обратите внимание, что может быть произвольное количество переменных (столбцов)

3 ответов


предлагаю данныхимпорта для действий такой:

d = importdata('filename.txt');

возврат-это структура с числовыми полями в члене под названием "данные" и заголовками столбцов в поле под названием "colheaders".

еще один полезный интерфейс для импорта таких данных-класс "dataset", доступный в панели инструментов статистика.


Если заголовок находится в первой строке, то

A = dlmread(filename,delimString,2,1);

будет считывать числовые данные в матрицу A.

затем вы можете использовать

fid = fopen(filename)
headerString = fscanf(fid,'%s/n') % reads header data into a string
fclose(fid)

затем вы можете использовать функции strtok разделить headerString в ячейку массива. Один из подходов, который я могу придумать, имеет дело с неизвестным количеством столбцов

Редактировать

исправлен вызов функции fscanf


просто используйте textscan с разными спецификаторами формата.

fid = fopen(filename,'r');
heading = textscan(fid,'%s %s %s',1);
fgetl(fid); %advance the file pointer one line
data = textscan(fid,'%n %n %n');%read the rest of the data
fclose(fid);

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