Чтение текстовых значений в переменные 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);
в этом случае "заголовок" будет массивом ячеек, содержащим ячейки с каждым заголовком столбца внутри, поэтому вам придется изменить их в массив ячеек строк или что бы вы ни хотели. "данные" - это массив ячеек, содержащий числовой массив для каждого столбца, который Вы читаете, поэтому вам придется объединить их вместе, чтобы создать одну матрицу.