【问题标题】:Putting a line of chars from a txt-file in a vector in Matlab将 txt 文件中的一行字符放入 Matlab 中的向量中
【发布时间】:2012-12-28 15:33:31
【问题描述】:

我有一个 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};

【问题讨论】:

    标签: matlab vector text-parsing chars


    【解决方案1】:

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

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

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

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

    结果应该是字符元胞数组的元胞数组:

    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)

    【讨论】:

    • 谢谢!我只是想出了另一种出路,但这里看起来更苗条。
    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2014-03-14
    • 2018-12-23
    相关资源
    最近更新 更多