Matlab从文本文件中读取列表列表作为字符串

时间:2012-12-10 21:49:14

标签: string file matlab vector

我是一名Java开发人员,也是Matlab的新手。我有一个类似的文件:

Label_X sdfasf sadfl  asdf a fasdlkjf asd 
Label_Y lmdfgl ldfkgldkj dkljdkljdlkjdklj
Label_X sfdsa sdfsafasfsafasf 234|3#ert 44
Label_X sdfsfdsf____asdfsadf _ dsfsd
Label_Y !^dfskşfsşk o o  o o 4545

我想要的是:

vector(数组)包含标签:

Label Array:
Label_X
Label_Y
Label_X
Label_X
Label_Y

和一个List(我们的例子有五个元素),list的每个元素都有分隔字符串的元素大小。我的意思是

Element Number   Value(List of strings)                Element size of value list
--------------   ----------------------                --------------------------
1                sdfasf,sadfl,asdf,a,fasdlkjf,asd      6 
2                lmdfgl,ldfkgldkj,dkljdkljdlkjdklj     3
3                sfdsa,sdfsafasfsafasf,234|3#ert,44    4
4                sdfsfdsf____asdfsadf,_,dsfsd          3
5                !^dfskşfsşk,o,o,o,o,4545              6

我知道Java非常简单,但我不知道如何在Matlab中实现它。

PS:我在做什么。我有一个包含人物推文的文本文件。第一个单词是行标签,其他单词是与该标签相关的对应单词。我将有一个标签列表和另一个列表,列出每个标签的文字。

2 个答案:

答案 0 :(得分:0)

这可能不是最佳的,但应该做到这一点

all = textread('test.txt', '%s', 'delimiter', '\n','whitespace', '');
List = cell(size(all));
for i = 1:size(all)
    [List{i}.name remain]    = strtok(all{i}, ' ');
    [List{i}.content remain] = strtok(remain, ' ');
    j = 0;
    while(size(remain,2)>0)
        j = j+1;
        List{i}.content = [List{i}.content temp ','];
        [temp remain] = strtok(remain, ' ');
    end
    List{i}.size = j;
end

答案 1 :(得分:0)

Matlab中最好的构造是细胞。单元格可以包含任何类型的一个对象,并且通常在数组本身中找到。像这样的东西应该工作,并且非常理想(假设你不要期望超过10K行);

output=cell(10000,1);     %This should be set to the maximum number of lines you ever expect to have
output_names=cell(size(output));
output_used=false(size(output));
fid=fopen('filename.txt','r');
index=0;
while ~feof(fid)
   index=index+1;
   line=fgets(fid);
   splited_names=regexp(line,'\w*','split');
   output{index}=splited_names(2:end);
   output_names{index}=splited_names(1);
   output_used(index)=true;
end
output=output(output_used);
output_names=output_names(output_used);