7

考虑以下文件

var1 var2 variable3
1     2    3
11    22   33

我想将数字加载到矩阵中,并将列标题加载到一个变量中,该变量相当于:

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

我不介意将名称和数字拆分为两个文件,但是准备 matlab 代码文件并对其进行评估不是一种选择。

请注意,可以有任意数量的变量(列)

4

3 回答 3

9

我建议对这样的操作使用importdata

d = importdata('filename.txt');

返回是一个结构体,其数字字段位于名为“data”的成员中,列标题位于名为“colheaders”的字段中。

另一个用于导入此类操作数据的有用界面是统计工具箱中可用的“数据集”类。

于 2008-11-05T00:01:43.247 回答
3

如果标题在第一行,那么

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

将数值数据读入矩阵 A。

然后你可以使用

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

然后,您可以使用strtok将 headerString 拆分为一个元胞数组。我能想到的一种方法是处理未知数量的列

编辑

修复 fscanf 函数调用

于 2008-11-03T21:48:40.393 回答
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' 将是一个元胞数组,其中包含您读取的每一列的数值数组,因此您必须将它们组合在一起以构成一个矩阵。

于 2008-11-03T21:25:19.647 回答