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

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

var1 var2 variable3
1     2    3
11    22   33

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

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

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

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


person Boris Gorelik    schedule 03.11.2008    source источник


Ответы (3)


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

d = importdata('filename.txt');

Возврат представляет собой структуру с числовыми полями в члене, называемом «данные», и заголовками столбцов в поле, называемом «colheaders».

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

person Adam Holmberg    schedule 05.11.2008

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

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

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

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

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

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

Edit

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

person Azim J    schedule 03.11.2008

Просто используйте 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);

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

person Robert Van Hoose    schedule 03.11.2008
comment
Может быть произвольное количество переменных (столбцов) - person Boris Gorelik; 04.11.2008
comment
Если вы заранее не знаете количество столбцов, вам придется читать файл по одной строке за раз. Если вы вызовете textscan с одним %s и без ограничения числа, он прочитает N строк из строки. Я думаю, что это лучше/быстрее, чем использование strtok. - person Robert Van Hoose; 04.11.2008