阅读文本文件,matlab

问题描述:

我正在阅读matlab文本文件'mytext.text'。数据文件看起来像:阅读文本文件,matlab

1 -4436.6910 415.1843 -3019.7497 1,3,4,5,21,23 

2 -4366.4541 1353.9975 -3085.1166 1,3,4,23 

....

我不知道COL5的长度。我如何在matlab中读取它?

fid=fopen('mytext.text','r'); 

Grdata = textscan(fid, '%d %f %f %f (Col 5 what should be)% This line is 
problem% 

fclose(fid); 

任何帮助。

+0

是逗号的文件格式的一个组成部分?如果逗号可以替换为空格(如前3个数字),那么您可以使用'dlmread'。读取的结果数据将具有可以告诉您哪些列丢失的维度等等。您正在寻找什么? – Sriram

一种可能性是将最后一列读为字符串,然后将其转换为数字。

fid = fopen('file.dat','r'); 
C = textscan(fid, '%f %f %f %f %s', ... 
    'Delimiter',' ', 'MultipleDelimsAsOne',true, 'CollectOutput',true); 
fclose(fid); 

C = [num2cell(C{1}) cellfun(@str2num, C{2}, 'UniformOutput',false)] 

将得到的细胞阵列:

C = 
    [1] [-4436.7] [415.18] [-3019.7] [1x6 double] 
    [2] [-4366.5] [ 1354] [-3085.1] [1x4 double] 

与:

>> C{1,end} 
ans = 
    1  3  4  5 21 23 
>> C{2,end} 
ans = 
    1  3  4 23 

要读取一行做

% Read at most 4 elements 
data1234 = fscanf (fid, '%d %f %f %f', 4); 
% Read as many elements as possible, stop when no ',' is found 
data5 = fscanf (fid, '%d,'); 

继续阅读行,直到你到达文件的末尾(在这之前,从节约每一行数据)。所以你需要一些循环,直到文件结束。