2008-11-03 90 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'); 

回报是一个结构中名为'data'的成员中的数字字段以及名为'colheaders'的字段中的列标题。

用于导入操纵数据的另一个有用的界面是Statistics Toolbox中的'dataset'类。

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); 

将读取数值数据到矩阵A

然后可以使用

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

然后可以使用strtok将headerString分割成单元格数组。是一种方法,我能想到的交易与未知数量的列

编辑

固定fscanf函数调用