Чтение текстовых значений в переменные matlab из файлов ASCII - PullRequest
7 голосов
/ 04 ноября 2008

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

var1 var2 variable3
1     2    3
11    22   33

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 05 ноября 2008

Я предлагаю importdata для таких операций:

d = importdata('filename.txt');

Возвращаемое значение - это структура с числовыми полями в элементе с именем «data» и заголовками столбцов в поле с именем «colheaders».

Другим полезным интерфейсом для импорта подобных данных является класс «набор данных», доступный в наборе инструментов статистики.

3 голосов
/ 04 ноября 2008

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

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

1 голос
/ 04 ноября 2008

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

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

...