2008-11-03 2 views
7

Рассмотрим следующий файлЧтение текстовых значений в MatLab переменных из ASCII файлов

var1 var2 variable3 
1  2 3 
11 22 33 

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

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

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

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

ответ

9

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

d = importdata('filename.txt'); 

Возвращение является struct с числовыми полями в члене, называемом 'data', и заголовками столбцов в поле под названием 'colheaders'.

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

1

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

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

+0

Может быть произвольное количество переменных (столбцов) – 2008-11-03 21:35:38

3

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

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

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

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

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

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

Edit

фиксированной fscanf вызов функции

Смежные вопросы