2011-09-23 182 views
1

我正在閱讀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

回答

1

一種可能性是將最後一列讀爲字符串,然後將其轉換爲數字。

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 
0

要讀取一行做

% 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,'); 

繼續閱讀行,直到你到達文件的末尾(在這之前,從節約每一行數據)。所以你需要一些循環,直到文件結束。