Чтение текстовых значений в переменные Matlab из файлов ASCII
-
06-07-2019 - |
Вопрос
Рассмотрим следующий файл
var1 var2 variable3
1 2 3
11 22 33
Я хотел бы загрузить числа в матрицу, а заголовки столбцов в переменную, которая будет эквивалентна:
variable_names = char('var1', 'var2', 'variable3');
Я не против разделить имена и числа на два файла, однако подготовка файлов кода Matlab и их оценка не являются вариантом.
Обратите внимание, что может быть произвольное количество переменных (столбцов)
Решение
Я предлагаю импорт данных для таких операций:
d = importdata('filename.txt');
Возвращаемый результат представляет собой структуру с числовыми полями в элементе, называемом «данные», и заголовками столбцов в поле, называемом «colheaders».
Еще один полезный интерфейс для импорта подобных данных — это класс «набор данных», доступный в панели инструментов статистики.
Другие советы
Если заголовок находится в первой строке, то
A = dlmread(filename,delimString,2,1);
считывает числовые данные в матрицу А.
Затем вы можете использовать
fid = fopen(filename)
headerString = fscanf(fid,'%s/n') % reads header data into a string
fclose(fid)
Затем вы можете использовать strtok , чтобы разделить headerString в массив ячеек. Один из подходов, который я могу придумать, связан с неизвестным количеством столбцов
редактироватьисправлен вызов функции fscanf
Просто используйте текстовое сканирование с другими спецификаторами формата.
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);
В этом случае «заголовок» будет массивом ячеек, содержащим ячейки с заголовком каждого столбца внутри, поэтому вам придется изменить их на массив строк или что-то еще, что вы хотите. 'data' будет массивом ячеек, содержащим числовой массив для каждого столбца, который вы прочитали, поэтому вам придется объединить их в одну матрицу.