文本可以奇怪的行为

时间:2011-08-24 23:16:35

标签: matlab file-io cell-array

我想阅读表单的文本文件:

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

2 个答案:

答案 0 :(得分:1)

您应首先添加以下内容:

C =  C{1};

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

这是因为在你的情况下,TEXTSCAN返回一个1乘1的单元阵列C,其第一个元素是一个三元素的单元阵列。

答案 1 :(得分:0)

TEXTSCAN的输出是一个单元数组,它本身包含各种数据输入的数组。在您的情况下,所有数据都填充到单个单元格阵列中。要访问每个条目,请执行以下操作:

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

ans =

gatcgtacgtcgatgc

>> C{1}{2}

ans =

gtcgtacgatcgcatg

>> C{1}{3}

ans =

cagctgactgatcgatcg

请注意,您无需将\n指定为分隔符,因为这是默认的行尾字符。