2011-08-24 23 views
0

我想讀形式的文本文件:textscan奇怪的行爲

gatcgtacgtcgatgc 
gtcgtacgatcgcatg 
cagctgactgatcgatcg 

。所以每行都是一個字符串,分隔符是\n. 假設這個文件被稱爲'data.txt'。 我想

fid = fopen('data.txt') 
C = textscan(fid, '%s', 'delimiter', '\n') 
fclose('data.txt') 

能給我3X1細胞與C{1} = 'gatcg....' , C{2} = 'gtcgt....' and C{3} = 'cagctg....'

事實並非如此。它告訴我C = {3x1 cell}。但是,我得到以下行爲:

C{1} 

ans = 

    'gatc...' 

    'gtcg...' 

    'cagc...' 

C{2} 
??? Index exceeds matrix dimensions 

C{3} 
??? Index exceeds matrix dimensions. 

這是怎麼回事? o_O

+0

順便說一下,FCLOSE的調用應該是:'fclose(fid)' – Amro

回答

0

TEXTSCAN的輸出是一個單元陣列,其本身包含各種數據輸入的陣列。在你的情況下,所有的數據被塞進一個單元格數組中。要訪問的每個條目做到這一點:

 
>> C = textscan(fid, '%s'); 
>> C{1}{1} 

ans = 

gatcgtacgtcgatgc 

>> C{1}{2} 

ans = 

gtcgtacgatcgcatg 

>> C{1}{3} 

ans = 

cagctgactgatcgatcg 

請注意,您不需要表示\n作爲分隔符,因爲這是行字符的默認結束。

1

你應該先添加以下內容:

C = C{1}; 

%# then you can use 
C{1} 
C{2} 
C{3} 

那是因爲你的情況,TEXTSCAN返回一個1×1單元陣列C,其中的第一要素是三要素單元陣列。