读取字符串矩阵

时间:2015-11-12 08:50:45

标签: string matlab file-read

我需要读取这样的文本文件(列可以是6,9,12等等):

R,R,S,S,T,T
R,R,S,T,S,T
R,R,S,T,T,S
R,R,T,S,S,T
R,R,T,S,T,S
R,R,T,T,S,S
R,S,R,S,T,T
R,S,R,T,S,T
R,S,R,T,T,S
R,S,S,R,T,T
R,S,S,T,R,T

并将数据放入字符串矩阵(不带逗号)。

我已尝试使用mat=dlmread(file_name),但我认为它仅适用于数字。

我也试过这个:

mat=fileread(filename);
mat(mat==',') = ''

但输出很奇怪,mat是1乘72

==== EDIT ====

输出示例(矩阵11By6):

RRSSTT
RRSTST
RRSTTS
RRTSST
RRTSTS
RRTTSS
RSRSTT
RSRTST
RSRTTS
RSSRTT
RSSTRT

1 个答案:

答案 0 :(得分:2)

我觉得自己像个妓女,但这是许多可能的解决方案之一。

假设您的文件名为test.csv -

fileID = fopen('test.csv');
C = textscan(fileID,'%s %s %s %s %s %s' ,'Delimiter',',');

==== EDIT ====

如果您不想写%s 6次 - 请执行:

formatSpec = '%s';
N = 6;
C = textscan(fileID, repmat('%s', [1 N]),'Delimiter',',');

同样,这只是许多方法中的一种。

这将生成1 x 6的单元格结构,其中6个单元格中的每一个都代表String的一列。您现在可以使用大括号对其进行索引:

>> C{1}
>>ans = 

'R'
'R'
'R'
'R'
'R'
'R'
'R'
'R'
'R'
'R'
'R'

如果你想要一个完整的单元格结构,每个单元格中只有1个字符,你就必须这样做:

 V = horzcat(C{:}); %// size of V is 11x6

V = 

'R'    'R'    'S'    'S'    'T'    'T'
'R'    'R'    'S'    'T'    'S'    'T'
'R'    'R'    'S'    'T'    'T'    'S'
'R'    'R'    'T'    'S'    'S'    'T'
'R'    'R'    'T'    'S'    'T'    'S'
'R'    'R'    'T'    'T'    'S'    'S'
'R'    'S'    'R'    'S'    'T'    'T'
'R'    'S'    'R'    'T'    'S'    'T'
'R'    'S'    'R'    'T'    'T'    'S'
'R'    'S'    'S'    'R'    'T'    'T'
'R'    'S'    'S'    'T'    'R'    'T'

=====第二次编辑=====

要转换为Char数组: 使用Char

 T  = reshape(char(V(:)),size(V)) %// size of T is now 11*6 Char

>> T =
RRSSTT
RRSTST
RRSTTS
RRTSST
.
.