考虑以下文件
var1 var2 variable3
1 2 3
11 22 33
我想将数字加载到矩阵中,并将列标题转换为相当于的变量:
variable_names = char('var1', 'var2', 'variable3');
我不介意将名称和数字分成两个文件,但是准备matlab代码文件并评估它们不是一种选择。
请注意,可以有任意数量的变量(列)
答案 0 :(得分:9)
我建议 importdata 执行以下操作:
d = importdata('filename.txt');
返回是一个结构,其中的数字字段位于名为“data”的成员中,而字段中的列标题称为“colheaders”。
另一个用于导入这类操作数据的有用界面是统计工具箱中提供的“数据集”类。
答案 1 :(得分:3)
如果标题位于第一行,则
A = dlmread(filename,delimString,2,1);
将数字数据读入Matrix A。
然后您可以使用
fid = fopen(filename)
headerString = fscanf(fid,'%s/n') % reads header data into a string
fclose(fid)
然后,您可以使用 strtok 将headerString拆分为单元格数组。我能想到的一种方法是处理未知数量的列
编辑修复了fscanf函数调用
答案 2 :(得分:1)
只需使用具有不同格式说明符的文本扫描。
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);
在这种情况下,'heading'将是一个包含单元格的单元格数组,每个列都在其中,因此您必须将它们更改为字符串的单元格数组或其他任何内容。 'data'将是一个包含您读取的每列的数字数组的单元格数组,因此您必须将它们组合在一起才能生成一个矩阵。