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

StackOverflow https://stackoverflow.com/questions/259968

Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top