在Matlab中的矢量中将txt文件中的一行字符放入

时间:2013-01-14 16:26:38

标签: matlab vector text-parsing chars

我有一个看起来像这样的txt文件

a e e a a i
i i a e u i i a
a i e i i i a i 

我希望将每一行放在一个单独的向量中(当然,每个字符都放在一个字段中)。线条有不同的长度。使用数字内容似乎很容易。但是我怎么能用一行字符来做呢?

我现在的选择方式是将字符转换为数字并使用dlmread来完成工作。 有更好的想法吗?

感谢。

编辑: 我自己找到了一个解决方案。但是这里的反应似乎更直接。

fname =(['vokale/',si,'.txt']);  
         disp (['loading ...',fname]);
            fid = fopen(fname);           
            [vowels] = textread(fname, '%c');

s = textscan(fid,'%s','Delimiter','\n');
s = s{1};
b1_cell=textscan(s{1,1}, '%s');
b1=b1_cell{1,1};
b2_cell=textscan(s{2,1}, '%s');
b2=b2_cell{1,1};
b3_cell=textscan(s{3,1}, '%s');
b3=b3_cell{1,1};
b4_cell=textscan(s{4,1}, '%s');
b4=b4_cell{1,1};
b5_cell=textscan(s{5,1}, '%s');
b5=b5_cell{1,1};

1 个答案:

答案 0 :(得分:0)

首先,使用textread获取单元格数组中的行:

C = textread(filename, '%s', 'delimiter', '\n')

然后您可以使用regexp将每一行拆分为字符:

result = cellfun(@(x)regexp(x, '\w+', 'match'), C, 'Uniform', false)

结果应该是chars的单元格数组的单元格数组:

result = 
    {'a'    'e'    'e'    'a'    'a'    'i'}
    {'i'    'i'    'a'    'e'    'u'    'i'    'i'    'a'}
    {'a'    'i'    'e'    'i'    'i'    'i'    'a'    'i'}

或者,如果您只处理以空格分隔的字母(即仅一个字符),则可以将每一行存储为字符串(相当于C中的字符数组)。为此,只需删除空格即可。例如,使用regexprep

result = cellfun(@(x)regexprep(x, ' ', ''), C, 'Uniform', false)
result = 
    'aeeaai'
    'iiaeuiia'
    'aieiiiai'

例如,要访问第二行中的e,您可以撰写result{2}(4)